generic-mapreduce · git:20261013.39a1e87 · 2026-10-13 · sha256 3c60f98702621ac0
generic-mapreduce git:20261013.39a1e87A
Immutable. This exact content never changes and is served at /api/v1/blob/3c60f98702621ac0.
--- name: generic-mapreduce description: '把一件“要读很多东西”的事拆成几块,并行派给只读的子 agent(mapper),各交一份带出处的摘要,再由你汇总。贵,慎用。只在用户明确输入 /generic-mapreduce 时使用,agent 不要自己调用。关键词:mapreduce、并行、分块阅读、调研、分散 RCA、读代码、读知识库、头脑风暴。' argument-hint: '要并行读或调研的问题' disable-model-invocation: true type: workflow specificTo: generic --- # MapReduce:并行分块阅读 你拆任务、派发、收摘要、汇总。一批只读的子 agent(`mapper`)各读一块。它换来的是并行和干净的上下文,代价是用量:经验上是自己做的几倍。 ## When to Use This Skill **只有用户输入 `/generic-mapreduce` 才用。** 你不能自己调用它。你觉得值得并行时,可以告诉用户“这件事适合 `/generic-mapreduce`,大概多花几倍用量”,由用户决定。 只做“读”的事: - 调研:几个互不相关的方向各查一遍。 - 分散的 RCA:几个可能的原因,各看各的日志和代码。 - 分散地读代码或知识库:几个模块、几个 domain,各出一份摘要。 - 头脑风暴:同一个问题,几个不同的角度各想一遍。 **不做“写”的事。** mapper 没有编辑工具,也没有终端。要并行改文件,不用这个技能。 ## Prerequisites - 用户这一条提示输入了 `/generic-mapreduce`。hook 靠它放行;没有它,调用 `mapper` 会被拒绝。 - 一次最多派几个 mapper,由 `.harness/policies/task.json` 的 `mapreduce.max_agents` 定。hook 会数,超了就拒绝。 - 不需要先开任务。接着任务时,汇总可以写进任务目录。 ## Step-by-Step Workflows ### 1. 先判断值不值 照 [值不值](references/worth-it.md) 里的表判断。三条都满足才值: - 各块之间不需要对方的结论。 - 每一块都要读很多东西。 - 你只需要每块的摘要,不需要原文。 不值,就直说原因,建议你自己顺序做,然后停下等用户决定。不要为了用上这个技能硬拆。 ### 2. 告诉用户要花多少,等他同意 值的话,给用户看这三样,然后**停下等他回答**: - 拆成哪几块(每块一句话:问题、范围)。不超过上限。 - 这很贵:每个 mapper 是一个独立会话,要重新读一遍材料。总用量大约是你自己做的几倍。 - 你建议派几个。能少就少。 用户说可以,再往下。用户改了拆法,照他的来。 ### 3. 派发 - 在**同一条回复里**一次调用全部 mapper,它们才会并行。 - 每个调用消息照 [简报模板](templates/brief.md) 写:问题、范围、要交的。mapper 看不到你的对话,简报要写全。 - 各块的范围不要重叠。 - 调用被 hook 拒绝:照拒绝理由做,不要换别的子 agent 重试。 ### 4. 汇总 - 读每份摘要。结论要带出处(文件路径和行号);没有出处的,标成“未核实”。 - 摘要之间有矛盾:把两边都写出来,自己去读那几行原文再判断。不要挑一个顺眼的。 - 有 mapper 说“简报缺”或“没查到”:告诉用户缺哪块,由用户决定要不要再来一次。不要自己再派。 - 给用户的汇总:先结论,再每块的要点和出处,最后是没查到的和不确定的。 - 接着任务时:把汇总写进任务目录(例如 `RESEARCH.md`),并更新 `TASK.md`。 ## Gotchas - **不要自己调用这个技能,也不要在没有它的时候调用 `mapper`。** hook 会拒绝,理由里写着怎么办。 - **不要把要“共用一份理解”的事拆开。** 例如改一个设计的三个部分:各块会各想各的,合不到一起。 - **不要派去读你自己读得完的东西。** 三五个文件自己读更快、更便宜。 - **不要让 mapper 下最终结论。** 它只看到一块。结论由你汇总后下。 - **不要超过上限,也不要分几轮绕过上限。** 用完了就用已有的摘要完成。 - **mapper 的摘要不是事实。** 关键结论要自己核对出处的那几行。 - **派出去之后,不要自己再把同一批文件读一遍。** 那是花两份钱。等摘要回来,只读要核对的那几行。 ## Troubleshooting | 问题 | 处理方式 | | --- | --- | | 调用 `mapper` 被拒,理由是用户没有输入 `/generic-mapreduce` | 你不能自己开。告诉用户可以输入它 | | 被拒,理由是次数用完 | 用已有的摘要完成;不够就告诉用户缺什么 | | mapper 没有并行,一个接一个跑 | 要在同一条回复里一次发出全部调用 | | mapper 没运行,也没有报错 | 它的模型比主模型贵一档时平台不运行它。告诉用户,换主模型或改 `mapper.agent.md` 的 `model` | | 摘要太长,占满上下文 | 简报里写明行数上限;下次拆得更细 |