通过Lambda调用Bedrock Agent时重复旧输入的问题排查
AWS Lambda调用Bedrock Agent请求滞后的问题排查与解决
可能的原因及解决方法
1. Lambda容器复用导致全局变量状态残留
Lambda会复用执行容器,若在函数全局作用域初始化Bedrock客户端、存储请求/响应变量,后续调用会复用这些变量的旧值,直接引发请求滞后。
解决方法:将客户端初始化、请求参数定义移至Lambda处理函数内部,确保每次调用都重新创建实例和参数。
错误示例(全局作用域存在风险):
import boto3 import uuid # 全局初始化,容器复用时会保留旧状态 bedrock_agent = boto3.client('bedrock-agent-runtime') last_query = "" def lambda_handler(event, context): global last_query session_id = str(uuid.uuid4()) last_query = event['query'] response = bedrock_agent.invoke_agent( agentId='YOUR_AGENT_ID', agentAliasId='YOUR_ALIAS_ID', sessionId=session_id, inputText=last_query ) # 处理响应...
正确示例(函数内部初始化):
import boto3 import uuid def lambda_handler(event, context): # 每次调用重新初始化客户端 bedrock_agent = boto3.client('bedrock-agent-runtime') current_query = event['query'] session_id = str(uuid.uuid4()) # 调用Agent传入当前查询 response = bedrock_agent.invoke_agent( agentId='YOUR_AGENT_ID', agentAliasId='YOUR_ALIAS_ID', sessionId=session_id, inputText=current_query ) # 获取响应后再结束会话 bedrock_agent.invoke_agent( agentId='YOUR_AGENT_ID', agentAliasId='YOUR_ALIAS_ID', sessionId=session_id, inputText="", endSession=True ) # 解析响应内容 output = "" for chunk in response['completion']: if 'chunk' in chunk: output += chunk['chunk']['bytes'].decode('utf-8') return {'result': output}
2. 请求参数传递错误
检查代码中是否正确从event对象获取当前查询,避免误用上一次的请求参数:
- 确认
event['query']每次都能拿到最新测试用例输入,无旧值覆盖情况; - 调用
invoke_agent时,inputText必须传入当前查询内容,而非缓存的变量。
3. 会话管理API调用顺序错误
若使用endSession=True,需确保在获取当前请求响应之后调用该接口。提前结束会话会导致当前请求的会话状态异常,引发后续处理混乱。
同时可添加日志验证每次生成的sessionId是否为全新UUID,排除重复使用的可能。
4. Lambda测试用例缓存问题
Lambda内置测试用例可能存在缓存,建议每次测试时手动修改测试事件内容,或创建新测试用例,确保传入的查询为最新值。
内容的提问来源于stack exchange,提问作者RadiantAine
相关产品推荐
相关产品推荐

