Skip to content

ask_followup_question

ask_followup_question 工具通过发起针对性提问收集完成任务所需的补充信息,实现交互式沟通。

参数说明

本工具支持以下入参:

  • question(必选):向用户发起的具体提问内容
  • follow_up(可选):用于引导用户回复的建议答案列表,包含2-4条答案,每条答案需包裹在<suggest>标签内

功能概述

该工具在 VJSP 与用户间搭建对话交互界面,当遇到需求模糊或决策节点时,可收集用户的澄清说明、补充细节或偏好设置。每个提问均可附带建议答案,提升交互效率。

适用场景

  • 原始请求缺失核心信息时
  • VJSP 需在多种有效实现方案中选择时
  • 推进任务需要明确技术细节或用户偏好时
  • VJSP 遇到需解决的需求歧义时
  • 补充上下文可显著提升解决方案质量时

核心特性

  • 提供结构化信息收集方式,不中断业务流程
  • 附带建议答案,减少用户输入操作并引导回复方向
  • 跨交互环节留存对话历史与上下文信息
  • 支持包含图片和代码片段的回复内容
  • 作为「全域可用」工具集的组件,支持所有运行模式
  • 允许用户直接指导实现方案的决策过程
  • 采用<answer>标签格式化回复内容,与常规对话内容区分
  • 工具调用成功时,重置连续错误计数器

限制说明

  • 单次工具调用仅支持发起一个具体提问
  • 建议答案在用户界面中以可选选项形式展示
  • 无法强制用户按结构化格式回复,仍支持自由输入
  • 过度调用会降低任务完成效率,造成交互体验碎片化
  • 建议答案需为完整内容,不得包含需用户编辑的占位符
  • 无内置的用户回复校验机制
  • 未提供强制特定答案格式的实现机制

执行流程

调用ask_followup_question工具后,将按以下流程执行:

  1. 参数校验:验证必选参数question是否存在,并检查可选建议答案的有效性

    • 校验提问文本是否已提供
    • 基于fast-xml-parser解析库,解析follow_up参数中的建议答案
    • 即使仅包含一条建议答案,也将其标准化为数组格式
  2. JSON格式转换:将XML结构的参数转换为标准化JSON格式,用于界面展示

    typescript
    {
      question: "此处为向用户发起的提问",
      suggest: [
        { answer: "建议答案1" },
        { answer: "建议答案2" }
      ]
    }
  3. 界面集成

    • 通过ask("followup", ...)方法将JSON结构传递至UI层
    • 在用户界面中展示可点击的建议答案按钮
    • 实现「选择建议答案/自定义输入」的交互式体验
  4. 回复收集与处理

    • 捕获用户的文本输入及回复中包含的图片内容
    • 将用户回复包裹在<answer>标签内,反馈至智能助手
    • 保留用户回复中包含的所有图片内容
    • 将用户回复添加至对话历史,维持会话上下文
    • 工具调用成功时,重置连续错误计数器
  5. 异常处理

    • 通过计数器跟踪连续操作错误次数
    • 工具调用成功时,重置该计数器
    • 输出针对性的错误提示信息:
      • 参数缺失:“缺失必选参数'question'”
      • XML解析失败:“操作解析失败:[具体错误信息]”
      • 格式无效:“操作XML格式不合法”
    • 内置防护机制,当必选参数缺失时阻止工具执行
    • 发生错误时,递增连续错误计数器

交互流程

提问-回复的交互周期遵循以下流程:

  1. 识别信息缺口:VJSP 识别出推进任务所需的缺失信息
  2. 创建针对性提问:VJSP 编写清晰、目标明确的提问内容
  3. 拟定建议答案:VJSP 生成相关的建议答案(可选,建议执行)
  4. 调用工具:智能助手传入提问和可选建议答案,调用本工具
  5. 界面展示:提问和建议答案以交互元素形式展示给用户
  6. 用户回复:用户选择建议答案或输入自定义回复
  7. 消息处理:系统处理部分提交和完整提交的消息
    • 针对流式回复,按数据块到达顺序逐块处理
    • 针对完整消息,一次性处理全部回复内容
    • 无论消息是否分块,均保持状态一致性
  8. 回复处理:系统将回复内容包裹在<answer>标签中,并保留图片内容
  9. 上下文集成:将用户回复添加至对话历史
  10. 任务续行:VJSP 基于新获取的信息继续执行任务

应用示例

  • 开发 Web 应用时,VJSP 可询问用户偏好的样式框架(Bootstrap、Tailwind、自定义CSS)
  • 开发 API 时,VJSP 可询问用户选择的认证方式(JWT、OAuth、API密钥)
  • 重构代码时,VJSP 可询问用户的优化优先级(性能优先/可读性优先)
  • 搭建数据库时,VJSP 可询问用户的具体表结构设计偏好
  • 开发自定义功能时,VJSP 可询问用户对功能行为的具体预期
  • 排查错误时,VJSP 可询问用户的具体环境配置细节

回复格式

用户回复提问时,内容将以<answer>标签格式化,保证格式的清晰性与一致性。该格式可有效区分用户的回复内容与其他对话元素。

回复格式示例:


选用Tailwind CSS,基于工具类优先的样式方案实现最大灵活性

回复格式核心特征:

  • 内容被<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>接入社交登录服务商(谷歌、GitHub等),实现快速注册登录</suggest>
<suggest>同时实现邮箱/密码认证和社交登录两种方式</suggest>
</follow_up>
</ask_followup_question>