# 工具调用

https://modelportal.ai/docs/tool-calling?lang=zh

三种协议的工具调用都按各自官方格式书写：OpenAI 的 `tools` 与 `tool_calls`、Anthropic 的 `tools` 与 `tool_use` / `tool_result`、Gemini 的 `functionDeclarations` 与 `functionCall` / `functionResponse`。

```bash
curl https://modelportal.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "messages": [{"role": "user", "content": "上海今天天气怎么样？"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "查询城市天气",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}
      }
    }]
  }'
```

模型决定调用工具时，响应里的 `choices[0].message.tool_calls` 给出函数名和参数。你执行函数后，把结果作为 `role: "tool"` 的消息（带上 `tool_call_id`）追加到 `messages` 再请求一次。

## 平台怎么处理

- 请求带了工具定义时，只路由到声明支持工具调用的报价；一个都没有时返回 400 `unsupported_parameter`。模型详情页的能力标签和报价列表里能看到谁支持。
- 承接的报价用另一种协议时，平台做协议转换，你收到的仍是你所用协议格式的工具调用。
- 用 Anthropic 协议做多轮工具调用、并回传带签名的 thinking 块时，后续请求只会路由到产生签名的那个报价；它不可用时返回 422，原因代码 `session`，提示你开启新会话。
