从您的应用程序中调用代理 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从您的应用程序中调用代理

通过使用适用于 A mazon Bedrock 的代理运行时终端节点InvokeAgent提出请求,在应用程序中使用您的代理。

默认情况下,来自的响应InvokeAgent包括一个块,其中包含代理的完整响应,可能需要一段时间才能完成。或者,您可以配置为InvokeAgent以多个较小的区块流式传输响应。这样可以减少代理初始响应的延迟。

直播回复

您可以选择通过在流媒体配置true中将设置streamFinalResponse为来启用响应流式传输(StreamingConfigurations)。响应流包含多个事件,响应的每个部分按顺序分块。

要流式传输响应,请确保代理执行角色包含已配置代理模型的bedrock:InvokeModelWithResponseStream权限。有关更多信息,请参阅 代理服务角色的基于身份的权限。

如果您的代理配置了 Guardrail,则还可以在applyGuardrailInterval中指定StreamingConfigurations,以控制拨出响应字符的ApplyGuardrail呼叫频率(例如,每 50 个字符)。

默认情况下,护栏间隔设置为 50 个字符。如果指定了较大的间隔,则响应将以较大的区块生成,ApplyGuardrail调用次数更少。以下示例显示了为 Hello,我是代理输入字符串生成的响应。

分块响应示例:间隔设置为 3 个字符

'Hel', 'lo, ', 'I am', ' an', ' Age', 'nt'

除最后一个区块外,每个区块至少有 3 个字符。

分块响应示例:间隔设置为 20 个或更多字符

'Hello, I am an Agent'

调用代理

以下Python示例说明如何调用该InvokeAgent操作并显示代理的输出以及该呼叫生成的任何跟踪信息。

调用代理
  1. 按照中的说明创建代理手动创建和配置代理。记下代理的 ID。如有必要,您可以稍后获取身份证。有关更多信息,请参阅 查看关于代理的信息

  2. 按照中的说明为代理创建别名为代理创建别名。记下别名的 ID。如有必要,您可以稍后获取身份证。有关更多信息,请参阅 在 Amazon Bedrock 中查看有关代理别名的信息

  3. 运行以下代码。将的值更新agent_id为代理的 ID,将的值更新alias_id为代理的别名 ID。要流式传输来自代理的响应,请将的值更改streamFinalResponseTrue。您也可以通过更改的值来更改护栏间隔。applyGuardrailInterval

    import boto3 import logging from botocore.exceptions import ClientError logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def invoke_agent(client, agent_id, alias_id, prompt, session_id): response = client.invoke_agent( agentId=agent_id, agentAliasId=alias_id, enableTrace=True, sessionId = session_id, inputText=prompt, streamingConfigurations = { "applyGuardrailInterval" : 20, "streamFinalResponse" : False } ) completion = "" for event in response.get("completion"): #Collect agent output. if 'chunk' in event: chunk = event["chunk"] completion += chunk["bytes"].decode() # Log trace output. if 'trace' in event: trace_event = event.get("trace") trace = trace_event['trace'] for key, value in trace.items(): logging.info("%s: %s",key,value) print(f"Agent response: {completion}") if __name__ == "__main__": client=boto3.client( service_name="bedrock-agent-runtime" ) agent_id = "AGENT_ID" alias_id = "ALIAS_ID" session_id = "MY_SESSION_ID" prompt = "Prompt to send to agent" try: invoke_agent(client, agent_id, alias_id, prompt, session_id) except ClientError as e: print(f"Client error: {str(e)}") logger.error("Client error: %s", {str(e)})