news 2026/9/3 4:14:29

Spring AI 支持 Agent 人机交互:让 AI 先问清楚再行动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring AI 支持 Agent 人机交互:让 AI 先问清楚再行动

传统的 AI 交互往往遵循一个固定模式:你提供问题,AI 基于假设给出答案。

当这些假设与你的实际需求不符时,你就会陷入反复修正的循环,每一个错误的假设都意味着返工——浪费时间和上下文。

如果你的 AI Agent 能够在提供答案之前主动询问明确的问题呢?

AskUserQuestionTool 正是为此而生。它让 AI Agent 在回答之前主动提出澄清性问题,以交互方式收集需求,从一开始就创建与你实际需求完全对齐的方案。

Spring AI 的实现将这种交互模式带入 Java 生态系统,确保 LLM 的可移植性——只需定义一次问题处理器,就能在 OpenAI、Anthropic、Google Gemini 或任何其他支持的模型中使用。

这是 Spring AI Agentic Patterns 系列的第二部分。

现在我们将深入研究 AskUserQuestionTool,它将 AI Agent 转变为以交互方式收集需求的协作伙伴。

AskUserQuestionTool 的工作原理

AskUserQuestionTool 是 spring-ai-agent-utils 工具包的一部分,是对 Claude Code 的 AskUserQuestion 工具的可移植 Spring AI 实现,使 AI Agent 能够在执行过程中向用户提出多选问题。

该工具遵循问答工作流:

• AI 生成问题- Agent 判断需要输入并构建问题(每个问题包含问题文本、标题、2-4 个选项和 multiSelect 标志),然后调用 askUserQuestion 工具函数

• 用户提供答案- 你的自定义处理器接收这些问题,通过 UI 呈现它们,收集答案,然后将答案返回给 AI

• 提出更多问题- 如有必要,重复步骤 1 和 2 以收集更多用户反馈

• AI 基于上下文继续- Agent 使用答案提供定制化的解决方案

每个问题都支持:

• 单选或多选- 选择一个选项或组合多个选项

• 自由文本输入- 用户始终可以在预定义选项之外提供自定义文本

• 丰富的上下文- 每个选项都包含描述,解释其影响和权衡

可移植性与模型无关 - 无供应商锁定:与绑定到特定 LLM 平台的实现不同,这个 Spring AI 实现可跨多个 LLM 提供商使用,让你无需重写代码或问题处理器即可切换模型。

与 MCP Elicitation 的关系:AskUserQuestionTool 作为 Agent 本地的交互式用户输入方法,在概念上类似于 MCP Elicitation 能力。虽然 MCP Elicitation 使 MCP 服务器能够通过 JSON schemas 请求结构化的用户输入,但 AskUserQuestionTool 直接在你的 Agent 内部提供相同的交互模式,无需 MCP 服务器。Spring AI 还通过 @McpElicitation 注解为服务器驱动场景提供完整的 MCP Elicitation 支持。

实战案例:旅行推荐助手

以下是该工具在 ask-user-question-demo 的旅行推荐用例中的实际运作方式:

用户:我下次应该去哪个欧洲国家旅行?

AI(兴趣):你旅行时的主要兴趣是什么?

1. 历史与文化 - 博物馆、历史遗迹、建筑

2. 自然与户外 - 徒步、海滩、山地、国家公园

3. 美食与饮品 - 烹饪体验、葡萄酒产区、美食之旅

4. 城市与都市 - 城市探索、购物、夜生活

(输入用逗号分隔的数字,或输入自定义文本)

用户选择:1,2

AI(季节):你计划什么时候旅行?

1. 春季 - 3月至5月 - 温和的气温,较少的游客

2. 夏季 - 6月至8月 - 温暖的天气,旅游旺季

3. 秋季 - 9月至11月 - 较凉爽的温度,秋色

4. 冬季 - 12月至2月 - 圣诞市场,冬季运动

(输入一个数字,或输入自定义文本)

用户选择:3

AI(预算):这次旅行的大致预算水平是多少?

...

AI 回答:根据你对秋季旅行的偏好,以及对历史、文化和自然的兴趣,在中等预算下,既想去热门景点又想探索小众目的地,以下是值得考虑的优秀欧洲国家:

1. 葡萄牙- 里斯本的历史街区、杜罗河谷的葡萄酒收获、阿尔加维海岸线。价格实惠,秋季气温宜人。

2. 希腊- 古代遗迹、美丽的岛屿,秋季仍然适合游泳,游客较少。

3. 斯洛文尼亚- 布莱德湖、朱利安阿尔卑斯山、壮观的秋色。比邻近的奥地利或意大利更实惠。

Agent 在提供个性化推荐之前,通过交互式问题收集了全面的需求——无需假设,无需迭代。

快速上手

1. 添加依赖:
<dependency> <groupId>org.springaicommunity</groupId> <artifactId>spring-ai-agent-utils</artifactId> <version>0.3.0</version></dependency>
2. 配置你的 Agent:
ChatClient chatClient = chatClientBuilder .defaultTools(AskUserQuestionTool.builder() .questionHandler(this::handleQuestions) .build()) .build();
3. 实现你的 QuestionHandler,可以参考下文的控制台或 Web 示例。

当 Agent 需要澄清时会自动调用该工具,并使用答案提供定制化的解决方案。

QuestionHandler 示例

基于控制台的 QuestionHandler

一个基于控制台的实现:

基于 Web 的 QuestionHandler

对于 Web 应用,使用 CompletableFuture 来桥接异步 UI 交互与同步 QuestionHandler API。通过 WebSocket/SSE 向前端发送问题,并在 future.get() 上阻塞。当用户通过 REST 端点提交答案时完成 future。

总结

AskUserQuestionTool 将 AI Agent 从基于假设的响应者转变为在行动前收集需求的协作伙伴,从第一次尝试就提供与你需求完全对齐的答案。

本系列即将推出的内容:

• 使用 TodoWriteTool 进行任务管理- 透明地跟踪多步骤工作流

• 分层子 Agent- 构建具有专门子 Agent 的复杂多 Agent 架构

开始使用 ask-user-question-demo 进行实验吧。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!​

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示

​因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

四、AI大模型商业化落地方案

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:42:10

基于设备特征的响应式 UI 构建:Flutter for OpenHarmony 中的智能布局实践

在 OpenHarmony 生态中&#xff0c;应用可能运行于手机、平板、车机甚至智慧屏等多种设备。这些设备不仅屏幕尺寸差异巨大&#xff0c;用户交互方式也各不相同。因此&#xff0c;“一套代码适配所有终端” 的理想&#xff0c;不能仅靠固定布局实现&#xff0c;而需引入基于设备…

作者头像 李华
网站建设 2026/9/2 23:42:40

使用conda创建的虚拟环境在哪个文件下

当使用 conda 创建虚拟环境(如py312)时,环境文件默认存储在 Anaconda 或 Miniconda 的安装目录下的envs文件夹中。具体路径取决于操作系统和安装位置: 1. 默认存储路径 Windows: C:\Users\你的用户名\anaconda3\envs\py312 (若安装在其他位置,替换C:\Users\你的用户名\…

作者头像 李华
网站建设 2026/9/2 23:42:01

Python爬虫

一、Python 爬虫核心概念Python 爬虫本质是模拟浏览器向目标网站发送请求&#xff0c;获取网页数据后解析提取有用信息的程序&#xff0c;核心价值是批量、自动化获取公开网络数据&#xff0c;适用于数据分析、舆情监控、信息聚合等场景。核心流程&#xff08;四步走&#xff0…

作者头像 李华
网站建设 2026/9/3 3:38:38

让终端渲染社稷简单色变——记我和DeepSeek关于ANSI-COLOR的『论道』:“色域状态机”(DeepSeek-R1企业微信版基于对话自成文章)

文本染色史主流&#xff0c;我悟色域恸本质。 笔记模板由python脚本于2026-01-24 12:35:47创建&#xff0c;本篇笔记适合正确研究终端渲染技法的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pyt…

作者头像 李华
网站建设 2026/9/3 2:00:42

动态上采样新范式:DySample 加持下的 YOLOv8 目标检测性能进阶指南

文章目录 YOLOv8进阶优化:基于DySample动态上采样算子的目标检测性能提升实战指南 一、DySample核心技术原理解析 二、DySample与YOLOv8的集成实现 三、渐进式训练策略 四、性能验证与效果分析 五、部署优化方案 代码链接与详细流程 YOLOv8进阶优化:基于DySample动态上采样算…

作者头像 李华
网站建设 2026/9/2 23:01:40

python校车校园车辆停车管理系统的设计与分析vue3

目录校车及校园车辆停车管理系统设计与分析&#xff08;Python Vue3&#xff09;系统架构设计核心功能模块关键技术实现系统特色开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;校车及校园车…

作者头像 李华