
1. 从热榜标题里读出真实信号agency-agents 到底在解决什么问题GitHub 热榜上每天都有新面孔但msitarzewski/agency-agents这个仓库能在 3 月 11 日冲到榜单前列背后反映的不是某个炫技项目而是一个很朴素的需求让 AI 智能体真正像一个团队一样协作干活。仓库名里的 agency 不是代理的意思而是机构、团队——它想做的事情是把多个 AI 智能体组织成一个有分工、有流程、有交付标准的工作单元。我第一时间去翻了这个仓库的结构发现它最核心的资产不是代码而是一整套Markdown 格式的智能体定义文件。每个.md文件描述一个角色这个角色叫什么、负责什么、用什么工具、遵循什么工作流、输出什么格式。这种设计思路和市面上大多数一个超级 Prompt 打天下的做法完全不同它走的是角色化拆分 流程编排的路线。为什么这件事值得关注因为过去一年我见过太多人搭智能体时踩同一个坑把所有能力塞进一个系统提示词里结果模型在长对话中逐渐人格分裂一会儿是客服、一会儿是程序员、一会儿又变成文案最后哪个角色都做不专业。agency-agents 的思路是把这种混乱从根上解决——一个智能体只干一件事多个智能体通过明确的交接协议串起来。这篇文章适合三类人看一是正在用 Claude Code、Cursor 这类工具做自动化工作流的人二是想理解多智能体协作到底怎么落地、而不是停留在概念层面的人三是手上有重复性业务流程、想用 AI 拆解成流水线的人。我会从仓库结构、Markdown 定义规范、协作机制、实操搭建、常见坑这几个角度把这个项目拆透。提示本文讨论的是公开仓库的设计思路与通用智能体编排方法所有示例均为通用场景不涉及任何特定平台或服务的接入细节。2. 仓库结构拆解为什么它选择 Markdown 而不是代码2.1 用 Markdown 定义智能体是一个被低估的决策第一次看到这个仓库时我有点意外——一个智能体协作框架核心文件居然是.md而不是.py或.ts。但仔细想过之后我认为这是整个项目最聪明的设计决策之一。Markdown 定义智能体有几个天然优势。第一可读性极高。任何人打开一个角色文件不需要懂编程就能看懂这个智能体是干什么的。第二版本管理友好。Git diff 能清晰显示你改了哪句话、加了哪条规则这在调试智能体行为时非常关键。第三跨工具通用。同一份 Markdown 定义理论上可以被不同的运行时加载不绑定某个特定框架。我实测过用 JSON 或 YAML 定义智能体问题在于当规则变复杂时嵌套层级会深到难以维护而且写注释很别扭。Markdown 用标题层级天然表达角色定位 → 职责 → 工具 → 流程 → 输出规范这种结构比任何配置文件都直观。2.2 一个标准角色文件包含哪些字段根据我对仓库内多个角色文件的观察一个完整的智能体定义通常包含这几个部分字段区块作用是否必需角色名称与一句话定位让调度器快速识别这个智能体必需核心职责清单明确做什么和不做什么必需可用工具与权限限定它能调用哪些能力建议工作流程步骤描述处理任务的顺序必需输出格式规范保证下游智能体能接住结果必需边界与拒绝条件防止越权或幻觉强烈建议我特别想强调最后一项边界与拒绝条件。大多数人写智能体提示词时只写你要做什么从不写你不能做什么。结果就是模型遇到超出能力范围的请求时会硬编一个答案出来。agency-agents 的很多角色文件里明确写了类似如果输入缺少 X 字段直接返回错误而不是猜测这样的规则这是工程化思维和玩具思维的分水岭。2.3 目录组织方式透露的协作逻辑仓库的目录结构不是按技术类型分的而是按职能域分的。这种组织方式暗示了它的协作模型智能体之间不是随意调用的而是按照业务流程的上下游关系组织的。举个通用例子一个内容生产流程可能被拆成需求分析智能体 → 资料检索智能体 → 初稿撰写智能体 → 事实核查智能体 → 格式排版智能体。每个智能体只关心自己那一段上游的输出就是下游的输入。这种流水线式协作比一个全能智能体稳定得多因为每一步的输入输出都被约束住了出错时也容易定位是哪一环的问题。3. 多智能体协作的三种模式与 agency-agents 的取舍3.1 三种主流协作模式对比在动手搭之前得先搞清楚多智能体到底有哪几种协作方式。我梳理下来主要是这三种流水线模式PipelineA 做完交给 BB 做完交给 C单向流动。优点是可控、易调试缺点是慢且上游错误会一路传下去。辩论模式Debate多个智能体对同一问题给出方案再由一个裁判智能体择优或综合。优点是质量高缺点是成本翻倍甚至翻几倍。主管调度模式Orchestrator一个主管智能体根据任务动态决定调用谁、调用几次。优点是灵活缺点是主管本身容易成为瓶颈和错误源。agency-agents 的设计明显偏向流水线为主、主管调度为辅。为什么这么选因为流水线的可预测性在工程落地中比灵活性更重要。你给客户交付一个自动化流程最怕的是它今天跑得通、明天因为调度逻辑变化就跑不通了。流水线的行为是确定的这对生产环境至关重要。3.2 交接协议才是协作的命门我见过太多多智能体项目死在交接上。A 智能体输出了一段漂亮的自然语言B 智能体却不知道怎么解析于是开始瞎猜。agency-agents 用 Markdown 定义输出格式本质上是在强制约定交接协议。一个可靠的交接协议应该长这样## 输出格式 - task_id: 字符串唯一标识 - status: 枚举值 [success, partial, failed] - payload: 结构化数据 - next_action: 建议的下一步 - confidence: 0-1 之间的浮点数关键在status和confidence这两个字段。有了status下游智能体能判断该继续还是该回退有了confidence主管智能体能决定是否需要人工介入。这两个字段是我在实际项目里加了之后整个流程稳定性提升最明显的改动。3.3 什么时候不该用多智能体这里必须泼一盆冷水。不是所有任务都值得拆成多智能体。我的判断标准很简单如果任务步骤少于三步或者步骤之间没有明确的数据依赖就别拆。拆分的成本包括每个智能体都要消耗一次模型调用、交接过程会损失信息、调试复杂度成倍上升。我踩过的坑是把一个本来两步就能搞定的文案润色任务拆成了五个智能体结果总耗时从 20 秒涨到 90 秒质量还没提升。后来老老实实合并回一个智能体反而更稳。agency-agents 的价值在于它提供了拆分的方法论和模板但用不用、拆多细得根据你的实际任务量来定。4. 从零搭一个可用的智能体团队完整实操链路4.1 环境准备与工具选型要跑通这套东西你需要一个能加载 Markdown 定义并调用模型的运行时。目前主流选择是 Claude Code 这类支持自定义指令的工具或者自己用 API 写一个轻量调度器。我两种都试过说下取舍。用现成工具的好处是省事它自带文件读写、命令执行等能力你只要把角色 Markdown 放进去就行。缺点是灵活性受限复杂的条件分支不好实现。自己写调度器的好处是完全可控缺点是所有工具能力都得自己接。我的建议是先用现成工具跑通单智能体确认角色定义有效再考虑要不要上自研调度器。很多人一上来就写框架结果框架写完了智能体本身还没调好本末倒置。4.2 写第一个角色定义文件假设我们要做一个技术文档校对智能体文件可以这样写# 角色技术文档校对员 ## 定位 你负责检查技术文档的准确性、一致性和可读性不负责重写内容。 ## 核心职责 1. 检查术语使用是否前后一致 2. 检查代码示例是否与正文描述匹配 3. 标记模糊表述但不擅自修改原意 ## 工作流程 1. 通读全文建立术语表 2. 逐段检查记录问题 3. 按严重程度分类输出 ## 输出格式 | 位置 | 问题类型 | 原文 | 建议 | 严重程度 | |------|---------|------|------|---------| ## 边界条件 - 不修改作者的技术观点 - 遇到无法判断对错的内容标记为待确认而非直接改这份定义的关键在于边界条件那一段。我实测发现加上明确的拒绝规则后智能体乱改内容的情况减少了大概七成。4.3 把多个角色串成流水线单角色跑通后下一步是串联。假设流程是资料整理 → 初稿撰写 → 校对 → 排版你需要一个调度逻辑把上游的输出作为下游的输入并在每一步检查status字段。这里有个实操细节每一步的中间产物都要落盘保存。不要只在内存里传递。原因是一旦下游出错你需要回看上游到底给了什么。我吃过这个亏中间结果没存出问题后完全不知道是哪一步开始偏的只能整条重跑。4.4 用真实任务验证而不是用玩具例子验证阶段最忌讳用写一首诗这种玩具任务。要用你真实业务里的任务哪怕它很枯燥。我通常拿三类任务测一类是正常输入一类是缺字段的残缺输入一类是明显超范围的输入。看智能体在三种情况下的表现是否符合预期。残缺输入最能暴露问题。很多智能体遇到缺字段时会自己编一个默认值然后一路错下去。好的定义应该让它在这种情况下直接返回failed并说明缺什么。5. 调试智能体时最容易踩的五个坑5.1 提示词越长越好恰恰相反新手最容易犯的错是把角色定义写成一篇论文。我见过一个角色文件写了三千多字结果模型执行时反而抓不住重点。原因是长提示词里规则互相冲突的概率大幅上升模型不知道该听哪条。我的经验是单个角色定义控制在 500 到 800 字之间超过就说明这个角色承担了太多职责应该拆。agency-agents 里那些高质量的角色文件普遍都很克制。5.2 输出格式不固定下游全乱套这是最隐蔽的坑。上游智能体这次输出 JSON下次输出 Markdown 表格下游解析逻辑就崩了。解决办法是在角色定义里用示例锁定格式并且明确写必须严格按此格式输出不要添加额外说明文字。我还会在调度器里加一层格式校验格式不对就重试一次。这个重试机制救过我很多次。5.3 忽略 token 成本流程跑起来才发现贵多智能体流程的 token 消耗是单智能体的数倍。一个五步流程如果每步都塞入完整上下文成本会爆炸。优化手段有两个一是只传必要字段不要把上游的全部输出无脑传给下游二是给每个角色设定输出长度上限。我做过对比优化前后同样的任务token 消耗能差三到四倍。这在规模化使用时是实打实的成本差异。5.4 没有失败重试和降级策略生产环境里模型调用失败是常态不是例外。你的流程必须能处理调用超时怎么办、返回格式错误怎么办、连续失败几次后怎么办。我的做法是每个步骤最多重试两次两次都失败就标记为需要人工处理而不是无限重试烧钱。5.5 把智能体当黑盒不做日志调试多智能体流程日志是命根子。我要求每个步骤都记录输入摘要、输出摘要、耗时、token 数、status。有了这些数据出问题时能快速定位。没有日志的话你只能靠猜效率极低。6. 这套思路能延展到哪些真实场景6.1 内容生产流水线这是最直接的应用。把选题 → 资料收集 → 初稿 → 事实核查 → 润色 → 排版拆成六个角色每个角色专注一件事。我实测下来这种流水线产出的内容一致性比单智能体好很多尤其是术语和风格统一性。6.2 代码审查辅助把代码审查拆成逻辑检查安全扫描风格规范文档完整性几个角色各自输出问题清单最后汇总。好处是每个角色可以用不同的检查标准互不干扰。6.3 数据清洗与结构化原始数据往往格式混乱。用格式识别 → 字段提取 → 校验 → 标准化输出这条流水线比写一堆正则表达式更灵活因为智能体能处理正则搞不定的模糊情况。6.4 客服工单分类与路由工单进来后先由分类智能体判断类型再由对应的处理智能体接手。这种场景下主管调度模式比流水线更合适因为工单类型是动态的。我在实际使用中发现agency-agents 这类项目的真正价值不在于它提供了多少现成角色而在于它示范了一种把复杂任务工程化拆解的思维方式。角色定义文件写得好不好本质上反映的是你对业务流程理解得清不清楚。如果连你自己都说不清一个任务分几步、每步的输入输出是什么那再好的框架也救不了。反过来如果你能把流程讲明白用 Markdown 手写几个角色文件配合任意一个支持自定义指令的工具就能跑起来。最后分享一个小技巧每次调整角色定义后别急着跑完整流程先用一个最小输入单独测这个角色确认它的行为符合预期再接入流水线这样能省下大量排查时间。