TypeError: AsyncCompletions.create() got an unexpected keyword argument ‘cache_control’

在 LangChain 的 create_agent 中配置了 AnthropicPromptCachingMiddleware (用于提示缓存优化)和 ModelFallbackMiddleware (用于模型回退),主模型为 Anthropic(如 claude-sonnet-4-latest

快速结论:该报错出现在同时使用 AnthropicPromptCachingMiddlewareModelFallbackMiddleware 时,如果主模型(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-anthropiclangchain-openai 集成包版本。
  • 确认中间件配置的顺序:AnthropicPromptCachingMiddlewareModelFallbackMiddleware 的顺序。
  • 确认 unsupported_model_behavior 参数值(当前设为 "ignore" 仍无法避免问题)。

解决步骤

  1. 可优先尝试:调整中间件的顺序,将 ModelFallbackMiddleware 放在 AnthropicPromptCachingMiddleware 之前。这样可以确保 ModelFallbackMiddleware 先识别出当前模型,然后 AnthropicPromptCachingMiddleware 在得知模型类型后,仅为 Anthropic 模型添加 cache_control 参数。示例:
    middleware = [
        ModelFallbackMiddleware(
            fallback_models=[fallback_model]
        ),
        AnthropicPromptCachingMiddleware(
            ttl="5m",
            unsupported_model_behavior="ignore"
        ),
    ]
  2. 注意:此方法为基于 Issue 评论的可行工作区(workaround),并非 LangChain 官方修复。如果你使用的是 deep agents 或其他自动注入此中间件的方案,可能需要手动调整中间件配置。
  3. 长期方案:查看社区是否已更新 LangChain 版本(检查 langchain-ai/langchain 的发布日志),或关注 Issue 中提到的“重新运行 middleware pipeline 以清理 provider 特定状态”的改进思路。

验证方法

调整中间件顺序后,再次运行 agent.invoke(...) 并模拟 Anthropic API 失败(如临时断网或触发限流)。如果回退到 OpenAI 模型返回正常结果且不再出现 TypeError: AsyncCompletions.create() got an unexpected keyword argument 'cache_control',则问题解决。

参考来源

langchain-ai/langchain #33709

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16145

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注