首页/新闻资讯/正文详情

开源项目第194期:deepseek-harness — DeepSeek 出品的 AI Agent 开发框架,万物皆插件,用 TaoToken 统一 Key 打通 Cordis 插件链路

发布时间:2026/9/26 23:24:12 来源:云帆数科 栏目:资讯中心
开源项目第194期:deepseek-harness — DeepSeek 出品的 AI Agent 开发框架,万物皆插件,用 TaoToken 统一 Key 打通 Cordis 插件链路
1. 为什么 deepseek-harness 值得你花一个下午跑通deepseek-harness 是 DeepSeek 出品的 AI Agent 开发框架核心卖点是「万物皆插件」——它把文件编辑、Shell 执行、向量检索、规划器、子 Agent 调度这些能力全部拆成独立插件内核只负责注册、依赖解析和生命周期管理。适合谁适合已经了解 tool calling 基本概念、写过 TypeScript/Node.js、想快速搭一个可调试 Agent 环境的开发者。它和 EleutherAI 的 lm-evaluation-harness 没有任何关系这里的 harness 指的是「约束层」给 Agent 套上结构化的边界让它的能力可以被精确引导。我试过把它跑在本地最直观的感受是换模型后端不用动其他代码关掉子 Agent 功能只需要卸载一个插件。底层是 Cordis 框架一个专为可插拔应用设计的 TypeScript 框架内核本身不含业务逻辑。它提供四种运行模式——Standard 完整工具链、PTC 程序化工具组合、Minimal 只留 bash 和编辑器、Creative 运行时插件试验。其中 PTC 模式最特别模型不是一步步调工具而是直接写一段 TypeScript 程序用 if/else、for、Promise.all 把多个工具调用组合起来一次执行完。这篇不聊概念直接给你可复制的 config.toml 和 settings.json 骨架用 TaoToken 统一 Key 打通 Cordis 插件调用链从启动、插件加载到请求验证在本地完成一次端到端跑通。2. 前置准备TaoToken 统一 Key 与 Node.js 环境在动 deepseek-harness 之前先把两件事搞定Node.js 运行时和模型 API 通道。deepseek-harness 是 TypeScript 为主、Node.js 运行的项目建议 Node 18 以上pnpm 作为包管理器Cordis 生态的插件大多用 pnpm workspace 组织。模型通道这块我用 TaoToken 做统一入口。原因很直接deepseek-harness 的模型后端是插件化的dsh/plugin-model-openai这类插件走的是 OpenAI 兼容接口而 TaoToken 提供的就是 OpenAI 兼容的 API 通道一个 Key 可以切换不同模型不用为每个后端单独配环境变量。对插件链路调试来说统一 Key 意味着你换模型时只需要改一个 base_url 和 model 字段插件本身不用动。先去官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册然后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite API Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。API 基础地址是 https://taotoken.net/api 注意这个地址不带 UTM 参数配置时直接写这个。拿到 Key 之后先验证通道是否通curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: deepseek-chat, messages: [{role: user, content: ping}], max_tokens: 16 }返回里有choices[0].message.content就说明通道正常。这一步别跳过后面插件加载失败时你能快速判断是通道问题还是插件配置问题。3. 可复制配置config.toml 与 settings.json 骨架deepseek-harness 的配置分两层config.toml管运行模式和插件清单settings.json管模型后端和 API 通道。下面是我实测能跑通的骨架你可以直接复制改。先建项目目录mkdir dsh-demo cd dsh-demo pnpm init pnpm add deepseek-ai/dsh然后创建config.toml# config.toml — deepseek-harness 运行配置 [harness] mode standard # standard | ptc | minimal | creative session_dir ./.dsh/sessions log_format append-only [plugins] # 核心工具插件 enabled [ dsh/plugin-str-replace-editor, dsh/plugin-bash, dsh/plugin-retrieval, dsh/plugin-planning, dsh/plugin-goals, dsh/plugin-subagents, dsh/plugin-workflows, dsh/plugin-web-ui ] # 模型后端插件走 OpenAI 兼容通道 [plugins.model] name dsh/plugin-model-openai base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY default_model deepseek-chat # 社区插件示例按需开启 [plugins.community] github_tools false再创建settings.json{ model: { provider: openai-compatible, baseURL: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY}, model: deepseek-chat, temperature: 0.3, maxTokens: 4096 }, session: { appendOnly: true, trajectory: true, resumeEnabled: true }, plugins: { autoLoad: true, hotReload: false } }两个文件的分工要清楚config.toml决定「加载哪些插件、用什么模式」settings.json决定「模型怎么调、会话怎么记」。api_key_env和${TAOTOKEN_API_KEY}都指向环境变量不要把 Key 硬编码进文件。设置环境变量export TAOTOKEN_API_KEY你的Key如果你用 PTC 模式把config.toml里的mode改成ptc其他不用动。PTC 模式下模型会生成 TypeScript 程序来组合工具调用插件清单保持一致即可。4. 启动、插件加载与请求验证配置就绪后启动 Web UInpx deepseek-ai/dsh web --config ./config.toml --settings ./settings.json正常的话终端会输出Web UI listening on http://localhost:3080。打开浏览器你应该能看到插件列表已经加载。如果某个插件没加载终端会打印plugin load failed: name记下名字去第 5 节排查。CLI 模式验证更直接npx deepseek-ai/dsh 列出当前目录下的 TypeScript 文件并统计每个文件的行数 \ --config ./config.toml \ --settings ./settings.json这条指令会触发plugin-bash和plugin-str-replace-editor的调用链。观察终端输出你应该能看到工具调用的轨迹先执行ls或find再对每个文件执行wc -l最后汇总。这就是 Cordis 插件链路在工作——每个能力是独立插件内核负责把它们串起来。验证模型通道是否真的走了 TaoToken可以看会话日志ls ./.dsh/sessions/ cat ./.dsh/sessions/最新session-id/events.jsonl | head -20日志是 append-only 格式每个事件一行 JSON。找model_request类型的事件里面的base_url字段应该是https://taotoken.net/api。如果这里显示的是别的地址说明settings.json没生效检查文件路径和 JSON 格式。再验证一次 PTC 模式。改config.toml的mode ptc重启然后发一条需要多步操作的指令npx deepseek-ai/dsh 读取 src 下所有 .ts 文件找出没有对应 .test.ts 的文件生成测试模板 \ --config ./config.toml \ --settings ./settings.jsonPTC 模式下模型不会一步步调工具而是生成一段 TypeScript 程序里面用Promise.all并行读取文件、用if判断测试文件是否存在、用循环生成模板。你在日志里会看到ptc_program事件里面是模型生成的完整程序。这是 PTC 和标准工具调用最大的区别控制流在程序里不在模型决策里。5. 本篇常见错排查插件加载失败plugin load failed: dsh/plugin-xxx先确认包是否安装。Cordis 插件是独立 npm 包config.toml里写了名字不代表装了。执行pnpm add dsh/plugin-xxx补装。如果装完还失败检查 Node 版本部分插件要求 Node 20。模型请求 401invalid api key九成是环境变量没传进去。settings.json里写的是${TAOTOKEN_API_KEY}这是变量引用不是字面值。确认echo $TAOTOKEN_API_KEY有输出且启动命令的 shell 和设置变量的 shell 是同一个。如果你在 IDE 终端里设的变量换到系统终端启动可能就丢了。模型请求 404model not foundsettings.json里的model字段要和 TaoToken 支持的模型名一致。先用第 2 节的 curl 命令确认你的 Key 能调哪些模型再把model改成对应的名字。baseURL结尾不要带/v1TaoToken 的地址是https://taotoken.net/api插件内部会拼/v1/chat/completions。PTC 模式报错ptc program execution failedPTC 模式要求模型能生成合法 TypeScript。如果模型能力不够生成的程序可能有语法错误。换一个代码能力更强的模型或者在settings.json里把temperature降到 0.1。另外确认dsh/plugin-bash和dsh/plugin-str-replace-editor都在enabled列表里PTC 程序调用的工具必须已加载。会话日志为空session_dir下没有文件检查config.toml里session_dir的路径是否可写。相对路径是相对于启动命令的工作目录不是配置文件所在目录。建议用绝对路径或者确认你在项目根目录启动。Web UI 打不开端口被占用默认 3080如果被占启动时加--port 3081。或者先lsof -i :3080看谁占着。6. 把 Key 和插件链路固定下来跑通一次之后建议把配置固化config.toml和settings.json提交到项目仓库TAOTOKEN_API_KEY放本地.env或 shell profile不要提交。这样团队里其他人 clone 下来设个环境变量就能复现你的 Agent 环境。如果你主要做长期编码任务或 Agent 开发可以看看 Coding Plan它适合需要持续调用、多轮迭代的场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。单纯验证模型对话效果用模型对话页更快https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 OpenAI 兼容接口的完整参数说明。deepseek-harness 的插件链路调试核心就三件事插件装没装、Key 通不通、模式对不对。把这三件事用日志固定下来后面换模型、加插件、切模式都是改配置的事不用动代码。

相关推荐

Pytest进阶实战:从fixture到动态参数化与插件扩展
Pytest进阶实战:从fixture到动态参数化与插件扩展

前段时间帮一个朋友排查测试用例,他一个项目里堆了三百多条几乎一模一样的用例,区别只是请求参数不同。我问他为什么不用参数化,他说“用了啊,我复制粘贴改参数就是参数化”。这个回答让我有点哭笑不得,也让我意识到&a… · 2026/9/26 23:24:12

真我手机照片互传全攻略:5种实用方法覆盖所有场景
真我手机照片互传全攻略:5种实用方法覆盖所有场景

做手机内容这些年,最常被问到的其中一类问题就是:真我手机照片到底怎么互传。很多人以为传照片就是把文件发一下,真上手时才发现问题一大堆——明明两台手机靠在一起,却互相找不到;传了一百多张照片,对方收… · 2026/9/26 23:24:12

图书推荐系统实战:SpringBoot+Vue+协同过滤算法毕业设计全攻略
图书推荐系统实战:SpringBoot+Vue+协同过滤算法毕业设计全攻略

毕业设计做到图书推荐系统,这个选题说实话挺讨巧的。它不是一个“纯CRUD”的管理系统,也不像纯算法项目那样对数学要求很高,刚好卡在“工程能力”和“算法入门”的交叉点上,无论是本科还是专科毕业设计都比较合适。我当年帮人带过… · 2026/9/26 23:24:12

拒绝丑模板!在门户网站管理建设工作讲话图解步骤全解
拒绝丑模板!在门户网站管理建设工作讲话图解步骤全解

拒绝丑模板!在门户网站管理建设工作讲话图解步骤全解 别再对着那个一眼假的 Bootstrap 模板抓头了,真的,模板网站太丑不够用是大多数创业团队负责人的噩梦。你花大价钱买的“企业级解决方案”,上线后客户第一反应往往是:“这网站是十年前的吧… · 2026/9/27 0:12:39

企业网站seo排名优化哪家好?5步实操避坑指南
企业网站seo排名优化哪家好?5步实操避坑指南

企业网站seo排名优化哪家好?5步实操避坑指南 模板网站太丑且功能僵化,根本撑不起业务需求,这时候大家最纠结的就是企业网站seo排名优化哪家好,怕被割韭菜。… · 2026/9/27 0:12:26

做网站公司晨旭东方避坑指南:网站被黑挂马后的7天自救实战
做网站公司晨旭东方避坑指南:网站被黑挂马后的7天自救实战

做网站公司晨旭东方避坑指南:网站被黑挂马后的7天自救实战 凌晨三点,手机突然疯狂震动。你迷迷糊糊醒来,点开工作群,满屏都是红色感叹号和愤怒的语音条。“网站怎么变成赌博广告了?”“客户投诉说点击链接跳转到非法页面!”“咱们是不是被黑客入侵了?… · 2026/9/27 0:12:02

为wordpress首页添加关键词的速查手册:告别拖期
为wordpress首页添加关键词的速查手册:告别拖期

为wordpress首页添加关键词的速查手册:告别拖期 改个需求建站公司拖一周,这种痛谁懂?很多设计师转前端的朋友,接手一个WordPress项目,客户指着首页说“这里要加个关键词,方便百度搜”,结果开发团队排期排到下个月。别等了,今天就把… · 2026/9/27 0:11:36

Ajax实现WordPress导航栏实战案例与安全加固
Ajax实现WordPress导航栏实战案例与安全加固

Ajax实现WordPress导航栏实战案例与安全加固 做网站最怕什么?不是代码写不出来,是上线后一堆破事儿缠身。特别是备案流程一头雾水,域名刚注册完,ICP备案材料准备到一半,发现服务器IP和域名解析对不上,或者SSL证书没配好导致浏览器… · 2026/9/27 0:11:24

如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程
如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程

如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程 【免费下载链接】wterm A terminal emulator for the web 项目地址: https://gitcode.com/gh_mirrors/wterm1/wterm wterm 是一款面向浏览器的 Web 终端模拟器(terminal emulator for the… · 2026/9/27 0:11:24

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码