🐳 第八章 设计自己的Harness
📄 一句话概括

写 YAML 之前先写清单——清单是给人看的,YAML 是给机器看的;清单过不了自己这一关,配置一定写不好。

📝 本节和前面几节的关系

8.3.1 定了题目,这一步把题目拆成任务清单与权限清单,然后才动 YAML。

一、两张清单

两张清单是一一对应的:每一条任务后面都跟一条约束。

二、清单怎么变成 YAML

一条任务 → 一件工具;一条约束 → 一个不装的决定。

注意后半句:约束在配置里往往表现为【少写一行】。 想禁止执行命令,不是加一条禁令,是不装执行类的件。

这是本课一整遍都在强调的路数:能力靠装配,边界靠不装配。

三、实测片段

写进你自己那一层的补丁,向树里插入第五套预设:

- id: preset-reviewer
  name: '@deepseek-ai/dsh-agent-preset'
  config:
    id: reviewer
    order: 5
    plugins:
      - id: persona
      - id: tool-fs
      - id: tool-fs-search
      - id: tool-todo
      - id: present

五件工具,对应任务清单的四步(persona 是人格,不占工具名额)。

四、实跑结果

把这段补丁跑一遍 --dump-config:树从 1259 行 → 1281 行,diff 共 24 行,0 条警告。

新预设落在树的末尾(顶层插入),表头写着「patched by ……exp8a_reviewer.yml」——改动自己报了出处。

五、动手 Demo:先列清单,再写 YAML

清单写完了,YAML 只是把清单翻译一遍:

todo = ["列任务清单", "列权限清单", "写 YAML",
        "分平面", "控工具", "定格式", "测失败"]
for i, t in enumerate(todo, 1):
    print("  第 %d 步: %s" % (i, t))
print("  写 YAML 只是第 3 步——前面两步是想清楚, 不是打字")

实跑输出:

--------------------------------------------------------------------
先列清单,再写 YAML
--------------------------------------------------------------------
  清单写完了,YAML 只是把清单翻译一遍。实测片段:

    - id: preset-reviewer
      name: '@deepseek-ai/dsh-agent-preset'
      config:
        id: reviewer
        order: 5
        plugins:
          - id: persona
          - id: tool-fs
          - id: tool-fs-search
          - id: tool-todo
          - id: present

  四套官方预设的 `order` 是 1/2/3/4(standard/ptc/minimal/cordis),
  第五套填 **5**,自然排在最后。

  **清单是给人看的,YAML 是给机器看的**——先写前者。

五步里只有第三步是打字,前后四步都是判断。 约束落到配置上,常常表现为少写一行——不装执行类,就等于禁止执行。 清单是给人看的,YAML 是给机器看的——先过前者这一关。

30 秒实验

  1. 给你的题目列两张清单,逐条对应写下来。
  2. 把权限清单里每一条翻译成【少装哪件】,看能不能对上。
  3. 写完清单再去翻配置树,你会发现找件变快了很多。

常见误区

  1. 错误:直接开编辑器写 YAML 更快。——纠正:没有清单就不知道写完没有——写配置最难的不是语法,是【该不该有这一条】。
  2. 错误:禁止某件事,要在配置里写一条禁令。——纠正:本课的路数是【不装】——不装执行类工具,比写十条【不许执行】都管用。
  3. 错误:清单和配置可以不一致。——纠正:不一致就是漏洞——清单里写了不做、配置里装了那件,等于清单白写。
自测三问(点开对答案) 1. 为什么先列清单再写 YAML? —— 因为**清单回答【该不该有】,YAML 只回答【怎么写】**——没有前者,后者写完也不知道对不对。 2. 约束在配置里通常表现为什么? —— **少写一行**——想禁止执行,就不装执行类的件;能力靠装配,边界靠不装配。 3. 插入第五套预设的实测结果是什么? —— 树 **1259 → 1281 行**、diff **24 行**、**0 警告**,新预设落在树末尾并自带出处注释。

相关笔记