解决macOS Docker环境下OpenHands对接AWS Bedrock的'output'密钥错误
Docker部署OpenHands对接AWS Bedrock:主应用调用litellm出现KeyError: 'output'
环境与场景
在macOS上通过Docker部署OpenHands并对接AWS Bedrock,容器内单独用litellm调用anthropic.claude-v2模型可正常返回结果,但主应用运行时持续触发litellm.APIConnectionError,具体错误为KeyError: 'output'。
Docker启动命令
docker run -it --pull=always \ -e SANDBOX_RUNTIME_CONTAINER_IMAGE="docker.all-hands.dev/all-hands-ai/runtime:0.12-nikolaik" \ -e AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID" \ -e AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY" \ -e AWS_REGION="us-east-1" \ -e LLM_PROVIDER="bedrock" \ -e MODEL_ID="anthropic.claude-v2" \ -e BASE_URL="https://bedrock.us-east-1.amazonaws.com" \ -p 3000:3000 \ --add-host=host.docker.internal:host-gateway \ --name openhands-app-bedrock \ docker.all-hands.dev/all-hands-ai/openhands:latest
容器内测试成功步骤
执行以下命令进入容器并测试:
docker exec -it openhands-app-bedrock /bin/bash
进入ipython后执行:
from litellm import completion response = completion(model="anthropic.claude-v2", messages=[{"role": "user", "content": "Hello, how are you?"}]) print(response.choices[0].message.content) # 输出:I'm doing well, thanks for asking!
主应用核心错误详情
18:19:44 - openhands:ERROR: retry_mixin.py:47 - litellm.APIConnectionError: 'output' Traceback (most recent call last): File "/app/.venv/lib/python3.12/site-packages/litellm/main.py", line 2564, in completion response = bedrock_converse_chat_completion.completion( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/chat/converse_handler.py", line 421, in completion return litellm.AmazonConverseConfig()._transform_response( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/chat/converse_transformation.py", line 390, in _transform_response message: Optional[MessageBlock] = completion_response["output"]["message"] ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^ KeyError: 'output'
解决方案建议
- 修正BASE_URL配置:Bedrock的Converse接口正确端点应为
https://bedrock-runtime.us-east-1.amazonaws.com,而非基础bedrock端点。修改启动命令中的BASE_URL参数为该值。 - 核对主应用调用参数:容器内手动调用使用
completion接口正常,主应用可能误用converse接口或传递的请求格式(如messages结构、额外参数)不符合Claude模型要求,对比两者的调用参数差异。 - 统一litellm版本:检查主应用依赖的litellm版本(查看
requirements.txt或pyproject.toml),与容器内手动测试的版本(执行pip show litellm)保持一致,优先使用稳定版本。 - 排查API响应内容:提高主应用日志级别,打印Bedrock返回的完整响应,确认是否因权限不足、调用限制等问题返回错误结构而非正常
output字段。
内容的提问来源于stack exchange,提问作者0x90
相关产品推荐
相关产品推荐

