Learn DeepSeek Harness

从 0 到 1 构建你的 Agent Harness,每次只加一个机制

先实现每个机制的最小版本,再深入 packages/ 的真实源码对照 —— 20 个渐进版本(s01 → s20),最后你会同时读懂 Agent Harness 的组成与 DeepSeek Harness 的每个插件。

开始学习 →
20 课5 层架构19 个真实包对照

核心模式 (Core Pattern)

所有 AI 编程 Agent 共享同一个循环:调用模型、执行工具、回传结果。生产级系统(包括 DeepSeek Harness)都会在这个循环上叠加策略、权限、记忆和生命周期层,但循环本身始终不变。

agent_loop.mjs

// 用 DeepSeek 的 OpenAI 兼容 API 实现最小 agent 循环
const API = "https://api.deepseek.com/chat/completions";

async function agentLoop(messages, tools) {
  while (true) {
    const res = await fetch(API, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${process.env.DEEPSEEK_API_KEY}`,
      },
      body: JSON.stringify({ model: "deepseek-chat", messages, tools }),
    });
    const data = await res.json();
    const msg = data.choices[0].message;
    messages.push(msg); // 模型回答进入历史

    // 模型不调用工具 → 结束
    if (!msg.tool_calls) return;

    // 模型调用工具 → 逐个执行、回传结果
    for (const call of msg.tool_calls) {
      const result = await execute(call.function.name, JSON.parse(call.function.arguments));
      messages.push({ role: "tool", tool_call_id: call.id, content: String(result) });
    }
  }
}

消息增长:每轮循环,messages 数组都会追加模型回答和工具结果。

消息增长 — 观察 messages 数组在每轮循环中的变化
0user
user: 帮我列出当前目录文件
1llm
assistant (tool_calls: bash)
2tool
tool: bash 输出
3llm
assistant: 最终回答
4done
循环结束

这是唯一的核心。 后面 19 课都在这 30 行循环上叠加机制,循环本身始终不变。

学习路径 (Learning Path)

20 个渐进式课程,从最小循环到完整多 Agent Harness。每一课只加一个机制。

架构层次 (Architecture Layers)

五个正交关注点组合成完整的 Agent:

工具与执行
循环、工具分发、权限、钩子
规划与控制
计划、子代理、技能、系统提示词、错误恢复、计划模式
记忆管理
上下文压缩、会话记忆
并发与调度
后台任务、定时调度
多 Agent 平台
目标、工作流、子代理提供者、预设组合、外部工具、成品组装

版本对比

20 个版本,每次只加一个机制。对照看一遍,整个 Harness 的演进一目了然。

工具与执行

版本 新增机制 最小实现新增 真实包
s01 模型/工具循环 30 行 while true + bash core/agent-loop
s02 工具注册表 5 个工具 + 分发表 core/tools
s03 审批与沙箱 三态策略 + ask 交互 interaction · sandbox
s04 生命周期钩子 PreToolUse/PostToolUse/Stop hooks

规划与控制

版本 新增机制 最小实现新增 真实包
s05 显式 todo 计划 3 个工具 + 计划渲染 todo
s06 子代理 新循环 + 新消息数组 subagent
s07 技能按需加载 目录 + load 工具 skill
s10 系统提示词组装 区块 + 变量 + 排序 core/system-prompt
s11 错误恢复 分类 + 退避 + 步数上限 guard
s12 计划模式 状态开关 + 策略区块 + 闸门 plan

记忆管理

版本 新增机制 最小实现新增 真实包
s08 上下文压缩 token 压力 + 摘要替换 compaction
s09 会话事件日志 追加式事件 + 派生视图 core/session

并发与调度

版本 新增机制 最小实现新增 真实包
s13 后台任务 job 协议 + 完成通知 jobs
s14 定时调度 持久提醒 + 到期投递 schedule

多 Agent 平台

版本 新增机制 最小实现新增 真实包
s15 持久目标 goal 工具 + 自动续轮 goal
s16 工作流编排 agent/pipeline/parallel workflow
s17 提供者抽象 委托契约 + 多后端 subagent
s18 预设组合 每会话挂载清单 preset
s19 外部工具桥 MCP 客户端 + web 缝 mcp · web
s20 成品组装 spine + 入口 + profile examples/agent-spine-demo

下一步:跑真实的 DeepSeek Harness

课程写完了,现在去用真的。

安装与运行

从 npm(需要 Node.js):

npx @deepseek-ai/dsh web

默认在 http://127.0.0.1:3080 打开 Web UI(更完整的指南见 docs/user/guide/index.md)。

从源码运行(本仓库):

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

配置 DeepSeek API 密钥(DEEPSEEK_API_KEY),然后新建会话,让 Agent 做一件多步任务。

阅读建议

本课程的三个心智模型

  1. 一个循环:所有 Agent 都是 while true——调用模型、执行工具、回传结果。其余一切都是环绕它的策略与生命周期。
  2. 事件日志是记忆:一切状态(todo、计划、目标、调度、会话历史)都长在追加式事件日志上,视图是派生的。Model-visible ⟺ logged。
  3. 能力缝:Service Definition / Provider / Consumer 三角。接口稳定,后端可换——工具、子代理、沙箱、模型、web、技能,全都一样。

记住这三条,你就拥有了阅读任何 Agent Harness(包括 DSH 源码)的地图。


本课程基于 DeepSeek Harness 仓库当前状态编写。DeepSeek Harness 处于开发者预览阶段,接口可能随迭代变化;机制与设计意图不变。