
字节笔记本
2026年10月6日 · 约 6 分钟读完
DeepSeek Harness:Agent 提示词精读
在 DeepSeek Harness 仓库的 examples/acp-agent 示例里,每个测试场景都配着一份系统提示词快照:组装流程跑完之后提示词长什么样,就原样钉进 expected 文件,代码一改,快照一比,差异立刻现形。agent-instructions 场景对应的这份快照只有 25 行,却把框架给 agent 立的规矩交代得清清楚楚。本文逐段精读这份小而全的样本,看看一份生产级 agent 系统提示词都写了什么、又是怎么写的。

先看来历:两路内容拼成一份提示词
快照的第一句是身份声明:你是一个由 DeepSeek Harness 驱动的 AI agent。紧跟着的一段来自场景配置里的 persona 字段:You are a coding assistant powered by the {{model}} model. Your working directory is {{cwd}},外加一句 Verify your work by running the code or tests. Keep answers brief and factual。在快照里,{{model}} 已经被渲染成具体模型名,工作目录则以 {{cwd}} 占位。也就是说,这份提示词由两路内容拼装而成:使用者在配置里自定义的 persona,加上框架内置的工具使用规范。内置规范占了大头,也正是本文的重点。
文件工具三件套:先读后写是硬规矩
内置规范的第一组讲文件操作。读文件必须用 read 工具,而不是拿 shell 里的 cat 之类的命令凑合,返回结果自带行号,遇到大文件用 offset 和 limit 接着往下读。write 工具负责创建文件或整体替换内容,已有文件会被直接覆盖,所以默认的文件观察策略要求写之前必须先读一遍。edit 负责精准修改 UTF-8 文本文件:它把 old_string 按字面替换成 new_string,默认要求 old_string 在全文中恰好出现一次;出现多次时,要么换一段更具体的上下文,要么显式把 replace_all 打开。刚创建或刚编辑过的文件可以免重读,除此之外,动手前先读是硬性要求。
执行纪律:退出码与后台任务
第二组讲执行。每条 bash 结果都带 [exit code: N] 标记,规则要求逐条检查这个标记,先查清失败原因再往下走,不许对非零退出码睁一只眼闭一只眼。后台任务是另一套节奏:自己启动的每个任务都要记下 job id,任务完成时会在会话内收到通知,所以不许忙轮询,也不许 sleep 空等,等待期间继续推进独立的步骤,别重复一个正在运行的任务的活。给出最终回答之前,用 job_output 把仍然相关的任务统统收掉,只有确实被它阻塞时才允许带 wait 真等;不再相关的任务用 job_kill 清理掉。
goal 生命周期:一条长期目标怎么管
第三组讲 goal 工具,管的是当前会话里一条长期推进的目标。规则写得相当细:create_goal 可以从人类请求里推断目标意图,而且不限语言,但日常的单轮事务不许建目标;调用 update_goal 之前必须先 get_goal,并原样复制它的 goal_id 和 revision。会话经历 resume 或 fork 之后,活跃目标会被解除武装,此后无论用户用什么措辞、什么语言说继续,都要用 update_goal 的 resume 动作重新武装。收尾的判据也有量化门槛:只有目标真正达成才能标 complete;只有同一个阻塞条件连续撑过三轮 goal 轮次才能标 blocked,并且要把具体条件写进 blocked_reason。困难、不确定、或者还有可做的工作,都不算阻塞。
委派边界:workflow、ralph 还是后台 subagent

最后一组回答的问题是:活儿多了,该找谁。workflow 工具只在用户明确要求工作流、或者需要大规模多 agent 编排时启用,用法是写一段 JavaScript 脚本,把任务按阶段分发给大量子代理并回收结构化结果,仅仅一两次委派犯不上动用它。ralph 工具只在用户点名要 Ralph 循环时启用:每一轮都起一个不带任何会话历史的全新子代理,把共享工作区当作持久记忆,完成与阻塞都靠工人报告说话,不做独立评估。普通的长期目标交给同会话的 goal 工具,有边界的委派则交给普通 subagent。subagent 默认放后台跑:相互独立的委派在同一条消息里一起发出去,边跑边干别的;只有下一步动作确实依赖它的结果时,才把 run_in_background 关成前台。后台任务落定后,运行时会推来一条带结果的通知。
写在最后:每条规矩都绑着一个判据
通读下来,这份 25 行的提示词最值得借鉴的是写法:几乎每条规矩都绑着一个可执行判据,而不是态度倡议。查退出码认的是 [exit code: N] 标记;等后台任务分成了收结果与杀任务两个动作;blocked 有三轮量化门槛,还要写明具体条件;委派有明确的分流条件与默认值。想给自己 agent 写系统提示词的人,不妨从这份快照学起:少谈理念,把每条规则落到工具名、参数名和触发条件上,模型执行起来才有抓手。



