技术背景
在使用OpenRouter API调用大语言模型时,经常会遇到工具调用(Tool Calling)的需求。工具调用是现代AI应用中的重要功能,允许模型调用外部工具来执行特定任务,如搜索、计算、API调用等。
然而,在实际使用过程中,我发现了一个重要问题:并非所有模型都支持工具调用功能。特别是当尝试使用 openai/gpt-5-chat 模型进行工具调用时,会收到错误提示:
No endpoints found that support tool use.
这个错误提示让人困惑,因为GPT-5作为OpenAI的最新模型,理论上应该支持工具调用功能。为了深入了解这个问题,我决定通过OpenRouter的API来查询所有模型的工具调用支持情况。
技术思路
OpenRouter提供了模型列表API,可以获取所有可用模型的详细信息,包括每个模型支持的参数类型。通过分析这些信息,我们可以:
- 获取完整的模型列表:通过OpenRouter API获取所有可用模型
- 分析工具调用支持:检查每个模型的
supported_parameters字段是否包含tools - 对比不同模型:特别关注GPT-5系列模型的工具调用支持情况
- 提供解决方案:为开发者推荐支持工具调用的替代模型
实现方案
环境准备
import requests
import pandas as pd
API配置
# OpenRouter API Key
OPENROUTER_API_KEY = "your-api-key-here"
# OpenRouter 模型列表接口
url = "https://openrouter.ai/api/v1/models"
# 请求头配置
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Accept": "application/json"
}
数据获取与分析
# 发送API请求
response = requests.get(url, headers=headers)
# 检查请求结果
if response.status_code != 200:
raise Exception(f"请求失败:{response.status_code} - {response.text}")
data = response.json()
# 提取模型信息
models = data.get("data", [])
df = pd.DataFrame([
{
"id": m["id"],
"name": m.get("name"),
"description": m.get("description", ""),
"supports_tools": "tools" in (m.get("supported_parameters") or []),
"supported_parameters": ", ".join(m.get("supported_parameters", []))
}
for m in models
])
实现代码
以下是完整的代码实现:
import requests
import pandas as pd
# 🔧 请在此填写你的 OpenRouter API Key
OPENROUTER_API_KEY = "***"
# OpenRouter 模型列表接口
url = "https://openrouter.ai/api/v1/models"
# 发送请求
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
# 检查请求结果
if response.status_code != 200:
raise Exception(f"请求失败:{response.status_code} - {response.text}")
data = response.json()
# 提取模型信息
models = data.get("data", [])
df = pd.DataFrame([
{
"id": m["id"],
"name": m.get("name"),
"description": m.get("description", ""),
"supports_tools": "tools" in (m.get("supported_parameters") or []),
"supported_parameters": ", ".join(m.get("supported_parameters", []))
}
for m in models
])
# ✅ 显示前几条结果
print("模型列表(前20条):")
print(df.head(20))
# ✅ 筛选支持 tools 的模型
df_tools = df[df["supports_tools"] == True]
print(f"\n共有 {len(df_tools)} 个模型支持工具调用:")
print(df_tools)
# ✅ 查找 GPT-5 相关模型
gpt5_rows = df[df["id"].str.contains("openai/gpt-5", na=False)]
print(f"\nGPT-5 系列模型工具调用支持情况:")
if not gpt5_rows.empty:
for _, row in gpt5_rows.iterrows():
print(f"ID: {row['id']}")
print(f"Name: {row['name']}")
print(f"Supports Tools: {row['supports_tools']}")
print(f"Supported Parameters: {row['supported_parameters']}")
print("---")
else:
print("未找到 GPT-5 相关模型")
关键发现
通过运行上述代码,我得到了以下重要发现:
GPT-5系列模型工具调用支持情况
表1:GPT-5系列模型工具调用支持对比
| 模型ID | 模型名称 | 支持工具调用 | 支持的参数 |
|---|---|---|---|
openai/gpt-5-image | OpenAI: GPT-5 Image | ✅ 是 | frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p |
openai/gpt-5-pro | OpenAI: GPT-5 Pro | ✅ 是 | include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools |
openai/gpt-5-codex | OpenAI: GPT-5 Codex | ✅ 是 | include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools |
openai/gpt-5-chat | OpenAI: GPT-5 Chat | ❌ 否 | max_tokens, response_format, seed, structured_outputs |
openai/gpt-5 | OpenAI: GPT-5 | ✅ 是 | include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools |
openai/gpt-5-mini | OpenAI: GPT-5 Mini | ✅ 是 | include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools |
openai/gpt-5-nano | OpenAI: GPT-5 Nano | ✅ 是 | include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools |
核心问题分析
关键发现:openai/gpt-5-chat 是GPT-5系列中唯一不支持工具调用的模型!
这个发现解释了为什么在使用 openai/gpt-5-chat 时会收到 "No endpoints found that support tool use" 的错误提示。
支持工具调用的模型统计
- 总模型数量:336个
- 支持工具调用的模型:190个(约56.5%)
- 不支持工具调用的模型:146个(约43.5%)
实践建议
1. 选择合适的GPT-5模型
如果你需要使用GPT-5进行工具调用,建议使用以下模型:
openai/gpt-5:标准版本,功能最全面openai/gpt-5-pro:专业版本,适合复杂任务openai/gpt-5-mini:轻量版本,成本较低openai/gpt-5-nano:超轻量版本,适合简单任务
2. 避免使用不支持工具调用的模型
以下模型不支持工具调用,需要避免在需要工具调用的场景中使用:
openai/gpt-5-chat:仅支持基础对话功能
3. 其他支持工具调用的优秀模型
除了GPT-5系列,还有许多其他优秀的模型支持工具调用:
表2:其他支持工具调用的优秀模型
| 模型ID | 模型名称 | 特点 |
|---|---|---|
anthropic/claude-haiku-4.5 | Anthropic: Claude Haiku 4.5 | 快速高效,支持工具调用 |
qwen/qwen3-vl-8b-thinking | Qwen: Qwen3 VL 8B Thinking | 多模态,推理优化 |
openai/o3-deep-research | OpenAI: o3 Deep Research | 深度研究专用 |
nvidia/llama-3.3-nemotron-super-49b-v1.5 | NVIDIA: Llama 3.3 Nemotron Super 49B V1.5 | 49B参数,推理能力强 |
4. 开发建议
-
模型选择策略:
- 在开发前先查询模型的工具调用支持情况
- 建立模型能力矩阵,记录每个模型的功能特性
- 为不同场景准备备选模型
-
错误处理:
- 在代码中添加工具调用支持检查
- 提供清晰的错误提示和替代方案
- 实现自动降级到支持工具调用的模型
-
成本优化:
- 根据任务复杂度选择合适的模型
- 对于简单任务,优先使用轻量级模型
- 监控API调用成本,优化模型选择策略
扩展方向
1. 自动化模型能力检测
可以开发一个自动化工具,定期检查OpenRouter上所有模型的能力支持情况,并生成报告:
def check_model_capabilities():
"""定期检查模型能力支持情况"""
# 实现模型能力检测逻辑
pass
2. 智能模型推荐系统
基于任务类型和复杂度,自动推荐最适合的模型:
def recommend_model(task_type, complexity_level):
"""根据任务类型和复杂度推荐模型"""
# 实现智能推荐逻辑
pass
3. 模型性能监控
建立模型性能监控系统,跟踪不同模型在工具调用场景下的表现:
def monitor_model_performance():
"""监控模型在工具调用场景下的性能"""
# 实现性能监控逻辑
pass
总结
通过这次深入分析,我们发现了一个重要问题:openai/gpt-5-chat 不支持工具调用功能,这是GPT-5系列中唯一不支持工具调用的模型。这个发现对于开发者来说非常重要,因为它解释了为什么在某些场景下会遇到工具调用失败的问题。
关键要点:
- 模型能力差异:不同模型的功能支持存在显著差异
- 工具调用支持:只有约56.5%的模型支持工具调用
- GPT-5系列:除了
gpt-5-chat外,其他GPT-5模型都支持工具调用 - 替代方案:有多种支持工具调用的优秀模型可供选择
建议:在开发AI应用时,务必先了解目标模型的功能支持情况,避免因模型能力限制导致的功能异常。通过本文提供的代码和分析方法,开发者可以更好地选择合适的模型,提高应用的稳定性和用户体验。
本文基于OpenRouter API的实际数据进行分析,所有结论均经过验证。建议开发者在选择模型时参考最新的API文档和模型能力说明。