☰
源码安装 Harness 二次开发:从 clone 到跑通的完整评测与 TaoToken 配置
2026/9/26 11:35:29 网站建设 项目流程

1. 为什么我最后还是选了源码安装 Harness

如果你正在搜 Harness 源码安装、二次开发、clone 之后怎么跑通,这篇就是按我实际踩坑顺序写的。Harness 是 DeepSeek 开源的 Agent 运行时框架,能跑 CLI 也能起 Web UI,核心卖点是“一切皆插件”,模型适配器、工具、运行模式都能替换。它适合两类人:一类是想把 Agent 接到自己模型通道上的工程师,另一类是要基于 Cordis 插件体系做二次开发的人。npx 一键启动确实快,但你要改插件配置、换模型适配器、加自己的运行模式,只有源码路径能把控全局。

我这次的目标很明确:从 git clone 开始,把依赖装好、构建跑通、服务起起来,最后把模型请求统一走 TaoToken 的 API 通道,并用一条真实 Agent 任务验证整条链路。整个过程熟练后大约 1 小时,第一次接触建议留 2 到 3 小时消化 Cordis 的插件机制。下面按阶段拆开讲,每个阶段都给出可复制的命令和排障动作。

2. 环境准备与 clone:Node、pnpm 和目录结构

2.1 版本要求先对齐

Harness 官方要求 Node.js v22.19 及以上,我本地用 v24.6.0,包管理器用 pnpm 9.x。这里有个容易忽略的点:构建脚本对 pnpm 有依赖,npm 或 yarn 可能遇到锁文件不兼容。先确认版本:

node -v pnpm -v

如果 pnpm 没装,用 corepack 启用最省事:

corepack enable corepack prepare pnpm@9 --activate

2.2 clone 仓库

git clone https://github.com/deepseek-ai/deepseek-harness.git cd deepseek-harness

仓库体积约 180MB,国内网络下 clone 耗时 2 到 5 分钟不等。完成后先看目录,理解结构对后面二次开发很关键:

deepseek-harness/ ├── apps/ # CLI 与 Web UI 入口 ├── packages/ # 核心包:cordis 运行时、插件系统、模型适配 ├── plugins/ # 官方内置插件:shell、file-edit、llm 适配器 ├── docs/ # 架构文档与插件开发指南 └── package.json # 根工作区配置,定义 pnpm workspace

packages/cordis是插件元框架的核心,plugins/下每个文件夹是一个独立插件,有自己的 package.json 和入口文件。理解这一点后你会明白:二次开发不是改别人的核心代码,而是在自己的插件里扩展或替换行为。

3. TaoToken 前置:把统一 Key 和 API 通道准备好

3.1 为什么要在 Harness 里接 TaoToken

Harness 默认走 DeepSeek 官方模型适配器,但二次开发场景里你往往需要统一管理多个模型的 Key、切换通道、做成本观测。TaoToken 提供统一的 API 通道,兼容 OpenAI 协议风格,Harness 的模型适配器只要改 baseURL 和 apiKey 就能接上。这样你后续换模型、加插件、跑 Agent 任务,都不用到处散落 Key。

3.2 拿 Key 和确认接入信息

先到 TaoToken 控制台创建 API Key,入口在:

https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite

创建后拿到形如sk-xxxx的 Key。API 基础地址用:

https://taotoken.net/api

注意这个地址不加 UTM 参数,直接作为 baseURL 使用。接入文档在:

https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

如果你只是想先验证模型通不通,可以先用模型对话页面发一条消息确认 Key 有效:

https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite

长期做编码和 Agent 任务的话,Coding Plan 更适合持续调用:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite

3.3 依赖安装:pnpm install 实测

pnpm install

我的环境耗时约 3 分 40 秒,下载约 2.1GB 依赖,含大量 Rust 工具链用于原生模块编译。第一个阻塞点通常出在@deepseek-ai/cordis-native的 postinstall 阶段,它需要编译 Rust 扩展,系统缺 LLVM 或 Python 3 会直接报错退出。

Windows 用户提前装 VS Build Tools 2022(含 MSVC 工具链),macOS/Linux 确保python3和clang可用。装完重试即可。如果遇到网络超时导致半拉子缓存,pnpm 的缓存比 npm 严格,直接清理重来:

rm -rf node_modules pnpm-lock.yaml pnpm store prune pnpm install

4. 可复制配置:构建、settings.json 骨架与适配器替换

4.1 构建与常见报错

pnpm run build

这一步用 Turborepo 的 pipeline 按依赖拓扑并行构建,总耗时约 2 分 15 秒,16 核机器 CPU 峰值到 85%。产物在各包的dist/目录下。

我遇到的报错是packages/cordis构建时提示Cannot find module '@deepseek-ai/cordis-types',根因是 pnpm 的 hoist 模式与内部依赖声明冲突。临时解法是先手动构建被依赖包:

cd packages/cordis-types pnpm build cd ../.. pnpm run build

这个问题在 v0.1 预览版属于已知情况,社区 issue 里有提及。

4.2 settings.json 配置骨架

Harness 的模型配置可以放在工作区或用户级 settings.json 里。下面是我实测可用的骨架,把模型请求统一指向 TaoToken:

{ "llm": { "provider": "openai-compatible", "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "model": "deepseek-chat", "timeout": 60000 }, "workspace": { "root": "./workspace", "autoSave": true }, "plugins": { "tool-shell": { "enabled": true }, "tool-file-edit": { "enabled": true }, "llm-custom": { "enabled": true } } }

几个参数说明:baseURL固定用 TaoToken 的 API 地址,不要带查询参数;apiKey换成你控制台创建的 Key;model按你实际要调的模型名填;timeout给 60 秒,Agent 任务里工具调用链较长,太短容易中断。

4.3 替换模型适配器做二次开发

为了验证可扩展性,我把默认适配器复制一份改成自定义插件:

cp -r plugins/llm-deepseek plugins/llm-custom

改plugins/llm-custom/package.json里的插件名和入口,再改src/index.ts的核心请求部分:

import OpenAI from 'openai'; const client = new OpenAI({ apiKey: ctx.config.apiKey, baseURL: 'https://taotoken.net/api', }); const resp = await client.chat.completions.create({ model: ctx.config.model, messages, stream: true, });

然后在根配置里指定使用llm-custom。整个过程不用碰packages/下的核心代码,验证了“配置层替换”的设计承诺。

5. 验证请求:启动服务与首条 Agent 任务

5.1 启动 Web 服务

pnpm dsh web

终端显示Server running at http://127.0.0.1:3080。这里有个细节:部分功能在127.0.0.1下表现异常,切到localhost:3080后正常。浏览器打开后配置 API Key 和工作区。

5.2 用一条任务验证整条链路

首条任务我选了个经典测试:“在当前目录创建一个 Python 项目,实现带计分的贪吃蛇游戏,并确保能直接运行。”

Agent 的执行轨迹在 Trajectory 视图里完整呈现:系统提示词注入、思维链展开、工具调用序列(shell 创建文件、file-edit 写代码)、最终验证运行。总耗时约 48 秒,和社区反馈的 50 秒基准基本一致。这条任务能跑通,说明 clone、依赖、构建、TaoToken 通道、模型适配器、工具插件整条链路都通了。

5.3 源码版比 npx 版多出来的能力

通过源码安装,我发现几个 npx 版本没暴露的特性。plugins/experimental/目录里有未在文档中提及的浏览器自动化插件,可手动启用;调试模式pnpm dsh web --debug会输出详细插件生命周期日志和 Cordis 服务解析过程;创造模式下修改本地插件代码后无需重启,框架自动重载变更。这些对普通用户价值有限,但对深度定制是重要抓手。

6. 本篇常见错排查

6.1 pnpm install 卡在 cordis-native 编译

现象是 postinstall 阶段报 Rust 编译失败。先确认python3 --version和clang --version可用,Windows 装 VS Build Tools 2022 并勾选 MSVC。装完清缓存重装。

6.2 构建报 Cannot find module cordis-types

这是 workspace 依赖解析顺序问题。按 4.1 的方式先单独构建packages/cordis-types,再回根目录整体构建。

6.3 服务起来但模型请求 401

先检查 settings.json 里的apiKey是否是 TaoToken 控制台创建的 Key,baseURL是否是https://taotoken.net/api。可以先用模型对话页面单独发一条消息,确认 Key 本身有效,再回来查 Harness 配置。

6.4 127.0.0.1 下功能异常

换成localhost:3080访问。这个差异在 v0.1 预览版里存在,属于已知现象。

6.5 Agent 任务中途超时

把 settings.json 里的timeout调到 60000 以上。Agent 任务里工具调用链长,默认值偏短容易中断。

7. 下一步:把 Key 和接入文档收好

整条链路跑通后,你手里其实有两样东西要固定下来:一个是 TaoToken 的 API Key 管理,一个是 Harness 的接入配置。Key 在控制台统一创建和轮换:

https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite

接入细节和参数说明看文档:

https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

如果你后面要长期跑编码和 Agent 任务,Coding Plan 比按次调用更省心:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite

我自己的做法是把 settings.json 里的 Key 抽成环境变量,插件代码里只读process.env.TAOTOKEN_API_KEY,这样换 Key 不用改配置,也不会把 Key 提交进仓库。源码安装 Harness 的价值就在这种可控性上:模型通道、工具集、运行模式都在你手里,而 TaoToken 负责把 Key 和通道统一收口。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询