Amazon Bedrock Workshop实战:深入理解Agents调用机制

Amazon Bedrock Workshop实战:深入理解Agents调用机制

引言

在构建基于大语言模型(LLM)的应用程序时,Amazon Bedrock提供的Agents功能是一个强大的工具,它能够将知识库检索、API调用和LLM推理能力无缝集成。本文将通过一个餐厅预订代理的实际案例,深入探讨如何有效调用Amazon Bedrock Agents,并展示其核心功能与最佳实践。

Agents基础概念

Amazon Bedrock Agents由两个主要组件构成:

  1. 管理客户端(bedrock-agent):负责Agent和知识库的创建、更新、删除等管理操作
  2. 运行时客户端(bedrock-agent-runtime):处理Agent的实际调用和知识库检索

本文重点介绍运行时客户端的invoke_agent API,这是与Agent交互的核心接口。

环境准备

在开始调用Agent前,我们需要完成以下准备工作:

import boto3
import logging
import uuid
from datetime import datetime

# 初始化客户端
bedrock_agent_runtime_client = boto3.client('bedrock-agent-runtime')
dynamodb = boto3.resource('dynamodb')

# 配置日志
logging.basicConfig(
    format='[%(asctime)s] p%(process)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s', 
    level=logging.INFO
)
logger = logging.getLogger(__name__)

Agent调用辅助函数

我们使用一个精心设计的辅助函数invoke_agent_helper来简化Agent调用过程。这个函数支持以下关键功能:

def invoke_agent_helper(query, session_id, agent_id, alias_id, 
                       enable_trace=False, session_state=None):
    """
    参数说明:
    - query: 用户查询文本
    - session_id: 会话标识符,用于维护对话上下文
    - agent_id: Agent的唯一标识
    - alias_id: Agent版本的别名
    - enable_trace: 是否启用执行追踪
    - session_state: 会话状态信息(包含prompt属性等)
    """
    # 实际调用逻辑...

实战案例:餐厅预订Agent

1. 知识库查询

首先测试Agent从知识库中检索儿童菜单信息的能力:

session_id = str(uuid.uuid1())
query = "What is in the childrens menu?"
response = invoke_agent_helper(query, session_id, agent_id, alias_id)
print(response)

关键点:每次调用使用唯一的session_id会创建新的对话上下文。

2. 上下文保持

利用相同的session_id进行后续查询,Agent会自动保持对话上下文:

query = "Which of those options are vegetarian?"
response = invoke_agent_helper(query, session_id, agent_id, alias_id)
print(response)

3. 动作组调用

测试Agent通过API创建预订记录的能力:

query = "Hi, I am Maria. I want to create a booking for 4 people, at 9pm on the 5th of May 2024."
response = invoke_agent_helper(query, session_id, agent_id, alias_id)
print(response)

验证机制:通过查询DynamoDB确认预订记录已正确创建:

table = dynamodb.Table('restaurant_bookings')
response = table.scan()
pd.DataFrame(response['Items'])

4. 会话属性应用

使用promptSessionAttributes传递用户上下文信息:

session_id = str(uuid.uuid1())
query = "I want to create a booking for 2 people, at 8pm on the 6th of May 2024."
session_state = {
    "promptSessionAttributes": {
        "name": "John"
    }
}
response = invoke_agent_helper(query, session_id, agent_id, alias_id, 
                             session_state=session_state)
print(response)

5. 时间上下文处理

结合当前日期处理相对时间查询:

today = datetime.today().strftime('%b-%d-%Y')
query = "I want to create a booking for 2 people, at 8pm tomorrow."
session_state = {
    "promptSessionAttributes": {
        "name": "John",
        "today": today
    }
}
response = invoke_agent_helper(query, session_id, agent_id, alias_id, 
                             session_state=session_state)
print(response)

6. 高级查询能力

展示Agent的推理和知识检索能力:

# 过敏友好建议
query = "I am allergic to shrimps. What can I eat at this restaurant?"
response = invoke_agent_helper(query, str(uuid.uuid1()), agent_id, alias_id)
print(response)

# 儿童饮食建议
query = "What do you have for kids that don't like fries?"
response = invoke_agent_helper(query, str(uuid.uuid1()), agent_id, alias_id)
print(response)

高级功能探索

执行追踪(Trace)

启用追踪功能查看Agent的决策过程:

query = "What are the desserts on the adult menu?"
response = invoke_agent_helper(query, str(uuid.uuid1()), agent_id, alias_id, 
                             enable_trace=True)
print(response)

追踪信息会显示Agent的完整推理链条,包括知识库检索和API调用决策。

多语言支持

Agent原生支持多语言交互,无需额外配置:

# 西班牙语查询
query = "¿Podrías reservar una mesa para dos 25/07/2024 a las 19:30"
session_state = {
    "promptSessionAttributes": {
        "Nombre": "Gabriela"
    }
}
response = invoke_agent_helper(query, str(uuid.uuid1()), agent_id, alias_id,
                             session_state=session_state)
print(response)

最佳实践总结

  1. 会话管理:合理使用session_id维护对话上下文
  2. 属性传递:利用promptSessionAttributes增强Agent的上下文感知
  3. 验证机制:对关键操作(如数据库修改)实施结果验证
  4. 追踪调试:开发阶段启用Trace功能优化Agent行为
  5. 多语言设计:利用LLM原生多语言能力扩展应用场景

通过本教程,您应该已经掌握了Amazon Bedrock Agents的核心调用机制和实际应用技巧。这些技术可以广泛应用于客服系统、智能助手、数据查询等各种基于大语言模型的场景。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪俊炼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值