👁 240 次阅读
gpt-6-astra 绑定 function tools 后为何未自动路由到 Responses API?
来源:[langchain-ai/langchain Issue #40346]现象描述
使用ChatOpenAI(model="gpt-6-astra") 并通过 bind_tools 绑定函数工具后调用,抛出 openai.BadRequestError,HTTP 状态码 400,错误消息为:
> Function tools with reasoning_effort are not supported for gpt-6-astra in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to ‘none’
复现代码如下:
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
@tool
def lookup(q: str) -> str:
"""Look up information."""
return f"result for {q}"
model = ChatOpenAI(model="gpt-6-astra", max_tokens=16)
model.bind_tools([lookup]).invoke(
"Reply with the single word OK. Do not call any tool."
)
调用路径停留在 /v1/chat/completions 上,而非模型所需的 /v1/responses 端点。报错信息中建议的 reasoning_effort="none" 变通方案同样失败,因为 gpt-6-astra 不支持 none 值。
不带 tools 的 gpt-6-astra 普通调用经 Chat Completions 可成功,因此故障仅与 function tools 的组合相关。
背景原因
根据 issue 讨论,根因在于 LangChain 的 OpenAI 集成中,_RESPONSES_API_ONLY_PREFIXES 列表当前包含 gpt-5.6-sol 但不包含 gpt-6-astra。该列表决定了哪些模型前缀在涉及 tool call 时自动路由到 Responses API。由于 gpt-6-astra 未被纳入,function tool 调用默认停留在 Chat Completions 路径上,除非用户显式设置 use_responses_api=True。
关联 issue 梳理:
- #40133:通过把
gpt-5.6-sol加入_RESPONSES_API_ONLY_PREFIXES处理了同一失败模式。 - #40330:为 gpt-6-astra 增加了 reasoning-effort profile,但未同步更新 Responses API 路由逻辑。
- #38860:在探索为较早 GPT 模型族的 function tools 做条件式 Responses 路由,尚未合入,且不覆盖 gpt-6-astra。
60357692 上做了三组对照实验,结果如下:
| 测试场景 | 路由端点 | 结果 |
| gpt-6-astra + function tool(默认配置) | /v1/chat/completions | 400 错误 |
| gpt-6-astra + function tool + use_responses_api=True | /v1/responses | 200 成功 |
| gpt-5.6-sol + function tool(默认配置) | /v1/responses | 200 成功 |
排查或量化方法 | ||
| 当遇到 400 错误且消息包含 “Function tools with reasoning_effort are not supported” 时,可按以下步骤排查: | ||
1. 确认模型名:检查 ChatOpenAI(model=...) 中的模型字符串是否以 gpt-6-astra 开头。 | ||
2. 确认是否绑定了工具:检查调用链中是否存在 bind_tools 或 with_structured_output 等涉及 function calling 的操作。 | ||
3. 确认当前路由端点:查看请求日志或抓包,确认请求发往的是 /v1/chat/completions 还是 /v1/responses。 | ||
4. 验证不带工具是否正常:移除 bind_tools 后单独调用,确认模型本身可用。 | ||
5. 检查 LangChain 版本:确认 langchain_openai 版本,该 issue 报告环境为 langchain_openai 1.6.2、openai 3.8.0、Python 3.12.10。 | ||
完整解决方案 | ||
临时变通方案(立即可用) | ||
在初始化 ChatOpenAI 时显式设置 use_responses_api=True,强制路由到 Responses API: | ||
| ||
| 该方案经 issue 提交者验证,返回 200。 | ||
根治方案(等待合入) | ||
据 issue 讨论,根治方案与 #40133 一致:在 libs/partners/openai/ 下的 base.py 中,将 gpt-6-astra 加入 _RESPONSES_API_ONLY_PREFIXES,使 _model_prefers_responses_api 默认将 function-tool 调用路由到 /v1/responses。同时扩展 test_model_prefers_responses_api 测试用例,覆盖 base 模型名与带日期快照的模型名。不带 tool 的调用行为不变。 | ||
| 该 issue 当前状态为 open,尚未分配,无 PR 提交,无维护者回复。唯一评论来自 RauhanAhmed(2026-09-10 08:10 UTC),表示愿意认领并请求 assign,方案与上述一致。 | ||
参数或对比表格 | ||
| 配置项 | 值 | 说明 |
| model | gpt-6-astra | 触发问题的模型名 |
| max_tokens | 16 | 复现用最小 token 数 |
| use_responses_api | True | 临时变通,强制 Responses API |
| reasoning_effort | 不可设为 “none” | gpt-6-astra 不支持该值 |
| langchain_openai | 1.6.2 | 报告时版本 |
| openai SDK | 3.8.0 | 报告时版本 |
| Python | 3.12.10 | 报告时版本 |
常见错误排查
1. 设置reasoning_effort="none" 后仍报错:gpt-6-astra 不支持 none 值,该变通无效,应改用 use_responses_api=True。
2. 仅部分调用失败,普通对话正常:不带 tools 的 gpt-6-astra 调用经 Chat Completions 可成功,故障仅与 function tools 组合相关,需检查是否涉及 bind_tools 或结构化输出。
3. 升级 langchain_openai 后问题未解决:截至 2026-09-10,该 issue 仍为 open 状态,官方尚未合入统一方案,升级版本不会自动修复。
4. 使用 with_structured_output 也报错:结构化输出同样涉及 function calling 路径,与 bind_tools 触发相同路由问题,解决方案一致。
5. gpt-5.6-sol 无此问题:#40133 已将 gpt-5.6-sol 加入 _RESPONSES_API_ONLY_PREFIXES,gpt-5.6-sol 的 function tool 调用默认路由到 /v1/responses,因此不受影响。
实践建议
- 当前使用 gpt-6-astra 配合 function tools 时,务必在
ChatOpenAI初始化中设置use_responses_api=True。 - 监控 LangChain GitHub 仓库中 issue #40346 的状态变化,关注是否被 assign 及 PR 合入。
- 在 CI 测试中增加 gpt-6-astra + tools 的路由验证用例,防止回归。
- 若项目中使用多个 OpenAI 模型,可封装工厂函数,对已知需要 Responses API 的模型前缀自动设置
use_responses_api=True,减少手动配置遗漏。 - 关注关联 issue #38860 的进展,该 issue 探索条件式 Responses 路由,若合入可能提供更通用的自动路由机制。
FAQ
Q:为什么报错信息建议设置reasoning_effort="none" 但实际不行?
A:报错信息是 OpenAI API 的通用提示,建议通过设置 reasoning_effort 为 none 来避免 function tools 与推理参数的冲突。但 gpt-6-astra 模型本身不支持 none 值,因此该建议对该模型无效。正确的变通方式是设置 use_responses_api=True。
Q:use_responses_api=True 会影响不带工具的调用吗?
A:据 issue 讨论,不带 tool 的 gpt-6-astra 调用经 Chat Completions 可成功。设置 use_responses_api=True 会将所有调用路由到 /v1/responses,对不带工具的调用行为不产生负面影响,但请求路径会发生变化。如需保持不带工具的调用走 Chat Completions,可考虑仅在有工具的调用场景下使用该参数。
Q:该问题何时能修复?
A:截至 2026-09-10,该 issue 为 open 状态,尚未分配,无 PR,无维护者回复。社区开发者 RauhanAhmed 已表示愿意认领并请求 assign,但尚未获批准。修复时间取决于维护者的分配决策。
Q:能否通过配置 OpenAI API base URL 来绕过?
A:据 issue 讨论,问题根因在于 LangChain 内部的路由逻辑(_RESPONSES_API_ONLY_PREFIXES 列表未包含 gpt-6-astra),而非 API base URL 配置。修改 base URL 无法解决路由端点选择问题。
Q:gpt-5.6-sol 和 gpt-6-astra 的路由行为有何差异?
A:gpt-5.6-sol 已通过 #40133 加入 _RESPONSES_API_ONLY_PREFIXES,function tool 调用默认路由到 /v1/responses,无需额外配置。gpt-6-astra 尚未加入该列表,function tool 调用默认停留在 /v1/chat/completions,需手动设置 use_responses_api=True 才能正常工作。
🔗 相关阅读(你可能还想看)
📄 Gemini Omni 1.2 Flash 发布:视频降价30%、原生15秒,单条成本只贵5分钱
谷歌 11 月 5 日开放 Gemini Omni 1.2 Flash:720p 视频每秒 0.07 美元,比上代降 3
📄 GPT-6 Cyber 发布:121 万美元,948 条通往 root 的路
OpenAI 发布 GPT-6 Cyber:在 Linux 内核上跑出 948 个本地提权利用,整轮 API 成本 12
📄 Anthropic冲刺IPO:170亿营收、8950亿算力承诺、首次在招股书披露递归自我改进风险
📄 Anthropic IPO招股书曝光:单季营收170亿美元背后的8954亿美元算力账单
📄 阿里千问接入 Apple Intelligence:中国版 iPhone 的 AI 时刻来了
📄 苹果AI中国落地靴子落地:千问接入Apple Intelligence,11月4日开测
📄 苹果官宣:Apple Intelligence 国行版落地,阿里千问深度接入 Siri 与系统写作工具
苹果官宣 Apple Intelligence 国行版 11 月 4 日开测、12 月随 iOS 27.3 正式上线。阿
📄 Anthropic 递交 S-1 启动 IPO:Claude 母公司估值剑指 2 万亿美元
📄 Cerebras 公开万亿参数模型部署方案:59 块晶圆跑 3T 参数,推理 2000 tokens/秒