跳转到主要内容
OpenAI 风格的 tools / tool_choice 在所有支持 chat 的服务商上都 工作。网关会翻译到上游的原生工具调用形态。

最小示例

from openai import OpenAI
client = OpenAI(base_url="https://api.orcarouter.ai/v1", api_key="sk-orca-...")

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

resp = client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Weather in Paris?"}],
    tools=tools,
)
print(resp.choices[0].message.tool_calls)

跨服务商行为

同一段客户端代码可作用于所有支持 chat 的服务商——OrcaRouter 把你的 OpenAI 风格 tools 适配到各上游的原生形态:
  • OpenAI / Grok / DeepSeek:原生目标——tools 保持 OpenAI 形态在 线上传输
  • Anthropic:OpenAI tools 映射为 Anthropic 的 tools + input_schema, 保留 JSON Schema 的 propertiesrequired
  • Gemini:OpenAI tools 映射为 Gemini 的 tools[].functionDeclarations,其中 name / description / parameters 透传

Gemini 保留函数名

在 Gemini 目标上,网关识别三个保留的 function.name 值,并把它们 转换为 Gemini 的原生内置工具,而不是自定义函数声明:
保留名映射到
googleSearchGemini Google 搜索接地(详见联网搜索
codeExecutionGemini 内置代码执行
urlContextGemini 内置 URL 上下文工具
使用这些保留名的函数不需要 parameters——传 {type: "function", function: {name: "googleSearch"}} 即可,剩下交给 Gemini。请给你自己的自定义工具取别的名字,避免与这些内置项冲突。