切换语言
切换主题

ADHD:用并行发散推理治 Coding Agent 的过早收敛

9.0 / 4.83
广度 breadth(ADHD / 单发)
约 1.9 倍
7.83 / 2.67
新颖度 novelty
约 2.9 倍
9.5 / 1.83
陷阱识别 trap detection
约 5.2 倍,差距最大
9.5 / 6.5
可执行性 actionability
约 1.5 倍
约 10 次
每次运行 LLM 调用
单发的 5 到 10 倍,墙上时间 30 到 90 秒
5 / 6
ADHD 胜出题目数
6 道开放工程题里赢 5 道
数据来源: ADHD 项目自报 evals:6 道开放工程题,同模型,独立 LLM 评审,A/B 顺序随机

"ADHD GitHub README 用于确认项目定位、npm 包 adhd-agent、MIT 许可、两阶段机制、eval 结果表和安装命令。"

"ADHD how-it-works 文档用于确认 Diverge/Focus 两阶段、隔离分支、O(N) token 成本和并发 semaphore。"

"ADHD vs CoT and ToT 文档用于确认与 Chain-of-Thought、Tree-of-Thought 的结构差异和三条承重差异。"

"ADHD when-to-use 文档用于确认适用与不适用清单、成本量级和决策点定位。"

"The New Stack 关于 Claude Code ADHD 的特写用于确认第三方报道与生态采用背景。"

给 Agent 出一道开放题,它的毛病很固定:想到第一个看起来合理的方案,就顺着那条路一直往下写。README 里有个真实例子能说明问题。一个 CLI 调用 LLM,偶尔会卡住 90 秒,让 Agent 设计 retry 和 timeout 策略。单发 Agent 会给一套很标准的答案:15 秒首字超时、30 秒字间超时、90 秒绝对上限,外加一次自动重试,引用 Google SRE 手册第 22 章。挑不出错,但它从头到尾没问一句:会不会是这道题选错了模型,慢的根本不该重试,而该换一个更快的模型重跑。

ADHD 这个开源 skill 想补的就是这一刀。它是 npm 包 adhd-agent,MIT 许可,建在 Claude 与 Codex 的 Agent SDK 上。做法是把一道题在多个互相隔离的认知视角下并行发散成几十个想法,再用一次单独的 critic 调用打分、聚类、剪掉陷阱、深化最优的几个。本地 LLM 这个系列里它算个特殊角色:它不解决「模型跑在哪」,解决的是「Agent 在关键决策点想得够不够开」。

先给判断:它治的是「过早收敛」

过早收敛(premature convergence)是自回归模型的结构性问题。模型逐个 token 往下生成,每个新 token 都被前面已经写出来的内容带着走。所以它给的第一个方案往往是训练数据里最典型、最教科书的那个。这个答案通常没错,但也通常没新意,更要命的是它经常是个陷阱:因为眼熟所以看起来对。

什么时候这件事会真的咬到你?做存储分层、分片策略、鉴权模型、队列拓扑这类架构决策时;给函数、产品、环境变量起名时;面对一个没有明确根因的模糊 bug,需要先列出几类假设时。这些场景的共同点是没有标准答案,而错过那个不显而易见但可行的选项,代价可能是几个月后的返工。

反过来,有明确答案的事不该用它。查一个 API 怎么调、修一个已经定位到根因的 bug、任何一搜就有结果的问题,用它纯属浪费钱和时间。一句话区分:junior 上手 Google 一下就能解决的,直接让 baseline 答;senior 会停下来说「这事我得换个角度多想想」的,才轮到 ADHD。

机制:两阶段中间隔着一堵硬墙

ADHD 的核心是一个两阶段循环,两个阶段之间有一道硬隔离。作者反复强调,把发散和评审混在一起,正是想法质量被毁掉的原因,因为评审会当场掐死生成。

ADHD 两阶段流程示意:发散阶段多个隔离分支并行,中间一堵硬墙,收敛阶段单独 critic 打分剪枝

发散:N 个互不可见的隔离分支

第一阶段挑 N 个认知 frame,并发地起 N 个 Agent SDK 调用,每个都是一个全新的无状态会话。每个分支只能看到三样东西:原始问题、某一个 frame 的视角提示、一段禁止评估和排序的 system prompt。关键在于分支之间互相看不见。负责「监管者」视角的分支,读不到「速通玩家」分支写了什么。没有共享上下文,锚定就不是靠提示词压制,而是按结构根本不存在。

收敛:一次单独的 critic 调用

第二阶段评审才上线,做三件事。先打分,给每个想法的新颖度、可行性、契合度各打 0 到 10 分,并给每个陷阱标一个机制化的理由,比如「shelve 在多写入场景下不是线程安全的」,而不是含糊地写一句「有风险」。然后聚类,按底层角度而不是表面关键词分组,让你看清整个设计空间的形状。最后深化 top-K,默认取 3 个,给出草图、承重风险、第一步动作和 3 到 5 个子想法。

这里有个容易被忽略的设计:generator 和 critic 的分离是机械的,靠的是两次不同的 API 调用配两段相反的 system prompt,而不是在同一段提示词里口头要求模型「先发散再收敛」。隔离分支的调用形状大致长这样:

const branches = await Promise.all(
  frames.map(frame => withSemaphore(concurrency, () => callLLM({
    systemPrompt: `${frame.vantage}\n\nFORBIDDEN: evaluation, ranking, hedging. JSON array out.`,
    userPrompt:   `${problem}\n\n${context ?? ""}`,
  })))
);

token 成本随分支数线性增长,不会平方膨胀,因为后面的分支不会把前面分支的内容再读一遍。并发由一个信号量控制,默认 4 个。

跑完一次拿到的不是一段长文,而是一个结构化结果:聚类后的完整想法集、一个 2 到 4 条的候选清单、一个被单独标出来的「非显而易见但可行」的选项、一份带理由的陷阱清单、被深化过的几个分支,以及一个外卡式的挑衅问题。回到开头那道 retry 题,单发只给了教科书 hybrid,ADHD 在 30 多个想法里挑出来的那条是「等得越久按钮越烫,一键取消并改投更快的 Haiku 类模型」,同时把「逆序流式输出 token」「按耐心收费」这类听着有趣其实是坑的想法提前标掉了,省下后面真去实现的工程时间。

它和 Chain-of-Thought、Tree-of-Thought 差在哪

这三个东西最容易被混为一谈,但结构完全不同。

维度Chain-of-ThoughtTree-of-ThoughtADHD
线程单线,线性单棵树,逐步遍历N 路并行,互相隔离
分支共享上下文是(同一会话)否,每个分支是独立 query
生成与评审同一步同一模型交替分阶段、分调用、相反姿态
分支驱动下一步的变体认知 frame,重问整道题
并行性顺序多数顺序真并发
适合数学、多步逻辑搜索、规划、解谜开放式设计与构思

三条承重差异值得单独拎出来。第一,是隔离而不是搜索。CoT 和 ToT 的分支共享一个上下文窗口,写到第四步时模型已经被前三步锚住了;ADHD 的分支在发散期彼此不可见,锚定按构造就被消掉了。第二,换的是 frame 而不是下一步。ToT 的分支通常变的是下一个动作(试这个数、试那个数),ADHD 变的是整道题的视角,等于让模型「把这个问题当成一道硬件题重新问一遍」,产出的是结构上不同的想法,而不是邻近的微调。第三,generator 和 critic 的分离是机械的而非承诺的。

需要澄清一点:ADHD 本身就是 Tree-of-Thought 的一个变体,深化阶段确实在展开 top-K 节点。它新在分支由 frame 驱动,以及评审分离靠的是真的两次调用。

Frame 是什么:换的是整道题的视角

frame 不是角色扮演。它是一个「视角算子」,一段把整道题从某个认知位置重新提一遍的 system prompt。和 persona 提示词研究里的「你是 34 岁工程师小明」不一样,frame 不让模型扮演谁,而是逼它进入一个本来不会自然漂过去的思考角落。

项目内置 15 个 frame,开了 codeMode(默认开)会偏向工程视角。举几个具体的:硬件工程师用延迟、内存布局、物理约束来想;凌晨 3 点 on-call 想的是「什么样的设计能让我不被叫醒」;移除承重假设问的是「如果框架、数据库、网络都没了,还能怎么做」。每次运行会确定性地按 seed 选 frame,并且固定留一个 wild slot,保证发散不至于太规矩。

还有几个跨领域的 frame 特别能撬出可迁移性的想法:生物学用免疫系统、神经可塑性、细胞信号来类比;物流用排队、批处理、即时配送、枢纽辐射来想;游戏设计用循环、奖励、摩擦、存档点、速通技巧来想。开放题真正的好答案常常不在任何一个领域的标准套路里,得把别处的机制搬过来,这正是跨域 frame 存在的意义。

想自己写一个 frame,大概 5 行代码就够。一个好的 frame 要满足三条里的至少两条:有别的 frame 不用的独特词汇,有区别于其他视角的独特姿态(对抗、建设、天真、极端),以及能稳定地翻出别的 frame 翻不出的想法。光换个领域名词,说的还是同一件事,不算合格。

什么时候用、什么时候别用

把它当决策点工具,不是日常逐键工具。下面这张表可以直接拿来判断。

场景用 ADHD理由
架构、分片、鉴权、队列拓扑设计开放式,过早收敛代价高
API / SDK / CLI 接口设计、命名需要非显而易见但可行的选项
模糊调试,没有明确根因要先生成几类假设
迁移、重构规划、扩大 code review角度越多越能提前发现陷阱
查 API、查文档别用一搜就有,单发更快
已定位根因的 bug 修复别用答案唯一
内层循环、逐键、低延迟场景别用跑一次要 30 到 90 秒

成本要心里有数。默认一次跑大约 10 次 LLM 调用:发散默认 5 次,加 1 次打分、1 次聚类、3 次深化,整体是单发的 5 到 10 倍,墙上时间通常 30 到 90 秒。作者给的定位很实在:花 0.3 美元量级的钱,去撬动一个值 5 万美元的架构决策,别在每次敲键盘时跑它,在关键决策点跑它。还有个真实提醒:在带着大 CLAUDE.md 和工具上下文的 Claude Code 会话里,每个分支都会重新加载这层基础上下文,实际 token 更接近「分支数乘以基础加分支」,比纯算法成本高。

怎么装、怎么触发

安装一条命令,会自动识别你的 agent,覆盖 Claude Code、Cursor、Antigravity、Codex、Cline、Gemini CLI、Windsurf 等约 50 种。

npx skills add UditAkhourii/adhd

装好后用 /adhd "你的问题" 显式触发,或者让它在构思类意图上自动触发。Codex 有自己的发现路径,通用命令注册不上时,强制指定目标:

npx skills add UditAkhourii/adhd -a codex -g

也可以手动把 SKILL.md 拉到 Codex 的技能目录 ~/.codex/skills/adhd/,重启后 /adhd "design a rate limiter" 就会走这个 skill。命令行和库的用法也有:npm install -g adhd-agent 装 CLI,npm install adhd-agent 当库引。

装第三方 skill 之前,建议先看一眼它的 SKILL.md 在让 Agent 做什么,尤其是会不会调用外部命令。这一步可以参考 OpenClaw 技能安全审查实战指南,5 分钟过一遍权限边界比事后补救划算。

关于本地模型,得说句实话。ADHD 建在 Agent SDK 上,默认走 Claude 类模型,它不是一个本地开箱即用的工具。想接 Ollama 之类的本地模型,需要你自己在调用层做适配,项目本身没有承诺这条路顺畅。把它放进本地 LLM 系列,看中的是它在「Agent 推理结构」这一层的思路,而不是说它能直接喂给本地小模型。

结论

把 ADHD 当成一个在决策点掏出来用的工具,而不是接管整个工作流的东西。它值钱的地方不是「想得多」,而是「想得不一样」加上「有一道独立的评审把陷阱挑出来」。先在一个你已经有答案的架构决策上跑一次,对比它给的非显而易见选项和你原本的方案,再决定要不要把它接进你的 Agent 循环。

想继续往下看,可以读 2026 年 AI 编程工具全景盘点 看它在工具版图里的位置,或者看 DeepAgents 架构解析 了解子代理和规划工具是怎么组织推理的。

在 Claude Code 或 Codex 里装上并触发 ADHD

用一条命令安装 ADHD skill,再用 /adhd 在关键决策点触发并行发散推理。

  1. 1

    步骤1: 通用安装

    运行 npx skills add UditAkhourii/adhd,它会自动识别 Claude Code、Cursor、Antigravity、Codex、Cline、Gemini CLI、Windsurf 等约 50 种 agent 并安装。
  2. 2

    步骤2: 触发 skill

    用 /adhd "你的问题" 显式触发,或在架构、命名、模糊调试等构思类意图上让它自动触发。
  3. 3

    步骤3: Codex 专用路径

    通用命令在 Codex 里注册不上时,运行 npx skills add UditAkhourii/adhd -a codex -g,或手动把 SKILL.md 拉到 ~/.codex/skills/adhd/ 后重启 Codex。
  4. 4

    步骤4: 安装前审查权限

    装第三方 skill 之前,先看一眼它的 SKILL.md 在让 Agent 做什么,尤其是会不会调用外部命令。

常见问题

ADHD 和 Tree-of-Thought 有什么区别?
ADHD 是 Tree-of-Thought 的一个变体,但有三点不同:分支在发散期完全隔离、互相看不见;分支由认知 frame 驱动,重问的是整道题而不是下一步动作;generator 和 critic 用两次独立的 LLM 调用机械分离,而不是同一会话里口头要求。
用 ADHD 一次要花多少钱、多慢?
默认一次大约 10 次 LLM 调用(发散默认 5 次,加 1 次打分、1 次聚类、3 次深化),是单发的 5 到 10 倍,墙上时间通常 30 到 90 秒。作者把它定位成花 0.3 美元量级去撬动一个值 5 万美元的架构决策。
ADHD 必须用 Claude 吗,能用本地模型吗?
默认走 Claude 类模型。它建在 Claude 与 Codex 的 Agent SDK 上,不是本地开箱即用的工具。想接 Ollama 之类的本地模型,需要你自己在调用层做适配,项目本身没有承诺这条路顺畅。
什么任务适合用 ADHD?
架构、分片、鉴权、队列拓扑设计,API/SDK/CLI 接口设计和命名,没有明确根因的模糊调试,迁移重构规划和扩大 code review 这类开放式决策点。查 API、改已知根因的 bug、逐键低延迟场景不适合。
ADHD 的 frame 是不是角色扮演?
不是。frame 是视角算子,一段把整道题从某个认知位置重新提一遍的 system prompt,而不是让模型扮演某个身份。它逼模型进入一个本来不会自然漂过去的思考角落,产出结构上不同的想法。
怎么在 Codex 里装 ADHD?
先试通用命令 npx skills add UditAkhourii/adhd。如果在 Codex 里注册不上,用 npx skills add UditAkhourii/adhd -a codex -g 强制指定,或手动把 SKILL.md 拉到 ~/.codex/skills/adhd/ 后重启 Codex。

11 分钟阅读 · 发布于: 2026年6月8日 · 修改于: 2026年6月8日

评论

使用 GitHub 账号登录后即可评论