DeepSeek Harness 快速上手指南:3 条命令装好环境,再跑通你的第一个插件
【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness
DeepSeek Harness(dsh)是一个"一切皆插件"的智能体框架:模型接入、工具、调度、UI 能力都以插件形式组合,你想扩展什么就写一个插件挂进去。从零克隆到浏览器里看到界面、再到终端打出自己插件的加载日志,整个过程大约 5 分钟,前提是你手头有 Node.js 22.19 或更高版本和 pnpm。本文走一遍完整链路:装环境、启动 Web UI、配模型密钥、写并加载第一个插件。
动手之前:Node 22 与一份仓库代码
这一节跑完后,你的电脑上会有一个可用的 deepseek-harness 源码目录。
git clone https://gitcode.com/gh_mirrors/de/deepseek-harness cd deepseek-harness第一条命令把仓库拉到本地,第二条进入目录,后面所有操作都从这里出发。装依赖前,先确认 pnpm 可用:
corepack enable这行激活 Node 自带的 corepack,让pnpm命令直接可用,不用单独装包管理器。
一句话提醒:项目目前处于开发者预览阶段,迭代很快,可能随时出现破坏兼容性的变更,上手前建议扫一眼仓库里的 SAFETY.zh.md。
一次装好、构建并启动 Web 服务
这一节跑完后,浏览器会打开 DeepSeek Harness 的主界面。
pnpm install把整个 monorepo 的依赖装到node_modules,第一次跑会花几分钟。
pnpm run build源码方式运行需要先构建产物(包和前端 bundle),dsh启动时直接消费这些产物,不会现场再编译。
pnpm dsh web这条命令启动 Web 服务并监听http://127.0.0.1:3080,本地启动时会自动拉起默认浏览器;只想跑服务不弹浏览器的话,加--no-open。
配置模型:30 秒填入 API 密钥
这一节跑完后,界面里就能发起真实的对话请求。
打开设置 → 模型,在 DeepSeek 卡片的 API 密钥字段里粘贴你的密钥,点保存。密钥是只写的——保存后页面只会拿到脱敏描述符,明文落在本地凭据文件里,settings 只存引用。
两个常见后续动作:
- 页面下方的添加模型提供商支持选 dsh 内置的第三方提供商(
anthropic、openai、moonshotai等),填密钥即用; - 如果用的是中转站或自建网关,切换到自定义模型 API页签,填 Provider ID、API 地址、协议和密钥即可。Provider ID 是永久标识,定好别改;模型列表还能点"获取可用模型"让端点自己报出来。
模型和密钥的修改在下一次请求时生效,不需要重启服务器。详细字段和排错(比如网关拒收请求的 compat 开关)在 配置模型 里有完整说明。
写第一个插件:3 个文件换 1 条启动命令
这一节跑完后,你的终端会打印出自定义插件的加载日志——这是整个"万物皆插件"架构的最小闭环。
在仓库根目录建一个临时项目:
mkdir -p scratch-plugin/src创建scratch-plugin/src/my-plugin.ts,一个插件本质上就是一个导出apply函数的 TypeScript 模块,框架加载时调用它并传入上下文ctx:
import type { Context } from '@deepseek-ai/cordis' export const name = 'hello-plugin' export function apply(ctx: Context) { console.log('[hello-plugin] plugin loaded!') }再创建scratch-plugin/cordis.yml作为覆盖层,告诉 loader 挂载这个文件(pwd查看当前仓库绝对路径后替换进去,必须是绝对路径):
- insert: - id: hello name: '/你的绝对路径/deepseek-harness/scratch-plugin/src/my-plugin.ts'最后带参数启动:
pnpm dsh web --patch ./scratch-plugin/cordis.yml--patch把这个 yml 叠到默认配置之上,只贡献配置、不改变 loader 的 profile 目录。启动过程中终端出现[hello-plugin] plugin loaded!,就成功了。
顺手记两个行为细节,能省掉不少困惑:
ctx注册的监听器、工具、定时器在插件卸载时自动清理,不需要手动 removeListener;- 自己管的资源(如网络连接)用
ctx.effect(() => { ...; return cleanup })注册,返回的函数会在卸载时执行。
跑起来之后:插件形态与继续深入的路径
这一节帮你判断"我的插件该用哪种写法",并指好下一站的门。
插件有三种导出形态,按需取用:
| 形态 | 导出方式 | 什么时候用 |
|---|---|---|
| 函数 | export function apply(ctx) | 最常用,注册工具、监听事件即可 |
| 对象 | export default { name, inject, apply } | 想声明依赖时写法更紧凑 |
| 类 | export default class MyService extends Service | 需要向其他插件提供服务时 |
需要依赖别的插件(比如工具注册表tools、LLM 路由llm)时,在模块里声明export const inject = ['tools'],框架保证依赖就绪后才执行你的apply——这是插件之间解耦的核心机制。
接下来按目的走:
- 给智能体加一个新工具:开发一个工具
- 让插件接受用户配置:插件配置
- 想搞懂底层 Cordis 框架(事件、服务、生命周期):Cordis 框架教程
- 面向用户的功能全景:Web UI 使用指南
- 架构与设计背景:architecture、development
跑通到这里,你已经站在了框架的入口处:界面里能聊天,终端里能验证插件加载。剩下的事情,就是决定第一个要挂进去的能力长什么样。
【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考