ask_followup_question
ask_followup_question 工具通过发起针对性提问收集完成任务所需的补充信息,实现交互式沟通。
参数说明
本工具支持以下入参:
question(必选):向用户发起的具体提问内容follow_up(可选):用于引导用户回复的建议答案列表,包含2-4条答案,每条答案需包裹在<suggest>标签内
功能概述
该工具在 VJSP 与用户间搭建对话交互界面,当遇到需求模糊或决策节点时,可收集用户的澄清说明、补充细节或偏好设置。每个提问均可附带建议答案,提升交互效率。
适用场景
- 原始请求缺失核心信息时
- VJSP 需在多种有效实现方案中选择时
- 推进任务需要明确技术细节或用户偏好时
- VJSP 遇到需解决的需求歧义时
- 补充上下文可显著提升解决方案质量时
核心特性
- 提供结构化信息收集方式,不中断业务流程
- 附带建议答案,减少用户输入操作并引导回复方向
- 跨交互环节留存对话历史与上下文信息
- 支持包含图片和代码片段的回复内容
- 作为「全域可用」工具集的组件,支持所有运行模式
- 允许用户直接指导实现方案的决策过程
- 采用
<answer>标签格式化回复内容,与常规对话内容区分 - 工具调用成功时,重置连续错误计数器
限制说明
- 单次工具调用仅支持发起一个具体提问
- 建议答案在用户界面中以可选选项形式展示
- 无法强制用户按结构化格式回复,仍支持自由输入
- 过度调用会降低任务完成效率,造成交互体验碎片化
- 建议答案需为完整内容,不得包含需用户编辑的占位符
- 无内置的用户回复校验机制
- 未提供强制特定答案格式的实现机制
执行流程
调用ask_followup_question工具后,将按以下流程执行:
参数校验:验证必选参数
question是否存在,并检查可选建议答案的有效性- 校验提问文本是否已提供
- 基于
fast-xml-parser解析库,解析follow_up参数中的建议答案 - 即使仅包含一条建议答案,也将其标准化为数组格式
JSON格式转换:将XML结构的参数转换为标准化JSON格式,用于界面展示
typescript{ question: "此处为向用户发起的提问", suggest: [ { answer: "建议答案1" }, { answer: "建议答案2" } ] }界面集成
- 通过
ask("followup", ...)方法将JSON结构传递至UI层 - 在用户界面中展示可点击的建议答案按钮
- 实现「选择建议答案/自定义输入」的交互式体验
- 通过
回复收集与处理
- 捕获用户的文本输入及回复中包含的图片内容
- 将用户回复包裹在
<answer>标签内,反馈至智能助手 - 保留用户回复中包含的所有图片内容
- 将用户回复添加至对话历史,维持会话上下文
- 工具调用成功时,重置连续错误计数器
异常处理
- 通过计数器跟踪连续操作错误次数
- 工具调用成功时,重置该计数器
- 输出针对性的错误提示信息:
- 参数缺失:“缺失必选参数'question'”
- XML解析失败:“操作解析失败:[具体错误信息]”
- 格式无效:“操作XML格式不合法”
- 内置防护机制,当必选参数缺失时阻止工具执行
- 发生错误时,递增连续错误计数器
交互流程
提问-回复的交互周期遵循以下流程:
- 识别信息缺口:VJSP 识别出推进任务所需的缺失信息
- 创建针对性提问:VJSP 编写清晰、目标明确的提问内容
- 拟定建议答案:VJSP 生成相关的建议答案(可选,建议执行)
- 调用工具:智能助手传入提问和可选建议答案,调用本工具
- 界面展示:提问和建议答案以交互元素形式展示给用户
- 用户回复:用户选择建议答案或输入自定义回复
- 消息处理:系统处理部分提交和完整提交的消息
- 针对流式回复,按数据块到达顺序逐块处理
- 针对完整消息,一次性处理全部回复内容
- 无论消息是否分块,均保持状态一致性
- 回复处理:系统将回复内容包裹在
<answer>标签中,并保留图片内容 - 上下文集成:将用户回复添加至对话历史
- 任务续行: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>