Spring AI 工具调用:从 Function Calling 到受控执行
Spring AI 工具调用:从 Function Calling 到受控执行
模型可以根据对话判断何时需要外部信息,并生成一个工具调用请求,例如查询订单状态或搜索知识库。但模型本身并没有直接访问数据库或执行 Java 方法的权限;工具由应用注册和执行,应用决定允许模型做什么。
1. 一次工具调用的流程
1 | |
有些材料把这个模式称作 Function Calling;Spring AI 文档中常用 Tool Calling。名称会变化,关键机制是模型提出结构化调用请求,应用负责真正执行。
2. 用窄范围工具表达能力
概念示例:
1 | |
工具应表达清楚、范围有限,并由服务端从可信上下文取得用户身份。不要把“执行任意 SQL”“运行任意 Shell 命令”暴露给模型。上面的类只展示接口设计,具体注解包名和 ChatClient 调用方式要与项目锁定的 Spring AI 版本一致。
3. 参数仍然是不可信输入
模型生成的参数可能缺失、格式错误或与用户意图不符。应用需要做类型校验、范围校验、权限校验和业务状态校验。模型说“用户已经确认”并不构成授权证明;删除、付款、发信等有副作用的操作,应由明确的用户确认流程控制。
查询工具也要限制返回字段。工具结果可能包含个人信息、内部标识或提示注入文本,只返回完成任务所需的数据,并对日志和模型上下文做数据最小化。
4. 超时、重试与幂等
外部服务调用可能超时。对只读工具可以按策略重试;写入工具要使用幂等键,避免模型重复请求时创建多条记录或重复执行副作用。为每次调用设置超时、并发限制和审计记录,并明确错误是交给模型解释,还是由应用返回固定错误。
5. 工具结果不要盲目信任
工具可能返回过时、不完整或恶意构造的文本。应用可返回结构化结果和来源信息,模型只负责整理表达。涉及关键状态的最终决策应由业务服务校验,不能让生成文本本身成为交易或权限事实。
6. 小结
工具调用不是把模型变成拥有系统权限的程序,而是让模型在应用提供的有限能力中提出请求。权限、参数校验、身份上下文、幂等和审计都应由应用负责。
参考:Spring AI Tool Calling 文档。Spring AI API 仍在演进,示例应按项目采用的 BOM 版本校对。

