快速结论:该报错出现在同时使用 AnthropicPromptCachingMiddleware 和 ModelFallbackMiddleware 时,如果主模型(Anthropic)失败并触发回退到 OpenAI 等非 Anthropic 模型,中间件未清理 cache_control 参数,导致 OpenAI API 调用报错。优先排查中间件的顺序。
问题场景
在 LangChain 的 create_agent 中配置了 AnthropicPromptCachingMiddleware(用于提示缓存优化)和 ModelFallbackMiddleware(用于模型回退),主模型为 Anthropic(如 claude-sonnet-4-latest),回退模型为 OpenAI(如 gpt-4o-mini)。当 Anthropic API 因网络问题或限流失败时,ModelFallbackMiddleware 切换到 OpenAI 模型,但 AnthropicPromptCachingMiddleware 添加的 cache_control 参数被传递给了 OpenAI API,导致 TypeError。
报错原文
2025-10-29 09:07:14 [INFO] Chat model invocation: ChatAnthropic
2025-10-29 09:07:20 [ERROR] LLM error: peer closed connection without sending complete message body (incomplete chunked read)
2025-10-29 09:07:20 [INFO] Fallback activated: ChatAnthropic -> ChatOpenAI
2025-10-29 09:07:20 [INFO] Chat model invocation: ChatOpenAI
2025-10-29 09:07:20 [ERROR] LLM error: AsyncCompletions.create() got an unexpected keyword argument 'cache_control'
Traceback (most recent call last):
File "langchain/agents/react/graph.py", line 284, in invoke
result = await fallback_model.ainvoke(messages, config)
File "langchain_openai/chat_models/base.py", line 412, in ainvoke
response = await self.async_client.chat.completions.create(**params)
TypeError: AsyncCompletions.create() got an unexpected keyword argument 'cache_control'
原因分析
根本原因是中间件管道(middleware pipeline)在处理消息时的生命周期问题。AnthropicPromptCachingMiddleware 会在消息中添加 Anthropic 专属的 cache_control 参数。当主模型调用失败后,ModelFallbackMiddleware 触发了回退,但被修改过的消息(包含 cache_control)被直接传递给了回退模型(OpenAI)。由于 unsupported_model_behavior="ignore" 参数仅针对主模型类型检查生效,并不清理已经注入的消息参数,因此回退模型调用时仍然携带了 cache_control,OpenAI 的 AsyncCompletions.create() 不接受该参数,抛出 TypeError。
环境排查
- 确认使用的 LangChain 版本(本 Issue 基于 langchain-ai/langchain 仓库,建议使用最新稳定版)。
- 确认
langchain-anthropic和langchain-openai集成包版本。 - 确认中间件配置的顺序:
AnthropicPromptCachingMiddleware和ModelFallbackMiddleware的顺序。 - 确认
unsupported_model_behavior参数值(当前设为"ignore"仍无法避免问题)。
解决步骤
- 可优先尝试:调整中间件的顺序,将
ModelFallbackMiddleware放在AnthropicPromptCachingMiddleware之前。这样可以确保ModelFallbackMiddleware先识别出当前模型,然后AnthropicPromptCachingMiddleware在得知模型类型后,仅为 Anthropic 模型添加cache_control参数。示例:middleware = [ ModelFallbackMiddleware( fallback_models=[fallback_model] ), AnthropicPromptCachingMiddleware( ttl="5m", unsupported_model_behavior="ignore" ), ] - 注意:此方法为基于 Issue 评论的可行工作区(workaround),并非 LangChain 官方修复。如果你使用的是
deep agents或其他自动注入此中间件的方案,可能需要手动调整中间件配置。 - 长期方案:查看社区是否已更新 LangChain 版本(检查 langchain-ai/langchain 的发布日志),或关注 Issue 中提到的“重新运行 middleware pipeline 以清理 provider 特定状态”的改进思路。
验证方法
调整中间件顺序后,再次运行 agent.invoke(...) 并模拟 Anthropic API 失败(如临时断网或触发限流)。如果回退到 OpenAI 模型返回正常结果且不再出现 TypeError: AsyncCompletions.create() got an unexpected keyword argument 'cache_control',则问题解决。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


