今天在 GitHub Trending 上看到一个有意思的项目:ADHD — a skill for coding agents,它解决的是一个很实际的问题——大语言模型在编程时容易「过早收敛」,一旦给出了第一个方案,后续思考就被锚定住了,难以探索更多可能性。

一、项目概述

ADHD 是由 Udit Akhouri 开发的一个 AI 编程代理技能,核心定位是解决 LLM 在生成式推理中的「过早收敛」(Premature Convergence)问题。它借鉴了人类神经多样性中 ADHD(注意力缺陷多动障碍)的特质——思维在多个方向上同时发散——将这一特性工程化为一套可量化的双阶段推理框架。

该项目的核心特点:

  • generator-critic 硬分离:生成器和评分器是两次完全独立的 LLM 调用,中间有「硬墙」阻断,不允许在生成阶段就自我评判,从架构上杜绝了锚定效应
  • 多认知框架并行发散:一次生成 N 个隔离的思考分支,每个分支拥有不同的认知「框架」(如经济激励、感知扭曲、集体智慧等),框架之间完全隔离,零共享上下文
  • 陷阱检测能力大幅提升:独立评分器专门负责识别「看起来对但实际有坑」的想法,实验数据显示陷阱检测得分提升 5.2 倍(9.50 vs 1.83)

已在多个开源项目中正式集成,包括 repowire、mstack、zk-flow-oss 等,并被 The New Stack 专题报道。

二、技术原理

2.1 为什么传统 CoT 和 ToT 也会过早收敛?

Chain-of-Thought(思维链)的问题在于:它锚定在第一个说出口的答案上,后续推理都是在第一个答案的框架里修修补补。

Tree-of-Thought(思维树)虽然做了分支搜索,但因为所有分支共享同一个上下文树,锚定效应仍然会跨分支传递——你在分支 A 里看到分支 B 说了什么,就会不由自主地受影响。

ADHD 的诊断是:这是一个架构问题,而不是提示词问题。

2.2 双阶段架构

阶段一:Diverge(发散)
  1. 从预定义库中选择 N 个认知框架(默认 6 个)
  2. 为每个框架启动独立的 LLM Agent
  3. 每个 Agent 收到:问题 + 框架视角 + 禁止评价的系统提示
  4. N 个分支完全隔离运行,结果互不可见

阶段二:Focus(聚焦)
  1. 收集所有分支的想法(30+ 个)
  2. 独立 Critic Agent 评分:新颖性、可行性、与问题的契合度
  3. 标记陷阱并给出原因(如:「流式令牌逆序——会让 UI 体验很差」)
  4. 聚类相似想法
  5. 深化 Top-K 幸存者,给出具体步骤和风险

关键源码片段(TypeScript):

import { run, renderText } from "adhd-agent";

const result = await run({
  problem: "How should we shard this queue under bursty load?",
  framesPerRun: 5,
  topK: 3
});

console.log(result.shortlist);         // 精选想法列表
console.log(result.nonObviousPick);   // 最反直觉但最有力的方案
console.log(result.traps);            // 被识别的陷阱
console.log(result.clusters);         // 按角度聚类的结果

2.3 15 种认知框架

ADHD 内置了 15 种认知框架,覆盖不同思维方式:

框架典型视角
economic-incentive成本与收益分析
async-control-surface异步控制流设计
gamification游戏化激励机制
perceptual-distortion感知与 UX 失真
collective-intelligence群体智慧视角
redundancy-race冗余与竞态分析
new-grad / archeologist新手视角 / 考古视角
security-researcher安全研究员视角
on-call-at-3am值夜班工程师视角

开发者也可以自定义框架并贡献到社区。

三、安装与快速开始

3.1 安装

一行命令,自动识别你的代理工具(Claude Code、Cursor、Cline、Windsurf 等):

npx skills add UditAkhourii/adhd

也可以通过 npm 全局安装 CLI:

npm install -g adhd-agent

3.2 快速使用

安装后在支持的代理中调用:

# Claude Code / 其他代理
/adhd "design a rate limiter that survives a leader election"

/adhd "name this function" --frames 3 --ideas 8 --top 2

3.3 作为库使用

import { run, renderText } from "adhd-agent";

const result = await run({
  problem: "design a rate limiter",
  framesPerRun: 5,  // 并行框架数量
  topK: 3           // 深化 Top-K 想法
});

console.log(renderText(result));

四、使用场景与实战效果

4.1 什么时候用 ADHD?

项目文档明确推荐的使用场景:

  • 设计决策:给出几个方案/思路(「give me a few ways to…」)
  • 模糊调试:问题描述不清、方向不明
  • 命名:函数名、变量名、API 命名
  • API 表面设计:接口设计选型
  • 策略规划:技术路线选择

不推荐使用的场景:简单的事实查询、有标准答案的问题、精确计算类任务。

4.2 实验数据

在 6 个开放式工程问题上,独立 LLM 评委(持怀疑态度的高级工程师视角)对 ADHD 和单次生成基线的评分(0-10):

维度ADHD基线提升
思考广度9.004.83+4.17
新颖性7.832.67+5.17
陷阱检测9.501.83+7.67
可操作性9.506.50+3.00
对工程师有用程度7.676.83+0.83

最大亮点是陷阱检测,提升 5.2 倍——基线方法几乎不会主动识别「看起来有道理但实际是坑」的想法,而 ADHD 能系统性地发现并警告它们。

4.3 真实案例对比

以「设计一个 LLM CLI 超时重试策略」为例:

基线回答:给出教科书式的渐进超时 + 指数退避重试方案,最终推荐 15s 首 token 超时、30s 间隔超时、90s 绝对超时——Google SRE Book 第 22 章的标准答案。缺陷:没有识别陷阱,没有考虑「用户可能想直接取消」或「慢模型可能本身就是错误选择」。

ADHD 回答:同时发散 6 个框架,产生 30+ 个想法,聚类后包括经济激励、异步控制面、游戏化等多个角度。输出了 20 个陷阱警告,其中包括:「流式令牌逆序显示」和「耐心-代币计费」这两个看起来有道理但实际有问题的想法。最反直觉的pick:「rage-quit = 即时中止 + 切换到更便宜的 Haiku 级模型」——这个方案基线完全没有考虑。

五、常见问题

Q:运行 ADHD 会增加多少时间和成本? A:单次调用 ADHD 相比单次生成约增加 2.3× 时间和 1.9× token 消耗(约 1.9 倍)。但因为陷阱在规划阶段就被识别,避免了后期返工,实际项目效率整体提升。

Q:支持哪些编程语言? A:作为 Claude Agent SDK 上的技能,TypeScript/JavaScript 项目原生支持。CLI 和库也支持 Python 等语言通过子进程调用。

Q:和 CoT、ToT 的本质区别是什么? A:三个关键架构差异——(1) 生成阶段禁止评价,从架构上消除自我锚定;(2) 框架选择与最终决策完全解耦;(3) 独立 Critic 不是提示词技巧,是物理上分离的 LLM 调用。

六、总结

ADHD 是一个兼具学术深度和工程实用性的 AI 推理增强框架。它将「思维发散」从一个模糊的概念工程化为可配置、可测量、可复现的双阶段流程。在需要创意和策略的设计类任务上,它能显著提升 AI 输出的广度、新颖性和安全性。如果你经常感觉 AI 给出的第一个答案「差点意思」但又说不清哪里不对,ADHD 或许正是你需要的工具。

项目地址:https://github.com/UditAkhourii/adhd

预印论文:https://adhdstack.github.io/