BMAD method中的命名智能体到底是个啥?
官方文档:https://docs.bmad-method.org/zh-cn/tutorials/getting-started/
在学习BMAD时阅读的文章好像并没有提到命名智能体这个玩意儿,大都是直接调用skill工作,那为啥说BMAD是通过给AI专业的人设来开发的呢?直接说是一系列流程skill的集合不就行了?所以我去阅读了一下BMAD的官方文档,发现了命名智能体这个玩意儿,我想这才是BMAD设计的巧妙之处。
定义
概念解释:一个可辨识的身份,把一组相关技能包装在统一的语气、原则和视觉标识下,目录名以bmad-agent-*开头的技能。
以下是内置的一些命名智能体,当然也可以自己设置自定义智能体:
| 智能体 | 阶段 | 模块 |
|---|---|---|
| 📊 Mary,商业分析师 | 分析 | 市场调研、头脑风暴、产品摘要、PRFAQ |
| 📚 Paige,技术文档工程师 | 分析 | 项目文档、流程图、文档校验 |
| 📋 John,产品经理 | 规划 | PRD 创建、Epic/Story 拆分、实施就绪评审 |
| 🎨 Sally,UX 设计师 | 规划 | UX 设计规范 |
| 🏗️ Winston,系统架构师 | 方案设计 | 技术架构、一致性检查 |
| 💻 Amelia,高级工程师 | 实现 | Story 执行、快速开发、代码评审、Sprint 规划 |
命名智能体定义文档理解
当我们下达如下命令”嘿 Mary,咱们来头脑风暴”,Mary 就激活了。然后她跳过菜单,直接进入头脑风暴。如果说的不够清晰,会显示菜单让你选择使用哪一个skill。
当我们去看BMAD安装后的目录会发现,Mary这个角色对应的文档在.agents/skills/bmad-agent-analyst下,也就是说Mary也是一个skill。这个目录下有customize.toml和SKILL.md。
打开customize.toml,会看见以下字段,它们定义了这个skill的“人设”。包括它的名字,能力以及能力对应的skill。通过这个AI就可以根据你的命令选择合适的skill或者是在终端显示可选的skill菜单。注意这是一个可编辑文档,所以后续这个角色的功能是可以扩展的。
[agent] # agent 这一段是“这个技能扮演的角色”的配置区 # 不可通过普通配置改名/改标题;如果要换名字或头衔,通常要新建自定义 agent name = "Mary" # 这个 agent 的显示名,用户看到的角色名 title = "Business Analyst" # 这个 agent 的职位/身份标题 icon = "📊" # 这个 agent 对外显示的图标,用来一眼识别当前是谁在说话 activation_steps_prepend = [] # 激活前要先执行的步骤列表;这里为空,表示没有额外预处理 activation_steps_append = [] # 进入主流程前、问候之后要执行的步骤列表;这里为空 persistent_facts = [ "file:{project-root}/**/project-context.md", # 会读取项目里所有匹配到的 project-context.md 文件内容,作为长期上下文 ] role = "Help the user ideate research and analyze before committing to a project in the BMad Method analysis phase." # 这个 agent 的职责说明:帮助用户做研究、分析、构思,在正式承诺项目之前先弄清楚方向 identity = "Channels Michael Porter's strategic rigor and Barbara Minto's Pyramid Principle discipline." # 这个 agent 的“人格/方法论身份”:强调战略分析严谨性和金字塔原理式表达 communication_style = "Treasure hunter's excitement for patterns, McKinsey memo's structure for findings." # 这个 agent 的说话风格:发现线索时像寻宝一样兴奋,但表达结果时像咨询备忘录一样结构化 principles = [ "Every finding grounded in verifiable evidence.", # 每个结论都必须有可验证证据 "Requirements stated with absolute precision.", # 需求必须表达得非常准确 "Every stakeholder voice represented.", # 要尽量覆盖所有相关方的声音 ] [[agent.menu]] # 一个菜单项;双中括号表示“数组中的一个表”,也就是可重复的菜单条目 code = "BP" # 菜单代码,用户可用这个缩写快速选择 description = "Expert guided brainstorming facilitation" # 这个菜单项的说明 skill = "bmad-brainstorming" # 选中后要跳转执行的技能名 [[agent.menu]] code = "MR" description = "Market analysis, competitive landscape, customer needs and trends" skill = "bmad-market-research" [[agent.menu]] code = "DR" description = "Industry domain deep dive, subject matter expertise and terminology" skill = "bmad-domain-research" [[agent.menu]] code = "TR" description = "Technical feasibility, architecture options and implementation approaches" skill = "bmad-technical-research" [[agent.menu]] code = "CB" description = "Create or update product briefs through guided or autonomous discovery" skill = "bmad-product-brief" [[agent.menu]] code = "WB" description = "Working Backwards PRFAQ challenge — forge and stress-test product concepts" skill = "bmad-prfaq" [[agent.menu]] code = "DP" description = "Analyze an existing project to produce documentation for human and LLM consumption" skill = "bmad-document-project"SKILL.md就是用于定义"Mary"的工作流的,跟普通的SKILL.md文档没什么区别。
调用时做了什么
那么AI是如何知道Mary对应的是哪一个skill呢?这主要依赖于_bmad/config.toml文件,这里面定义了BMAD method的配置,包括当前项目名,命名智能体和skill之间的对应关系,以及安装的modules。通过这个文件,AI就可以知道当你向’Mary’下达命令时,它应该去调用哪一个skill。
调用命名智能体时的具体步骤如下,其实就是SKILL.md文档(这里以Mary为例):
- 解析智能体配置— 根据SKILL.md 中的工作流,第一步就是获得Mary的人设,运行python脚本将内置
customize.toml与团队覆盖和个人覆盖合并。
这并不意味着必须安装python,继续往下读会看到如果脚本运行失败,直接按顺序读取配置文件即可。Run: python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key agent
对于Mary来说,人设配置文件的读取顺序如下,因为是覆盖合并,所以个人自定义的人设优先级最高,其次是团队,最后才是官方。也就是说,如果需要更改人设需要在这个文件project-name/_bmad/custom/bmad-agent-analyst.user.toml或者project-name/_bmad/custom/bmad-agent-analyst.toml下更改,虽然直接在bmad-agent-analyst/customize.toml中也可以更改,但是需要注意的是,如果重新安装BMAD,这个文件会被覆盖。1. {skill-root}/customize.toml — defaults 2. {project-root}/_bmad/custom/{skill-name}.toml — team overrides 3. {project-root}/_bmad/custom/{skill-name}.user.toml — personal overrides1. bmad-agent-analyst/customize.toml — defaults 2. project-name/_bmad/custom/bmad-agent-analyst.toml — team overrides 3. project-name/_bmad/custom/bmad-agent-analyst.user.toml — personal overrides - 执行前置步骤— 团队配置的任何预处理行为,也就是customize.toml中的activation_steps_prepend字段
- 采用人设— 硬编码身份加上自定义的角色、沟通风格、原则
- 加载持久化事实— 组织规则、合规说明,可通过
file:前缀加载文件(如file:{project-root}/docs/project-context.md) - 加载配置— 用户名、沟通语言、输出语言、产物路径
- 打招呼— 个性化问候,使用配置的语言,带上智能体的 emoji 前缀让你一眼认出谁在说话
- 执行后置步骤— 团队配置的任何问候后设置,也就是customize.toml中的activation_steps_append字段
- 分发或展示菜单— 如果你的开场消息能匹配某个菜单项,直接执行;否则展示菜单等待输入
注意与启发
1、注意:通过上文可以知道,某些skill是被定义在一个角色比如"mary"的人设文档的menu中的,所以你通过唤醒Mary可以调用某些skill,但是如果skill没有被加入到menu中,那么就需要通过/skill-name(codex中)的方式使用某一个skill。
2、启发:根据Mary的路径,我们可以自定义一个角色,这个角色的skill目录要放在本地,不要放在.agent/skills目录下,放在这里重新安装BMAD时可能会被覆盖,然后将其软链接到.agent/skills下。在这个skill中定义好toml文件和md文件,和Mary一样,然后在_bmad/config.toml中定义好这个角色对应的skill即可。这里需要注意,并不是想当然的在_bmad/config.user.toml中定义,它是由安装器维护,从每个模块的 module.yaml 重建。
