ARTICLE DETAIL

资讯详情

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

forgecode Followup 工具深度解析:AI 结对编程中的澄清追问与多选交互机制

forgecode Followup 工具深度解析:AI 结对编程中的澄清追问与多选交互机制 人工智能AI Agent代码智能体AI 应用CLI开发工具【免费下载链接】forgecodeAI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models项目地址https://gitcode.com/gh_mirrors/forge39/forgecode点击查看免费下载本文以 forgecode 仓库中 followup.md 的定义为核心系统讲解 Followup追问工具的设计意图、输入协议、三种交互模式、底层实现与结果回流机制。读完本文你将掌握该工具在 Agent 工作流中的完整调用链路理解如何利用它在信息不充分时向用户发起单选项、多选项或自由文本澄清从而写出更精准、更低往返成本的 Agent 提示与工具调用。Followup 工具是什么在 AI 结对编程场景中模型面对模糊需求或缺少关键信息时与其猜测并执行错误操作不如主动向用户提问。forgecode 的 Followup 工具正是为此设计的专用通道其官方描述原文如下Use this tool when you encounter ambiguities, need clarification, or require more details to proceed effectively. Use this tool judiciously to maintain a balance between gathering necessary information and avoiding excessive back-and-forth.这段描述传达了两个核心设计原则适用场景明确当遇到歧义ambiguities、需要澄清clarification或需要更多细节more details以继续有效工作时才调用它即“信息不足先问再动”。强调克制使用judiciously追问本身会产生一次额外的用户交互往返back-and-forth因此要平衡“收集必要信息”与“避免过多往返”之间的关系能基于上下文合理推断的问题不必反复追问。该描述通过#[tool_description_file crates/forge_domain/src/tools/descriptions/followup.md]宏挂载到Followup输入结构体上见 catalog.rs会随工具定义一起注入模型上下文成为模型决定“何时该问、怎么问”的行为依据。输入协议question、multiple 与 option1option5Followup 工具的输入由Followup结构体定义catalog.rs字段如下字段类型是否必填说明questionString必填要向用户提出的问题multipleOptionbool可选为true时允许多选为false默认时只能单选option1OptionString可选候选选项 1option2OptionString可选候选选项 2option3OptionString可选候选选项 3option4OptionString可选候选选项 4option5OptionString可选候选选项 5从实现细节看question是唯一必填字段multiple与五个选项均标注#[serde(skip_serializing_if Option::is_none)]未提供时不会出现在序列化 JSON 中保持传输负载精简。一个典型的单选调用示例如下{ question: Which file would you like to edit?, option1: src/main.rs, option2: src/lib.rs, option3: tests/integration.rs }一个典型的多选调用示例如下{ question: Which modules should be covered by the new tests?, multiple: true, option1: auth, option2: billing, option3: notifications }三种交互模式的决策逻辑Followup提交后参数会先经 tool_executor.rs 汇聚option1option5通过chain依次收集为VecString连同question、multiple一起交给FollowUpService::follow_up服务。真正的交互决策在 followup.rs 中完成逻辑可概括为match (options.is_empty(), multiple.unwrap_or_default()) { (true, _) 自由文本输入prompt_question (false, true) 多选select_many (false, false) 单选select_one }三种模式的行为与结果格式无选项自由输入options为空时无论multiple取何值都会弹出自由文本输入框让用户直接键入回答返回用户输入的原文。单选提供选项且multiple为false或未提供时弹出单选菜单返回User selected: {selected}格式的字符串。多选提供选项且multiple为true时弹出多选菜单返回User selected N option(s): {option_a}, {option_b}格式的字符串N 为用户实际勾选的数量。需要特别注意的是当options为空时multiple参数不产生任何作用对应(true, _)分支这也是结构体注释中“默认单选、多选需显式开启”这一约定在服务端的落地。底层 UI 实现ForgeWidget 与阻塞线程调度交互式追问的界面层位于 forge_infra/src/inquire.rs通过ForgeInquire实现UserInfratrait 的三个方法prompt_question调用ForgeWidget::input(question).allow_empty(true)渲染自由文本输入框并允许空输入select_one调用ForgeWidget::select(message, options)渲染单选列表选项为空时直接返回Noneselect_many调用ForgeWidget::multi_select(message, options)渲染多选列表同样在选项为空时返回None。这些交互都通过spawn_blocking在阻塞线程池中执行ForgeInquire内部将闭包交给tokio::task::spawn_blocking避免 TUI 的同步阻塞操作拖垮异步事件循环。此外select_one/select_many在options为空时会提前返回Ok(None)与服务层(true, _)分支互为兜底保证任何路径都不会因空选项而出错。ForgeInquire在 forge_infra.rs 中作为基础设施infra被实例化为ArcForgeInquire再注入ForgeFollowup服务形成App → Service → Infra → Widget的分层调用链。结果如何回流给模型feedback 与 interrupted 语义追问结果最终要转成模型可读的工具输出。在 operation.rs 中ToolOperation::FollowUp { output }有两种渲染分支output为Some(content)渲染为 XML 元素feedback用户的选择或回答/feedback表示用户已给出有效反馈output为None渲染为interruptedNo feedback provided/interrupted表示用户中断或未提供反馈。这两种语义对模型至关重要feedback意味着拿到了下一步行动依据可以继续推进interrupted则提示模型本次追问没有得到有效答复需要调整策略例如改用其他工具或降低追问频率。对应的快照测试覆盖了这两种形态follow_up_with_question.snap 与 follow_up_no_question.snap单元测试test_follow_up_with_question/test_follow_up_no_question位于 operation.rs。格式化与回放侧同样有对应测试见 fmt_output.rs 的test_follow_up_with_response与test_follow_up_no_response保证对话记录在不同渲染阶段的一致性。在 Agent 工作流中的位置与上下文保持Followup 的注册与排序位于 catalog.rsToolCatalog::Followup(Followup)是工具枚举成员之一并在工具顺序列表中占据一席[ToolKind::Followup]模型可随工具清单随时调起。它是一类典型的“人机交互”工具不触碰文件系统、不执行命令只在模型与用户之间传递澄清信息。在上下文压缩compaction场景中Followup 调用还会被折叠进摘要。相关证据包括summary.rs 定义了SummaryTool::Followup { question: String }并提供工厂方法tool_call_followup(question)生成默认值的 Followup 摘要调用trim_context_summary.rs 会将摘要中的SummaryTool::Followup重新映射为Operation::Followup保持压缩前后语义一致strip_working_dir.rs 在剥离工作目录信息时同样保留SummaryTool::Followup条目。这意味着即便长会话触发压缩模型仍能在摘要中看到“曾向用户追问过什么问题”从而在恢复上下文后继续围绕未决问题工作。最佳实践何时问、怎么问结合工具描述与服务实现使用 Followup 时建议遵循以下原则问前先穷尽上下文优先通过fs_read、fs_search、semantic_search等工具在仓库中自行寻找答案只有信息确实不足时再发起追问呼应“judiciously”的设计要求。问题必须具体question是唯一必填项提问质量直接决定回答质量避免“你想怎么做”这类开放问题尽量给出可执行的候选范围。能用选项就不用自由输入提供option1option5候选选项可把用户操作成本降到最低一次回车即完成而自由输入需要用户手动键入。当选项不明确时才退回自由文本模式。区分单选与多选只需一个答案时保持multiple缺省或为false确实需要同时获得多个选择例如“哪些模块需要测试”时才置true避免单选迫使模型后续再追问一次。接受“无反馈”结果用户可能直接中断interrupted模型应将其视为未获得反馈的正常分支而不是错误并据此调整后续行动。相关源码导航工具描述原文crates/forge_domain/src/tools/descriptions/followup.md输入结构体与工具注册crates/forge_domain/src/tools/catalog.rs服务层三种交互模式crates/forge_services/src/tool_services/followup.rs服务 trait 定义crates/forge_app/src/services.rs执行器调用链选项汇聚crates/forge_app/src/tool_executor.rsUI 基础设施input/select/multi_selectcrates/forge_infra/src/inquire.rs结果 XML 渲染与快照测试crates/forge_app/src/operation.rs压缩摘要中的 Followup 保持crates/forge_domain/src/compact/summary.rs以上链路完整覆盖了“描述定义 → 参数解析 → 服务决策 → UI 交互 → 结果回流 → 上下文压缩”的全过程是理解 forgecode 人机协作机制的重要入口。赞分享人工智能AI Agent代码智能体AI 应用CLI开发工具【免费下载链接】forgecodeAI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models项目地址https://gitcode.com/gh_mirrors/forge39/forgecode点击查看免费下载相关推荐Ekko Studio Coding Agent MCP 用户澄清机制ekko-studio-interaction 交互工具的原理与实战Ekko Studio Coding Agent MCP 用户澄清机制 ekko studio interaction 交互工具的原理与实战 导读 在 EkkAI 应用人工智能AI Agent本地部署前端后端工作流自动化全新AI编程工具对比深度解析与选择指南全新AI编程工具对比深度解析与选择指南 核心特性大比拼 | 对比维度 | 开源AI助手 | 商业AI助手 | | | | | | 开源协议 | MIT许可证人工智能AI 应用AI Agent代码智能体CLI开发者工具ForgeCode todo_write 工具全解析用结构化任务清单掌控多步编码会话ForgeCode todo_write 工具全解析用结构化任务清单掌控多步编码会话 ForgeCode 是一个面向 Claude、GPT、Gemini 等人工智能AI Agent代码智能体AI 应用CLI开发工具上一篇【亲测免费】 探索Jikan一款高效、易用的MyAnimeList API下一篇如何第一次运行ADHD用Claude Code的/adhd命令设计限流器完整实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表