实验 9 - 创建具有记忆功能的代理

在本实验中,我们提供了一个使用 Amazon Bedrock 新的记忆功能的旅行代理的示例。

在创建代理时,我们可以使用 memoryConfiguration 参数启用记忆功能。然后,我们可以使用 memoryId 调用代理来跟踪会话并总结它们到我们的记忆中。

在本示例中,我们将创建一个具有以下架构的测试代理:

下面的代码显示了如何在使用 boto3 SDK 的 create_agent 函数创建代理时配置记忆功能。我们应该定义 enabledMemoryTypes(目前只有 SESSION_SUMMARY 可用)和 storageDays

    response = bedrock_agent_client.create_agent(
        agentName=agent_name
        agentResourceRoleArn=agent_role['Role']['Arn']
        description=agent_description
        idleSessionTTLInSeconds=1800
        foundationModel=agent_foundation_model
        instruction=agent_instruction
        memoryConfiguration={
            "enabledMemoryTypes": ["SESSION_SUMMARY"]
            "storageDays": 30
        }
    )

在调用代理时,我们需要传递 memoryId 参数以及 sessionId

    # 调用代理 API
    agent_response = bedrock_agent_runtime_client.invoke_agent(
        inputText="用户查询代理"
        agentId="<AGENT_ID>"
        agentAliasId="<AGENT_ALIAS_ID>"
        sessionId="<SESSION_ID>"
        enableTrace=True or False
        endSession=True or False
        memoryId="我们的记忆 ID"
        ...
    )

一旦我们使用 endSession 标志设置为 True 调用代理,与相同 sessionId 的对话就会被总结并可用于代理的记忆。我们可以使用 bedrock-agent-runtime boto3 SDK 客户端的 get_agent_memory 来获取代理的可用记忆。

    memory_content=bedrock_agent_runtime_client.get_agent_memory(
        agentAliasId="<AGENT_ALIAS_ID>"
        agentId="<AGENT_ID>"
        memoryId="<与调用代理时使用的相同记忆 ID>"
        memoryType='SESSION_SUMMARY'
    )

我们还可以使用 delete_agent_memory 删除某个记忆 ID 的全部代理记忆。

    response = bedrock_agent_runtime_client.delete_agent_memory(
        agentAliasId="<AGENT_ALIAS_ID>" 
        agentId="<AGENT_ID>"
        memoryId="<与调用代理时使用的相同记忆 ID>"
    )

试一试

在 AWS 活动中

如果我们是通过 workshop studio 参加研讨会的, 现在请转到 SageMaker Studio 中的 JupyterLab。

在 JupyterLab UI 中导航到 bedrock-agents-workshop/09-create-agent-with-memory/09-create-agent-with-memory.ipynb

自主学习

这里有一个笔记本,让我们可以尝试上述内容: 创建具有记忆功能的代理