工具调用
工具调用允许模型要求应用运行一个具名函数,例如查询天气、查询数据库、调用内部服务或执行业务逻辑。模型不会亲自运行工具,而是返回结构化工具调用;应用解析参数、运行函数,并把结果发回模型,以便模型继续对话。
AISIX AI 网关通过 OpenAI 兼容 chat completions 路径承载这些工具调用请求,并在 OpenAI 风格和 Anthropic 风格工具格式之间进行有针对性的转换。应用可以把服务提供方凭证和模型路由留在 AISIX 后面,同时保留 SDK 或智能体框架期望的工具循环。
本指南将通过 AISIX 发送工具定义,查看后续工具循环,并选择与客户端格式匹配的请求路由。
准备工作
请先准备以下内容:
- 一个可以处理代理请求的 AISIX 网关。
- 一个可以访问该模型别名的调用方 API Key。
- 一个由支持工具调用的服务提供方和模型支撑的模型别名。
发送工具调用请求
下面示例使用 OpenAI 兼容 chat completions 路径。它发送函数定义,并要求模型调用该函数:
curl -sS -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer YOUR_CALLER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-prod",
"messages": [
{"role": "user", "content": "What is the weather in Paris? Use the tool if needed."}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
}
],
"tool_choice": {
"type": "function",
"function": {"name": "get_weather"}
}
}'
响应仍保持 OpenAI 兼容格式。你应在 assistant message 中看到工具调用:
{
"choices": [
{
"message": {
"role": "assistant",
"tool_calls": [
{
"id": "call_***",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\":\"Paris\"}"
}
}
]
}
}
]
}
如果模型返回普通文本,请先确认选中的上游模型支持工具调用,并且请求确实要求工具调用。
继续工具调用循环
模型返回工具调用后,应用解析工具参数、运行函数,并通过同一个 chat completions 路由发回结果。请使用 assistant message 返回的 tool_call_id,让模型能够将工具结果关联到原始调用。
将工具结果作为后续消息发送:
curl -sS -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer YOUR_CALLER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-prod",
"messages": [
{"role": "user", "content": "What is the weather in Paris? Use the tool if needed."},
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_***",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\":\"Paris\"}"
}
}
]
},
{
"role": "tool",
"tool_call_id": "call_***",
"content": "Sunny, 21 C."
}
]
}'
对于后续请求,网关会保持相同的调用方认证和模型别名行为。服务提供方凭证和上游模型 ID 仍留在 AISIX 内部。
选择工具调用路径
请选择与你的应用当前客户端格式匹配的路径:
| 客户端格式 | 代理路径 | 行为 |
|---|---|---|
| OpenAI 兼容工具 | /v1/chat/completions | 适用于 OpenAI SDK、OpenAI 风格智能体框架,以及期望 OpenAI 风格工具调用和后续工具消息的应用。 |
| Anthropic 风格工具 | /v1/messages | 适用于已经 围绕 Anthropic Messages 构建的客户端。Anthropic 上游比转换后的上游能保留更多原生行为。 |
| 模型化路由之外的服务提供方原生工具 | 服务提供方透传 | 仅当 AISIX 一等路由尚未建模所需服务提供方端点时使用。 |
对于生产环境工具循环,建议尽可能优先选择服务提供方原生工具调用路径,并验证计划使用的客户端、服务提供方、模型、流式模式和工具 schema 的完整组合。
查看工具调用行为
当客户端格式和上游服务提供方格式一致时,工具调用行为最可预测。Anthropic 原生上游比转换后的上游能保留更丰富的 Anthropic 行为,而 OpenAI 兼容上游会直接保留 OpenAI 风格工具循环。
发往 Anthropic 上游模型的 OpenAI 风格请求,可以将函数工具、工具选择、assistant 工具调用和后续工具消息转换为 Anthropic Messages API 结构。
发往非 Anthropic 上游的 Anthropic 风格请求,可以将顶层 tools 和 tool choice 转换为 OpenAI 风格函数工具。当非 Anthropic 上游返回工具调用时,AISIX 可以将其渲染回 Anthropic 风格 tool-use 块。
跨服务提供方转换可以覆盖常见工具定义、工具选择、assistant 工具调用和后续工具结果,但不保证完全等价。流式工具调用还可能以部分参数片段形式到达,因此在生产环境依赖转换后的工具调用前,需要验证准确的流式行为。
下一步
你已经了解 AISIX 如何处理工具调用请求和转换后的工具定义。默认 OpenAI 风格聊天路径请参见 OpenAI 兼容 API。Anthropic 风格请求请参见 Anthropic 风格 Messages API。