Skip to main content

ask_followup_question

ask_followup_question工具通过提出特定问题来收集完成任务所需的额外信息,实现交互式沟通。


参数

工具接受以下参数:

  • question (必填): 要向用户提出的具体问题
  • follow_up (可选): 2-4个建议答案列表,每个答案放在<suggest>标签中

功能

该工具在Roo和用户之间创建对话界面,当遇到模糊点或决策点时,用于收集澄清、额外细节或用户偏好。每个问题可以包含建议响应以简化交互。


使用场景

  • 原始请求中缺少关键信息时
  • 当Roo需要在多个有效实现方案中选择时
  • 需要技术细节或偏好才能继续时
  • 当Roo遇到需要解决的模糊点时
  • 当额外上下文能显著提高解决方案质量时

主要特点

  • 提供结构化方式收集特定信息而不中断工作流
  • 包含建议答案以减少用户输入并引导响应
  • 跨交互维护对话历史和上下文
  • 支持包含图片和代码片段的响应
  • 作为"始终可用"工具集在所有模式下可用
  • 支持用户直接指导实现决策
  • <answer>标签格式化响应以区别于常规对话
  • 成功使用时重置连续错误计数器

限制

  • 每次工具使用只能提出一个特定问题
  • 在UI中将建议显示为可选选项
  • 不能强制结构化响应 - 用户仍可自由回答
  • 过度使用会减慢任务完成速度并造成碎片化体验
  • 建议答案必须完整,不能包含需要用户编辑的占位符
  • 没有内置的用户响应验证机制
  • 没有强制特定答案格式的机制

工作原理

当调用ask_followup_question工具时,遵循以下流程:

  1. 参数验证:验证必填的question参数并检查可选建议

    • 确保提供了问题文本
    • 使用fast-xml-parser库从follow_up参数解析建议答案
    • 即使只有一个建议也将其规范化为数组格式
  2. JSON转换:将XML结构转换为标准JSON格式以供UI显示

    {
    question: "用户问题文本",
    suggest: [
    { answer: "建议1" },
    { answer: "建议2" }
    ]
    }
  3. UI集成

    • 通过ask("followup", ...)方法将JSON结构传递给UI层
    • 在界面中向用户显示可选建议按钮
    • 创建选择或输入响应的交互式体验
  4. 响应收集与处理

    • 捕获用户文本输入和响应中包含的任何图片
    • 返回给助手时用<answer>标签包装用户响应
    • 保留用户响应中包含的任何图片
    • 通过将响应添加到历史记录来维护对话上下文
    • 工具成功使用时重置连续错误计数器
  5. 错误处理

    • 使用计数器跟踪连续错误
    • 工具成功使用时重置计数器
    • 提供特定错误消息:
      • 缺少参数:"Missing required parameter 'question'"
      • XML解析:"Failed to parse operations: [error message]"
      • 无效格式:"Invalid operations xml format"
    • 包含安全机制防止缺少必填参数时执行工具
    • 发生错误时增加连续错误计数

工作流顺序

问答周期遵循以下顺序:

  1. 识别信息缺口:Roo识别出继续所需缺失信息
  2. 创建具体问题:Roo制定清晰、有针对性的问题
  3. 开发建议:Roo创建相关建议答案(可选但推荐)
  4. 调用工具:助手用问题和可选建议调用工具
  5. UI展示:问题和建议作为交互元素显示给用户
  6. 用户响应:用户选择建议或提供自定义答案
  7. 消息处理:系统处理部分和完整消息
    • 对于流式响应,处理到达的每个数据块
    • 对于完整消息,一次性处理整个响应
    • 无论消息分块如何都保持状态一致
  8. 响应处理:系统用<answer>标签包装响应并保留图片
  9. 上下文集成:响应被添加到对话历史
  10. 任务继续:Roo使用新信息继续任务

使用示例

  • 开发Web应用时,Roo可能询问首选样式框架(Bootstrap、Tailwind、自定义CSS)
  • 创建API时,Roo可能询问认证方法(JWT、OAuth、API密钥)
  • 重构代码时,Roo可能询问性能与可读性的优先级
  • 设置数据库时,Roo可能询问特定模式设计偏好
  • 创建自定义功能时,Roo可能询问特定行为预期
  • 排查错误时,Roo可能询问特定环境细节

响应格式

当用户回答问题时,响应会用<answer>标签格式化以确保清晰和一致。这种格式有助于清晰区分用户答案与其他对话元素。

示例响应格式:

<answer>
使用Tailwind CSS实现实用优先的样式,获得最大灵活性
</answer>

响应格式的关键特征:

  • <answer>标签包围
  • 保留原始响应的格式
  • 如果响应包含图片则保留图片
  • 返回完整文本,即使是长响应

使用示例

询问实现偏好:

<ask_followup_question>
<question>您希望这个Web应用采用哪种样式方法?</question>
<follow_up>
<suggest>使用Bootstrap快速开发具有一致组件</suggest>
<suggest>使用Tailwind CSS实现实用优先的样式,获得最大灵活性</suggest>
<suggest>使用自定义样式的原生CSS实现完全控制和最小依赖</suggest>
</follow_up>
</ask_followup_question>

请求技术澄清:

<ask_followup_question>
<question>这个应用应该使用什么数据库存储用户数据?</question>
<follow_up>
<suggest>MongoDB实现灵活模式和基于文档的存储</suggest>
<suggest>PostgreSQL实现具有强一致性保证的关系数据</suggest>
<suggest>Firebase实现实时更新和简化的后端管理</suggest>
<suggest>SQLite实现轻量级本地存储,无需外部依赖</suggest>
</follow_up>
</ask_followup_question>

解决需求模糊点:

<ask_followup_question>
<question>应用应如何处理用户认证?</question>
<follow_up>
<suggest>实现带账户验证的邮箱/密码认证</suggest>
<suggest>使用社交登录提供商(Google、GitHub等)快速注册</suggest>
<suggest>同时实现邮箱/密码和社交登录选项</suggest>
</follow_up>
</ask_followup_question>