Tool Calling 使用指南
Spring AI Alibaba 提供了丰富的 Tool Calling 扩展实现,允许 AI 模型与外部 API 和工具进行交互,增强模型的能力。本文档将详细介绍 Tool Calling 的使用方法,并列出所有支持的扩展实现。
目录
概述
Tool Calling(工具调用,也称为 Function Calling)是 AI 应用中的常见模式,允许模型与一组 API 或工具进行交互,增强模型的能力。
工具主要用于:
- 信息检索:从外部数据源检索信息,如数据库、Web 服务、文件系统或 Web 搜索引擎。例如,获取当前天气、检索最新新闻、查询数据库等。
- 执行操作:在软件系统中执行特定操作,如发送电子邮件、在数据库中创建新记录、提交表单或触发工作流。例如,预订航班、填写表单、生成代码等。
Spring AI Alibaba 扩展了 Spring AI 的 Tool Calling 功能,提供了多种预构建的工具实现,包括:
- 搜索引擎(百度搜索、Google Scholar、Tavily Search 等)
- 翻译服务(阿里翻译、百度翻译、Google 翻译等)
- 地图服务(高德地图、百度地图、腾讯地图等)
- 数据服务(天气、快递、新闻等)
- 开发工具(GitHub、JSON 处理、正则表达式等)
- 其他工具(时间、Python 执行、敏感词过滤等)
详细使用说明
Python Tool 示例
PythonTool 使用 GraalVM polyglot 在沙箱环境中执行 Python 代码。这个工具允许 AI 代理执行 Python 代码片段并获取结果。
依赖配置
使用 Maven 添加依赖:
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-tool-calling-python</artifactId>
<version>${version}</version>
</dependency>
注意:Python Tool 需要 GraalVM polyglot 依赖,这些依赖已作为可选依赖包含。如果需要使用,请确保 GraalVM polyglot 在 classpath 中。
自动配置
Python Tool 默认启用,会自动注册为 ToolCallback 并可供 AI 代理使用。如果需要禁用,可以在配置文件中设置:
spring:
ai:
alibaba:
python:
tool:
enabled: false
基本使用
示例 1:在 ChatClient 中使用
import com.alibaba.cloud.ai.agent.python.tool.PythonTool;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PythonToolService {
@Autowired
private ChatModel chatModel;
@Autowired
private PythonTool pythonTool;
public String executeCalculation(String question) {
// 创建 ChatClient 并添加 Python Tool
ChatClient chatClient = ChatClient.builder(chatModel)
.tools(pythonTool.createPythonToolCallback(PythonTool.DESCRIPTION))
.build();
// 使用工具进行对话
String response = chatClient.prompt(question)
.call()
.content();
return response;
}
}
示例 2:直接使用 PythonTool
import com.alibaba.cloud.ai.agent.python.tool.PythonTool;
import org.springframework.ai.chat.model.ToolContext;
public class DirectPythonToolUsage {
public void executePythonCode() {
PythonTool pythonTool = new PythonTool();
// 创建请求
PythonTool.PythonRequest request = new PythonTool.PythonRequest("2 + 2");
// 执行 Python 代码
String result = pythonTool.apply(request, new ToolContext());
System.out.println("Result: " + result); // 输出: Result: 4
}
}