ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

BMad 头脑风暴的聊天内技术选型指南:in-chat-techniques 协议与 brain.py 工具链实战解析

BMad 头脑风暴的聊天内技术选型指南:in-chat-techniques 协议与 brain.py 工具链实战解析 BMad 头脑风暴的聊天内技术选型指南in-chat-techniques 协议与 brain.py 工具链实战解析【免费下载链接】BMAD-METHODBreakthrough Method for Agile Ai Driven Development项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHOD导读本文聚焦 BMAD-METHOD 项目中bmad-brainstorming技能SKILL.md在纯聊天环境下如何为头脑风暴会话选择发散技巧technique。当用户无法或不愿打开浏览器端的 composer 选择页无浏览器、headless 调用、或用户主动拒绝时in-chat-techniques.md 便作为唯一被加载的选型协议接管流程。读完本文你将掌握四种聊天内选型路径Facilitator Chosen / Browse / Category / Inventive Flow的完整决策逻辑、brain.py全部子命令的调用语义与上下文控制策略、自定义技巧目录的--extra覆盖机制以及这些机制背后的源码实现与测试证据。一、协议定位什么情况下会加载 in-chat-techniquesin-chat-techniques.md不是一份常规参考文档而是一条有严格触发条件的运行时指令。根据 SKILL.md 中## Run a Session与## Choosing Techniques两节的描述选型存在两条主路径composer 页面主路径技能激活后会尝试用brain.py html生成选择页{skill-root}/assets/brain-selector.html或定制的{doc_workspace}/brain-selector.html并用open/xdg-open/start打开浏览器用户在该页面上组合会话、点击Copy prompt后将结果粘贴回聊天。这条路径下每个技巧的完整 category/name/description 已经随粘贴块返回无需再调用list或show。聊天内选型兜底路径用户打不开页面、没有浏览器、headless 调用或明确表示lets do it in chat时才加载in-chat-techniques.md在对话中完成选型。文档开篇即声明其边界Loaded only when the user wont use the composer page (no browser, headless, or they declined)仅当用户不会使用 composer 页面时才加载。这一点与 headless.md 的隔离策略一脉相承——headless 场景下甚至允许list --all全量拉取目录因为此时没有用户需要节奏控制但交互式聊天内选型绝不允许把整个库拉入上下文。二、聊天内选型的四条路径与决策逻辑聊天内选型的核心是你来挑批次用户来拍板。文档给出了唯一允许的菜单——四种方式等待用户选择其一。3–4 个技巧是甜蜜点sweet spot选型批次以 3–4 为宜。2.1 Facilitator Chosen默认路径——AI 根据目标定向提名这是默认选项。Facilitator或 Creative Partner 模式下的协作者依据三个输入来提名 3–4 个技巧会话目标goal开场时问出的 why{workflow.favorite_techniques}customize.toml 中配置的偏好技巧列表命中时优先categories地图即brain.py categories子命令输出的类别名 数量概览。关键的上下文纪律是确认技巧的精确名称时只对你取材的类别做定向list --category绝不遍历整个库来选。例如目标偏向诊断问题根源就只对deep类别执行一次list --category deep从返回的索引中挑选而不是把 108 个技巧全部扫一遍。2.2 Browse——把选择权交还给 composer 页面如果用户其实可以访问浏览器这条路径让用户回到SKILL.md中## Run a Session描述的 composer 页面流程用户在brain-selector.html上勾选技巧、点击 Copy prompt把生成的提示块粘贴回来。粘贴块携带每个技巧的完整 name/category/description甚至可能带有(random pick)标记因此回来后直接按原样运行即可不需要再走list/show——这正是浏览器页面负责消耗上下文、聊天只接收结果的设计意图。2.3 Category——按用户圈定的类别盲抽用户直接指定 1n 个类别如 wild 和 speculative_future 各来两个Facilitator 用random --category从这些类别中抽取批次。由于random输出的是每个技巧的 name gist 索引行无需先 list 再选一条命令即完成盲抽。若需要 4 个则-n 4。2.4 Inventive Flow——现场发明新技巧这是一条离开剧本的路径Facilitator 至少现场发明 3 个全新技巧可在某个类别的精神指引下发明如 invent 1 new technique in the spirit of 在第一个技巧之前先宣布执行顺序且不触碰任何脚本不调用list/random/show。每个发明出的技巧都要将其 name description 记入 memlog以便在收尾时wrap-up通过bmad-customize把其中值得保留的keeper保存到{workflow.additional_techniques}让即兴发明沉淀为可复用的库资产。三、brain.py唯一的目录入口与五个子命令文档反复强调一条铁律库很大永远不要把整个库拉进上下文唯一入口是 helper 脚本且每次调用都必须传--file {workflow.brain_methods}。对应实现见 brain.py 的main()第 717 行起其 argparse 设计从 CLI 层面强制了这条纪律。统一调用形式为uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} subcommand [options]{workflow.brain_methods}默认解析为{skill-root}/assets/brain-methods.csv见 customize.toml 第 35 行这是一个包含108 条技巧、13 个类别structured15、deep13、creative10、speculative_future8、introspective_delight8、collaborative8、wild7、theatrical7、cultural7、constraint7、quantum6、biomimetic6、absurdist6的 CSV 目录。3.1 categories —— 廉价的全局概览uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} categories输出每个类别的名称与数量如deep\t13是成本最低的摸底地图用于 Facilitator Chosen 路径的取材判断。实现上对应 brain.py 的categories()函数第 108 行按类别名排序返回(category, count)元组。3.2 list —— 定向索引name gist裸调被拒绝# 单类别 uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} list --category structured # 多类别可重复传参 uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} list --category deep --category wild输出格式为category\ttechnique_name\tdescription即名字 一句话要点 gist。这是聊天内选型最常用的命令gist 通常足以提出并运行一个技巧。设计上最重要的一点裸list会被脚本拒绝。在 brain.py 的main()第 762 行当既没有--category也没有--all时命令以退出码 2 失败并打印指引且不向 stdout 泄漏任何目录内容。测试 test_brain.py 的test_list_bare_is_refused用例第 101 行明确断言了captured.out ——把整库倒入上下文是脚注里的footgun必须有意识、明确地做。唯一的例外是--all第 109 行test_list_all_dumps_everything验证其会全量输出文档将其标记为deliberate; large的显式逃生舱仅限 headless 等确有需要的场景。3.3 random —— 盲抽批次# 从多个类别盲抽 4 个 uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} random --category wild --category speculative_future -n 4 # 全库盲抽不推荐交互式使用 uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} random -n 4对应random子命令第 737 行起-n默认 1且实现会对n做钳制max(0, min(args.n, len(pool)))第 782 行——负数或超量不会崩溃测试test_random_negative_n_does_not_crash第 130 行专门守护了这一行为。注意random输出仍是list风格的索引行属于列出但不枚举的中间态。3.4 show —— 单个技巧的完整方法只在即将运行时调用uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} show SCAMPER Methodshow输出该技巧的完整 gist并在其 CSV 行带有detail字段时内联对应的详细说明文件resolve_detail()brain.py 第 131 行。这正是重型材料永不提前进入上下文的实现只有show解析 detail 文件且只为被点名的技巧解析测试test_show_inlines_detail第 79 行验证了这一点。纪律要求只在某个技巧即将开始运行的那一刻才调用show选型阶段用list的 gist 足够。3.5 html —— 生成 composer 选择页Browse 路径的载体uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} html --out {doc_workspace}/brain-selector.htmlhtml强制要求--out第 784 行起绝不把目录打印到 stdout测试test_html_requires_out第 143 行。生成的brain-selector.html是一个自包含页面模板见 brain.py 第 238 行的SELECTOR_TEMPLATE支持明暗主题、三档 Facilitation mode 切换、按类别跳转、按 Great for 目标标签过滤以及Random / Invent / AI picks 三个步进器——页面 JS 的compose()函数第 485 行最终拼出带Facilitation mode:行和编号技巧列表的提示文本。此外仓库还预置了与当前 CSV 同步的静态版本 brain-selector.html并有测试test_shipped_selector_is_in_sync_with_catalog第 288 行强制改了 CSV 就必须重新生成页面。四、上下文控制为什么绝不整库载入整个 in-chat-techniques 协议的设计内核是上下文预算管理。脑力激荡目录有 108 条技巧、13 个类别若每次会话都把整库塞入上下文会显著挤占模型用于发散提问与记忆用户想法的空间。因此协议层层设防防线机制源码/测试依据脚本层list裸调返回码 2 且零输出html强制--outbrain.py 第 762、786 行test_brain.py 第 101、143 行选型层只对取材类别做定向list --category不枚举整库in-chat-techniques.md运行时层show只在技巧即将运行时调用listgist 足够则不再showbrain.py 第 131 行test_brain.py 第 79 行输出层默认输出为面向 LLM 的精简文本可选--json结构化输出brain.py 第 32、729 行这些防线的共同目标是保证发散阶段divergent phase的上下文几乎全部留给用户的想法和 memlog 日志选型只占用极小的临时窗口。五、自定义技巧与 --extra 覆盖机制5.1 additional_techniques 一等公民地位customize.toml 的[workflow]表提供了两处定制点# 偏好技巧命中目标时优先提名append 合并团队层与个人层都贡献 favorite_techniques [] # 额外技巧与全新类别无需修改发货 CSV 即可扩充目录 # [[workflow.additional_techniques]] # category domain-specific # technique_name Regulatory Inversion # description Start from the compliance constraint and brainstorm what becomes possible only because of it... additional_techniques []文档要求把{workflow.additional_techniques}中的条目视为一等公民对待——包括它们引入的全新类别同时凡{workflow.favorite_techniques}契合目标时优先采用。任何命令要包含额外技巧都必须显式传--extra json其格式为 JSON 对象列表[ {category: domain-specific, technique_name: Regulatory Inversion, description: ...}, {category: wild, technique_name: Extra Wild One, description: ...} ]5.2 覆盖语义同名替换异名追加--extra的合并逻辑在 brain.py 的merge_extra()第 92 行与load_extra()第 65 行中实现同名忽略大小写替换若额外技巧的technique_name与发货 CSV 中某行匹配则替换该行可用于微调一个内置技巧如 SCAMPER 的重描述版本异名追加其余条目追加到目录尾部全新类别随之出现全命令生效--extra与categories、list、random、show、html每一个子命令都可组合--extra在main()中先于子命令分发被合并第 748 行意味着浏览页与类别盲抽同样覆盖自定义技巧。测试对这一语义有完整覆盖test_extra_merges_into_categories第 182 行新类别domain-specific\t1出现、test_extra_replaces_shipped_row_by_name第 194 行同名行被替换而非复制、test_extra_is_first_class_in_html第 217 行自定义技巧在浏览页可选且新类别正常渲染。作者还特别说明这与姊妹技能bmad-advanced-elicitation的pick_methods.py采用同一套覆盖语义保证跨技能的additional_*行为一致。5.3 健壮性细节--extra指向不存在的文件时返回码 2test_extra_missing_file_returns_2畸形 JSON非法语法、非数组、元素非对象会干净退出并提示could not read --extratest_extra_malformed_exits_cleanly第 209 行main()开头的pin_utf8()第 700 行把 stdout/stderr 钉在 UTF-8 编码上——因为--extra是任意用户输入在 Windows cp1252 控制台下含 emoji 或非拉丁字符的技巧名会触发UnicodeEncodeErrorpin_utf8特意保留流原有的errors处理器test_pin_utf8_preserves_the_streams_error_handler第 271 行避免把诊断信息变成 traceback。六、与 memlog 的衔接每个决定都要落盘聊天内选型不是孤立动作它与会话记忆系统memlog紧密配合实现见 memlog.py 在部署后位于{project-root}/_bmad/scripts/memlog.py。按 SKILL.md 的约定会话启动后先memlog.py init建立日志记录topic、goal、mode每个技巧的切换记录为--type technique --text started name每个想法记录为--type ideaCreative Partner 模式下作者归属必填--by user/--by coach渲染为(idea by user)等内联标签让收尾时能照出哪些是用户自己生成的见 mode-partner.mdInventive Flow 发明的新技巧必须记录 name description收尾时经bmad-customize存入additional_techniques。memlog 是纯追加append-only、无编辑删除子命令、写操作原子化临时文件 fsync 后 rename 覆盖——会话记忆不被篡改是它可信的前提。七、完整聊天内选型流程示例把以上机制串起来一次纯聊天选型大致如下1. 开场单问确定 topic goalwhy得到 {topic_slug}。 2. 确定 stanceFacilitator / Creative Partner / Ideate for me。 3. 用户拒绝浏览器页面 → 加载 references/in-chat-techniques.md。 4. 向用户展示四种方式唯一菜单等待选择 - 我根据目标替你挑 3–4 个默认→ categories 摸底 定向 list --category 确认名称 - 我打开选择页自己勾Browse→ html --out 生成页面等粘贴块返回原样运行 - 从这几个类别里盲抽Category→ random --category ... -n 4 - 现场发明Inventive Flow→ 宣布顺序发明 ≥3 个全程不碰脚本。 5. memlog init 落盘 {doc_workspace}告知用户日志路径会话可中断续跑。 6. 逐个运行技巧至产不出想法为止切换技巧时记 technique 条目。 7. 批次耗尽后给三选一再来一批 / converge 收敛 / wrap-up 收尾。八、结语聊天内选型的三条纪律回顾 in-chat-techniques.md 全篇可以提炼出三条贯穿始终的工程纪律批次纪律3–4 是甜蜜点批次不宜过大composer 页的 JS 甚至会在总数超过 5 时给出警告样式保持发散节奏不被技术切换打断。上下文纪律目录只经brain.py --file进出list必须定向、裸调被拒show只在运行时调用--extra让自定义技巧不落 CSV 也完全一等公民——所有设计都在对抗整库进上下文这一 footgun。记忆纪律选型结果、技术切换、即兴发明全部写入 append-only 的 memlog让会话可恢复、可追溯、可在 wrap-up 时把优秀的发明沉淀回additional_techniques。这套协议与 headless.md无人类时的自我发散、converge.md收敛阶段一起构成了 bmad-brainstorming 完整生命周期中如何选、如何发、如何收的第一环。【免费下载链接】BMAD-METHODBreakthrough Method for Agile Ai Driven Development项目地址: https://gitcode.com/gh_mirrors/bm/BMAD-METHOD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表