尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
当 AI Agent 调用工具时,用户 ID 从哪来?——Spring AI ToolContext 传值实战
一个绕不开的问题你在用 Spring AI 开发 Agent 应用,一切都很美好——模型能理解自然语言,能自主决定调用哪个工具、传什么参数,直到你遇到了这样一个场景:@Tool(description="查询用户账户余额")StringgetBalance(StringaccountType){returnbankService.getBalance(userId,accountType);// ^^^^^^// 这个 userId 从哪来?}用户 ID 不能让 LLM 填。它属于运行时上下文,是请求进来时应用层已经确定的信息,不应该、也不能让模型来"猜"。类似的场景很多:用户 ID、租户 ID——多租户系统中的安全边界会话 ID——需要关联当前对话上下文权限 Token——工具需要携带鉴权信息访问外部 API请求来源、渠道标识——工具行为需要根据来源差异化这类参数有一个共同特征:它们属于"确定的上下文",不是 LLM 应该生成的"推理参数"。如果把它们混入工具的输入参数让模型来填,轻则幻觉(模型编造一个 userId),重则越权(模型填了别人的 userId)。Spring AI 提供了ToolContext机制来优雅地解决这个问题。ToolContext 是什么一句话概括:ToolContext 是一个由应用层注入、对 LLM 不可见的键值对容器,在工具执行时自动传递给工具方法。它的核心设计思想:┌──────────────┐ toolContext(Map) ┌──────────────┐ │ Application │ ──────────────────────────▶│ Tool │ │ (应用层) │ userId, tenantId, ... │ (工具方法) │ └──────────────┘ └──────────────┘ ┌──────────────┐ toolInput(参数) ┌──────────────┐ │ LLM │ ─────────────────────▶│ Tool │ │ (大语言模型) │ accountType, ... │ (工具方法) │ └──────────────┘ └──────────────┘LLM 负责填充的:工具的业务参数(如accountType)——模型根据用户意图推理得出应用层负责注入的:上下文参数(如userId)——应用层在调用时确定,透传给工具两条路径,互不干扰。LLM 完全感知不到 ToolContext 的存在,既不会在工具的 JSON Schema 中看到它,也不会试图为它生成值。具体用法Spring AI 提供了两种等价的工具定义方式,都支持 ToolContext:方式一:@Tool注解式——在方法签名中声明 ToolContext将ToolContext作为方法的最后一个参数,Spring AI 会自动注入:classCustomerTools{@Tool(description="查询客户信息")CustomergetCustomerInfo(Longid,ToolContexttoolContext){// 从 ToolContext 中取出应用层注入的租户 IDStringtenantId=(String)toolContext.getContext().get("tenantId");returncustomerRepository.findById(id,tenantId);}@Tool(description="查询账户余额")StringgetBalance(StringaccountType,ToolContexttoolContext){StringuserId=(String)toolContext.getContext().get("userId");returnbankService.getBalance(userId,accountType);}}注意:ToolContext参数对模型是隐藏的。模型只看到id和accountType,不会看到ToolContext。方式二:BiFunctionT, ToolContext, R编程式——函数式定义等价地,用BiFunction定义工具逻辑,第二个参数就是ToolContext:publicclassAccountInfoToolimplementsBiFunctionString,ToolContext,String{@OverridepublicStringapply(Stringquery,ToolContexttoolContext){StringuserId=(String)toolContext.getContext().get("userId");StringtenantId=(String)toolContext.getContext().get("tenantId");if(userId==null){return"用户未登录,无法查询";}returnaccountService.query(userId,tenantId,query);}}// 构建 ToolCallbackToolCallbackaccountTool=FunctionToolCallback.builder("get_account_info",newAccountInfoTool()).description("查询当前用户的账户信息").inputType(String.class).build();两种方式完全等价,选择哪种取决于你的编码风格:注解式更简洁,适合工具逻辑简单的场景编程式更灵活,适合需要复杂构造或复用的场景在调用端注入 ToolContext定义好工具后,在调用时注入上下文数据。根据入口不同,方式略有差异。ChatClient 入口Stringresponse=ChatClient
RELATED

相关推荐

specs/features/DragAndDrop.spec.md中的测试用例

specs/features/DragAndDrop.spec.md中的测试用例

specs/features/DragAndDrop.spec.md中的测试用例 【免费下载链接】obsidian-outliner Work with your lists like in Workflowy or RoamResearch 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-outliner 列表应随子列表一起移动光标应在移动列表后保持位置列表…

📅 2026/9/22 4:59:38
软件测试|测试环境如何配置

软件测试|测试环境如何配置

在软件开发生命周期中,软件测试是确保软件质量的关键环节。而搭建一个稳定、可靠的测试环境则是软件测试成功的基石。本文将详细阐述软件测试工程师如何搭建测试环境,并强调在搭建过程中需要注意的细节。01测试环境搭建步骤1)需求分析在开始搭建测试环境…

📅 2026/9/17 17:02:43
2026年美业门店管理系统深度测评

2026年美业门店管理系统深度测评

开一家美业门店,选对一套美业门店管理系统,有时候比选址还重要。 我这话不是夸张。过去三年我帮朋友和客户参谋过不下40家门店的数字化改造,从30平米的美甲工作室到3000平米的连锁美容会所,见过被系统拖垮的门店,也见…

📅 2026/9/19 5:26:48
MORE NEWS

更多资讯

📰

2026年9月了解企业微信开通方式,快速搭建企业组织架构

企业微信作为企业通讯与办公工具,支持与微信互通。2026年9月,了解其开通方式与组织架构搭建流程,有助于企业提升内外协同效率。本文围绕注册认证、通讯录配置、基础功能启用及客户连接能力展开,结合行业案例与常见问题&#xff0c…

📰

微信小程序实验室管理源码部署指南:Java+MySQL环境配置与联调避坑

简介:这是一套面向高校计算机相关专业学生与Java初学者的小程序毕业设计/课程设计完整源码,围绕实验室管理场景实现管理员与用户双端功能。管理员可管理用户信息、教学实践、学生签到、设备信息与预约、课程表、预约课程、预定实验室及系统配置&#xff…

📰

漫步的近义词图解原理

3步搞定漫步近义词图解原理实战项目 刚把网上抄来的代码跑起来,报错提示 ModuleNotFoundError 或者逻辑死循环,是不是瞬间头大?这种“复制来的代码跑不通不知道怎么调”的困境,比写新代码更折磨人。很多教程只给结果,不给底层逻辑…

📰

5个高频考点拆解广告过滤大师新手避坑指南

5个高频考点拆解广告过滤大师新手避坑指南 配置环境就卡半天,代码跑不通还得从头查日志,这种痛苦谁懂?做广告过滤这块,很多新手都栽在细节里,明明逻辑看着没问题,结果线上误杀率飙升,或者性能直接拉胯。今天咱们不整虚的,直接拆【广告过滤大师】这个…

📰

无锡亨得利官方服务指南:门店地址、电话、项目收费价格、售后质保最新说明(2026年完整版)

对于无锡的腕表爱好者而言,腕表的保养、故障检修、外观修复,都需要找到规范可靠的钟表服务网点。在无锡地区,表主可以前往无锡亨得利官方维修服务中心,门店坐落于江苏省无锡市梁溪区人民中路139号恒隆广场办公楼 1 座1804单元。如…

📰

Sea财报亏损收窄与外资调仓:东南亚互联网投资逻辑转向

1. 从一份财报和一次资本腾挪说起Sea这家公司,常年混东南亚互联网圈子的人不会陌生。它旗下有电商平台Shopee、游戏业务Garena,还有数字金融板块SeaMoney,算是东南亚互联网基础设施级别的存在。最近它交出了一份亏损小于预期的财报&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬