调用AWS Bedrock代理时Lambda报错:BedrockRuntime无invoke_agent属性
解决AWS Lambda调用Bedrock代理时的 'invoke_agent' 属性错误
问题根源
你当前代码用了bedrock-runtime客户端,但调用Bedrock代理的invoke_agent方法属于**bedrock-agent-runtime**专属客户端——bedrock-runtime仅用于调用基础大模型,没有代理调用的相关方法。另外你手动拼接URL、构造请求体的方式也不符合boto3客户端的调用规范。
修改后的代码
import json import boto3 # 初始化Bedrock Agent Runtime客户端 bedrock_agent_client = boto3.client("bedrock-agent-runtime") def lambda_handler(event, context): # 从事件中提取参数 agent_id = event.get('agentId') agent_alias_id = event.get('agentAliasId') session_id = event.get('sessionId') input_text = event.get('inputText', '') enable_trace = event.get('enableTrace', False) end_session = event.get('endSession', False) session_state = event.get('sessionState', {}) try: # 调用Bedrock代理 response = bedrock_agent_client.invoke_agent( agentId=agent_id, agentAliasId=agent_alias_id, sessionId=session_id, inputText=input_text, enableTrace=enable_trace, endSession=end_session, sessionState=session_state ) # 处理流式响应(Bedrock Agent调用返回的是流式数据) agent_response = "" trace_info = {} attributions = {} for chunk in response['completion']: if 'chunk' in chunk: agent_response += chunk['chunk']['bytes'].decode('utf-8') if 'trace' in chunk: trace_info = chunk['trace'] if 'attribution' in chunk: attributions = chunk['attribution'] # 返回处理后的结果 return { 'statusCode': 200, 'body': json.dumps({ 'agentResponse': agent_response, 'traceInfo': trace_info, 'attributions': attributions }) } except Exception as e: print(f"Error: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'message': '调用Bedrock代理出错', 'error': str(e) }) }
额外注意事项
- 给Lambda的执行角色添加
bedrock:InvokeAgent权限,确保具备调用代理的权限 - 检查Lambda运行环境的boto3版本,必须是1.34.0及以上(Bedrock Agents的boto3支持从该版本开始)。如果Lambda默认版本过低,需在部署包中打包最新的boto3和botocore依赖
- 确保传入的
agentId、agentAliasId、sessionId参数与控制台中代理的信息完全一致
内容的提问来源于stack exchange,提问作者Daanish
相关产品推荐
相关产品推荐

