DeepSeek Harness 认知

DSH 工作原理:模型请求、工具执行与会话循环到底怎样连接

用采购合计练习和源码说明 profile、preset、turn、step,以及工具结果为什么需要进入下一次模型请求。

新手 预计 18 分钟 更新 2026/9/5 核验 2026/9/5
本页目录

完成结果

学完后你会留下什么

一份产品判断清单,以及一个范围明确的练习任务。

验证版本
0.1.2-rc.1
适合谁
希望在独立练习环境中学习 DSH 的开发者和 Agent 用户
开始前确认
  • 了解当前为开发者预览版
  • 准备可丢弃或已备份的练习材料

你给 DSH 一句“修复采购合计”,它为什么能先读文件、再改代码、再运行测试?关键不在几个发光模块,而在模型请求与工具结果之间反复往返的循环

本文使用 采购合计练习 解释机制。只想马上上手,可以直接看 从安装到首次修复的一站式教程;已经在用 DSH,则可以拿本页对照自己的运行轨迹。

先把四个概念放对位置

概念在 DSH 中负责什么不应该怎样理解
模型根据请求内容返回文字或工具调用直接访问你的电脑
Harness组装上下文、组织循环、执行工具、记录结果一个固定的聊天皮肤
Cordis 插件组合提供和连接运行能力、服务与扩展点必须按插件列表顺序执行任务
工作区本次工作涉及的项目目录自动等于完整系统隔离

DeepSeek Harness 是 DeepSeek 的开源 Agent 框架;Harness.io 是另一个公司的 DevOps 产品。通用词 agent harness 也可以指一类运行框架。遇到同名教程时先核对组织和仓库。

启动时发生的事,与每次对话不同

dsh web 启动 Web profile。profile 是进程级组合;bundle 提供成组插件配置,用户 patch 再覆盖对应配置。这里决定进程拥有哪些基础服务和入口。

创建会话时,agent preset 决定该会话的工具、提示片段与技能组合。profile 不等于 preset:一个服务进程可以承载不同预设的会话。标准模式适合作为本教程起点,避免同时改变工具呈现方式和任务材料。

想只看配置、不执行任务,可以在自己的练习环境运行:

npx @deepseek-ai/dsh@0.1.2-rc.1 --profile web --dump-config

它查看组合后的配置,不是“显示模型正在想什么”。命令可能初始化缺失的 profile 文件,但不会启动模型任务;输出包含本地配置上下文,分享前应检查并脱敏。本文不要求新手修改它。

一次任务实际怎样推进

我们的文件里有一行错误:

return items.reduce((sum, item) => sum + item.unitPriceCents, 0);

下面以模型先读、再改、最后回答为例。真实模型可能先搜索文件、并行读多个文件或额外运行测试;步骤数量不是固定的

第 1 次主要模型请求:告诉模型它能做什么

DSH 组装系统提示、对该会话可见的工具定义,以及从会话派生出的历史。模型看到工具名称、用途和参数结构,不会得到工具执行函数本身。

如果历史里尚无 budget.mjs 内容,模型不能仅凭工作区名称知道里面的实现。它可以提出一个读取调用,例如:

{"name":"read","arguments":{"file_path":"budget.mjs"}}

这是为了说明内容而简化的表示,不是 HTTP 请求完整结构。

DSH 执行读取,产生工具结果

执行器检查参数与策略,调用文件能力;成功则返回文件内容,失败则返回错误。调用和结果进入会话记录,前端可以呈现相应过程。

重要的是:**刚返回工具调用的模型请求已经结束,文件内容不会倒流进那一次请求。**DSH 需要把读取结果用于下一次模型请求。

第 2 次主要模型请求:模型现在有了文件依据

在新的请求里,模型能看到上一次调用及其结果。它可以提出 edit,把旧表达式替换成新表达式:

{
  "name": "edit",
  "arguments": {
    "file_path": "budget.mjs",
    "old_string": "sum + item.unitPriceCents",
    "new_string": "sum + item.unitPriceCents * item.quantity"
  }
}

这三个参数来自当前默认文件工具接口。换一个工具预设后,名称与参数可能不同,不应把此例扩展成全部模式的规范。

权限在执行处介入,不是任务中的必经会议

工具管线可遇到 allow、deny 或 ask。允许时继续执行;拒绝时不发生本次修改;需要询问时才等确认。还有参数校验、守卫和底层执行失败等其他可能,allow 也不保证磁盘修改最终成功

默认文件工具组合还包含读后改观察策略,避免模型未读文件就盲改;该策略属于独立插件。不能把 Skills、Plan 或用户审批画成所有任务都必经的三个阶段。

第 3 次主要模型请求:根据结果决定继续还是结束

edit 成功后,模型在下一步看到成功结果,可以继续请求测试,或回答目前做了什么。edit 被拒绝或失败后,模型看到的是相应结果,应据此调整;它不应声称已经修复。

默认循环不是“只要没有工具调用就永远结束”:还要考虑待处理输入、继续运行扩展、取消和错误等状态。教学中展示的是没有其他待处理工作的一条最小路径。

turn、step、会话分别是什么

  • **会话(session):**承载历史与运行记录,可以包含多次用户交互。
  • **轮次(turn):**一次被唤醒后处理工作的区间,可能有零个或多个 step。
  • **步骤(step):**一次模型请求及它引出的工具调用处理。工具结果通常推动下一步模型请求。

从轨迹看,关注 step/startassistant/messagetool/calltool/resultstep/endturn/end。界面未必直接展示这些底层名称;它们用于帮助你对照源码,不是要求你操作的菜单。

会话日志与模型上下文也不是原样复制的同一物件。DSH 会从日志派生模型历史,部分记录服务于回放、状态或诊断,不意味着全部原文每次都发给模型。

Skills 和 MCP 应该放在哪里

Skill 提供可复用的方法与材料。默认文件系统 Skill 提供方先发现目录元信息,具体内容按需加载;不是模型先经过“Skills 节点”才能执行。

MCP 可把外部能力接入工具体系。当模型调用这些工具时,仍需要经过对应参数、策略、执行与结果处理。连接成功不代表任务自动成功,也不代替验收。

插件组合影响“有哪些能力、怎样呈现、在哪些事件介入”;任务循环解释“这一次请求怎样推进”。把这两个层次分开,DSH 就更容易理解。

用实际验证对照,而不是背框图

本站在独立安装的 0.1.2-rc.1 中,用本地脚本模型返回 read → edit → final,真实 DSH 执行器完成了文件修改,外部测试由 1 通过 / 2 失败变为 3 通过 / 0 失败。运行还产生了一个不携带工具定义的辅助模型请求,所以不能简单把服务端所有 HTTP 次数当作主 Agent 的 step 数。

这项验证支持工具往返机制,不支持“DeepSeek 一定能自主修好此任务”的结论。查看验证摘要,或到 交互演示 逐步观察输入、调用、结果与下一次请求。

官方资料

版本和参数,以这些来源为准

本文按实际任务重写,快速变化的信息仍应在操作前回到官方页面核对。

常见问题

继续操作前,先确认这些边界

工具结果会进入刚才那次模型请求吗?

不会。模型先返回调用,DSH 执行并记录结果,再将结果用于后续请求。

每个任务都必须依次经过 Skills 和审批吗?

不需要。Skills 按需使用,审批取决于具体操作策略;它们不是固定执行步骤。

继续学习

按当前任务继续推进