ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

DeepSeek Harness 零基础上手:10分钟让智能体框架跑起来并挂载你的第一个插件

DeepSeek Harness 零基础上手:10分钟让智能体框架跑起来并挂载你的第一个插件 DeepSeek Harness 零基础上手10分钟让智能体框架跑起来并挂载你的第一个插件【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness本文带你认识 DeepSeek Harness——一个万物皆插件的开源智能体框架agent harness。你不需要理解内部架构只要跟着下面五个问题走10分钟内就能让 Web 界面跑起来、把模型密钥填进去并亲手写一个能随启动加载的自定义插件。先别急着敲命令。这篇文章不是按安装→启动→配置的清单式流水账而是围绕五个真实疑问展开这个框架凭什么万物皆插件环境要备什么代码和依赖怎么来界面怎么起AI 怎么连、插件怎么跑每个问题都有可直接复制的命令和结果预期跟着走完你就有了一台能自己说话、能装插件的智能体底座。问题一这个项目到底解决了什么为什么值得花 10 分钟DeepSeek Harness命令行里叫dsh是一个由 DeepSeek 开源的智能体框架核心设计理念只有一句话Everything is a Plugin万物皆插件。这意味着什么你平时用的 AI 应用的大脑模型路由、手脚工具读写文件、执行命令、搜网页、记忆会话管理、皮肤Web 界面在 Harness 里全部是插件可以单独拆装、替换、新增。对于普通用户来说这个理念带来的实际价值是你不用等官方发布新功能。想给智能体加一个定时提醒写个插件挂上去就行想接一个公司内部的模型网关填一张表单就行。这种框架本身是空的、能力全靠插件拼的架构正是它和大多数开箱即用的 AI 工具最大的区别。 一句话记住Harness 是插座插件是电器。你装多少电器插座就有多少能力。问题二开始前机器上要备齐什么越少越好三样就够Node.js 22 或更高版本项目要求^22.19.0 || 24.0.0建议直接装最新的 LTSpnpm 包管理器推荐用corepack enable一条命令启用Git用于拉取代码在终端验证一下三行命令确认环境就绪# 确认 Node 版本输出需为 v22 及以上 node -v # 启用 pnpmNode 自带 corepack无需额外安装 corepack enable # 确认 pnpm 可用 pnpm -v问题三代码从哪来依赖怎么装才不踩坑在你想存放项目的目录里克隆仓库并安装依赖# 克隆 DeepSeek Harness 仓库 git clone https://gitcode.com/gh_mirrors/de/deepseek-harness # 进入项目目录 cd deepseek-harness # 安装全部依赖这是一个 monorepo首次安装会花几分钟 pnpm install这里藏着一个新手最容易踩的坑依赖装完别急着启动从源码运行时需要先构建一次项目产物再启动 Web UI否则会报产物缺失。# 先构建仓库产物只需执行这一次之后反复启动都不用再 build pnpm run build # 启动 Web UI pnpm dsh web 避坑提示如果你只是想体验一下、暂不打算改代码其实有更快的路径——直接npx deepseek-ai/dsh web一条命令就能跑不需要克隆仓库。两种方式的取舍见下方表格。启动方式适合谁需要什么能加载本地插件吗npx deepseek-ai/dsh web只想快速体验仅 Node.js否没有本地源码目录克隆源码 pnpm installpnpm run buildpnpm dsh web想写插件、改框架Node.js pnpm Git是问题四界面怎么跑起来看到什么才算成功输入pnpm dsh web后等编译完成终端会打印类似下面的信息并自动打开浏览器dsh web: opening the default browser; pass --no-open to disable浏览器自动打开http://127.0.0.1:3080这就是 Harness 的主界面。如果你是在服务器SSH 连接上启动浏览器不会自动打开但终端会打印宿主机的访问地址手动复制到本地浏览器即可。打开界面后你会注意到此时还没有选中任何工作区输入框是灰的。别慌这是设计如此——先给智能体指定一个工作目录它才知道在哪干活。 补充说明dsh进程会把启动时所在的目录当作默认文件系统位置。建议在一个专门建的空项目目录里启动它避免它看到整个家目录。问题五AI 怎么连模型密钥到底填在哪这是大多数人最关心的一步也是智能体真正活过来的关键。操作路径是设置 → 模型。步骤如下打开设置 → 模型找到 DeepSeek 卡片在API 密钥输入框里粘贴你的 DeepSeek API 密钥点击右下角保存。保存后不需要重启服务器模型路由立即可用。密钥是只写的——界面只显示脱敏描述符不会回显明文安全感拉满。如果你的密钥来自其他服务商Anthropic、OpenAI 等点击** 添加提供方**选取对应服务商并填入密钥即可。而如果密钥来自公司网关、自建服务器这类目录里没有的提供方就要用** 添加自定义提供方**表单里四项是必填的Provider ID小写唯一标识创建后不可改、API 地址、API 协议、API 密钥。填完再添加至少一个模型保存即可。 遇到MISSING_CREDENTIAL报错就是密钥没存进去UNKNOWN_MODEL则是你选了没配置的模型。到模型页核对一遍即可。配置完成后回到主界面点击选择工作区添加刚才启动dsh的目录并选中它。这时输入框解锁你可以发送第一条指令试试Summarize this repository and identify its main packages.看到智能体开始读文件、跑命令、输出结论恭喜你整套智能体框架已经跑起来了。但这才刚到一半——下面的重头戏是让万物皆插件这句话在你手里成立。重头戏第一个插件怎么跑起来插件本质上就是一个导出了apply函数的 TypeScript 模块。框架加载时调用它并传入ctx上下文对象你通过ctx注册能力。就这么简单没有配置文件没有注册表。第一步建目录、写插件在仓库根目录创建临时项目# 创建插件开发目录 mkdir -p scratch-plugin/src创建scratch-plugin/src/my-plugin.ts写入下面这段——它会让你一眼看到插件何时被加载import type { Context } from deepseek-ai/cordis export const name hello-plugin export function apply(ctx: Context) { // 插件被加载时这行日志会出现在启动终端里 console.log([hello-plugin] 我的第一个DeepSeek Harness插件加载成功) // 用 ctx.effect 注册一个定时器每 5 秒输出一次 ctx.effect(() { const timer setInterval(() { console.log([hello-plugin] 插件运行中...) }, 5000) // 返回清理函数插件卸载时框架自动调用无需手动 clearInterval return () clearInterval(timer) }) }注意最后那个return通过ctx注册的任何东西——事件监听、定时器、工具——在插件卸载时都会被框架自动清理。ctx.effect只是给需要手动关资源的情况比如网络连接留了个口子。你不需要写任何 removeListener。第二步把插件插进应用创建scratch-plugin/cordis.yml内容如下。注意name字段必须是绝对路径把/absolute/path/to/deepseek-harness替换成你机器上的实际路径在仓库根目录运行pwd就能看到# 通过 patch 文件把本地插件挂载到 Web 应用 - insert: - id: hello name: /absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts第三步带着插件启动# 使用 patch 覆盖层启动 Web UI插件会被一并加载 pnpm dsh web --patch ./scratch-plugin/cordis.yml打开http://127.0.0.1:3080回看启动终端——你已经能看到插件在打招呼了[hello-plugin] 我的第一个DeepSeek Harness插件加载成功 [hello-plugin] 插件运行中... [hello-plugin] 插件运行中...到这里你的第一个 DeepSeek Harness 插件已经跑起来了从框架能跑到我的插件被框架加载中间只隔了三个文件、一条命令。进阶小彩蛋插件不止一种写法上面用的是最常见的函数形式。除此之外插件还支持另外两种形态选择依据很简单形态适用场景最小代码长这样函数形式大多数情况最轻量export function apply(ctx)对象形式需要集中声明元信息export default { name, inject, apply }类形式要向其他插件提供服务class MyService extends Service如果插件要用到框架里的现成服务比如tools、llm在函数外再导出一个inject数组声明依赖即可export const name my-tool-plugin export const inject [tools] // 声明依赖框架会保证 tools 就绪后才加载本插件 export function apply(ctx: Context) { // 在这里 ctx.tools 一定可用 }框架会耐心等待依赖就绪再加载你的插件依赖没就绪绝不启动——这就是 Cordis 插件体系组合优于继承的体现。想深入了解底层插件框架可以从docs/cordis-tutorial/的教程入手它能在临时目录里动手搭建连 API 密钥都不用。如果你卡住了先看这三条pnpm dsh web报产物相关错误回到仓库根目录跑一次pnpm run build再重新启动。浏览器没自动打开你多半是在 SSH 环境里启动的终端会打印 URL复制到本地浏览器访问即可也可以在命令后加--no-open关闭自动打开行为。插件日志没出现检查cordis.yml里的name是不是绝对路径patch 文件只贡献配置路径写错 loader 是找不到模块的。下一步往哪走插件已经能说话了但它还没动手。接下来的方向很自然让插件真正干点什么——比如注册一个能被智能体调用的工具让它在执行任务时自动使用你的能力。入门后值得探索的入口有开发一个工具docs/user/develop/basic/tool.md了解工具定义 DSL让智能体手脚更丰富插件配置化docs/user/develop/basic/config.md让插件接受用户配置而不是写死参数发布你的插件docs/user/develop/basic/publish.md把插件打包分享出去另外如果你想搞清楚 Harness 为什么能把万物皆插件贯彻得这么彻底docs/cordis-tutorial/这套底层框架教程比源码更容易读——它是从零手搭插件体系的适合在周末下午配一杯咖啡慢慢看。把第一个插件跑起来你已经在用智能体框架造积木了。接下来造什么由你决定。 【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表