Amazon Bedrock Workshop实战:为智能代理关联知识库

Amazon Bedrock Workshop实战:为智能代理关联知识库

【免费下载链接】amazon-bedrock-workshop This is a workshop designed for Amazon Bedrock a foundational model service. 【免费下载链接】amazon-bedrock-workshop 项目地址: https://gitcode.com/GitHub_Trending/am/amazon-bedrock-workshop

本文是Amazon Bedrock Workshop系列教程的一部分,重点讲解如何为已创建的智能代理关联知识库,使其能够回答基于文档内容的问题。

技术背景

Amazon Bedrock的智能代理(Agent)功能允许开发者创建能够执行复杂任务的AI助手。当我们需要代理能够回答基于特定文档内容的问题时,可以通过关联知识库(Knowledge Base)来实现。知识库会将文档内容转换为向量存储在向量数据库中,使代理能够快速检索相关信息。

实战目标

我们将扩展一个餐厅预订助手的功能,使其不仅能处理预订请求,还能回答关于餐厅菜单的问题。具体步骤包括:

  1. 创建知识库及其基础设施
  2. 上传菜单文档并同步到知识库
  3. 更新代理权限以访问知识库
  4. 将知识库与代理关联
  5. 测试代理的知识检索能力

详细实现步骤

1. 准备工作

首先需要加载之前创建代理时保存的变量,并初始化必要的AWS客户端:

%store -r  # 加载之前保存的变量

# 初始化AWS客户端
iam_client = boto3.client('iam')
bedrock_agent_client = boto3.client('bedrock-agent')
bedrock_agent_runtime_client = boto3.client('bedrock-agent-runtime')
s3_client = boto3.client('s3')

2. 设置知识库参数

定义知识库的基本信息:

knowledge_base_name = f'{agent_name}-kb'
knowledge_base_description = "包含餐厅菜单的知识库"
bucket_name = f'{agent_name}-{suffix}'  # 存储文档的S3桶

3. 创建知识库基础设施

使用Amazon OpenSearch Serverless作为向量数据库,创建知识库:

kb = KnowledgeBasesForAmazonBedrock()
kb_id, ds_id = kb.create_or_retrieve_knowledge_base(
    knowledge_base_name, 
    knowledge_base_description, 
    bucket_name
)

注意:OpenSearch Serverless集合的创建可能需要几分钟时间。

4. 上传并同步文档

将包含菜单的文档上传到S3,然后同步到知识库:

# 上传文档到S3
def upload_directory(path, bucket_name):
    for root, dirs, files in os.walk(path):
        for file in files:
            file_path = os.path.join(root, file)
            s3_client.upload_file(file_path, bucket_name, file)

upload_directory("kb_documents", bucket_name)

# 同步知识库
kb.synchronize_data(kb_id, ds_id)

5. 测试知识库

验证知识库是否能正确回答问题:

response = bedrock_agent_runtime_client.retrieve_and_generate(
    input={"text": "儿童菜单中有哪些主菜?"},
    retrieveAndGenerateConfiguration={
        "type": "KNOWLEDGE_BASE",
        "knowledgeBaseConfiguration": {
            'knowledgeBaseId': kb_id,
            "modelArn": f"arn:aws:bedrock:{region}::foundation-model/{agent_foundation_model}",
            "retrievalConfiguration": {
                "vectorSearchConfiguration": {"numberOfResults":5}
            }
        }
    }
)
print(response['output']['text'])

6. 更新代理权限

为代理添加访问知识库的权限:

kb_policies_statements = [
    {
        "Sid": "QueryKB",
        "Effect": "Allow",
        "Action": ["bedrock:Retrieve", "bedrock:RetrieveAndGenerate"],
        "Resource": [f"arn:aws:bedrock:{region}:{account_id}:knowledge-base/{kb_id}"]
    }
]

policy = iam_client.create_policy(
    PolicyName=f"{agent_name}-kb-{kb_id}",
    PolicyDocument=json.dumps({
        "Version": "2012-10-17",
        "Statement": kb_policies_statements
    })
)

iam_client.attach_role_policy(
    RoleName=agent_role['Role']['RoleName'],
    PolicyArn=policy['Policy']['Arn']
)

7. 关联知识库与代理

response = bedrock_agent_client.associate_agent_knowledge_base(
    agentId=agent_id,
    agentVersion='DRAFT',
    description='当顾客询问菜单中的菜品时访问知识库',
    knowledgeBaseId=kb_id,
    knowledgeBaseState='ENABLED'
)

8. 准备代理

关联知识库后需要重新准备代理:

response = bedrock_agent_client.prepare_agent(agentId=agent_id)
while bedrock_agent_client.get_agent(agentId=agent_id)['agent']['agentStatus'] in ['CREATING', 'PREPARING', 'UPDATING', 'VERSIONING']:
    time.sleep(10)

9. 测试代理

现在可以测试代理是否能正确回答基于知识库的问题:

session_id = str(uuid.uuid1())
query = "儿童菜单中有哪些开胃菜?"
response = invoke_agent_helper(query, session_id, agent_id, alias_id)
print(response)

技术要点解析

  1. 向量数据库选择:使用OpenSearch Serverless作为向量数据库,它专为AI工作负载优化,无需管理基础设施。

  2. 权限管理:代理需要显式权限才能访问知识库,遵循最小权限原则。

  3. 文档处理:知识库会自动将上传的文档分块、嵌入并存储在向量数据库中。

  4. 检索增强生成(RAG):代理会先检索相关知识,再生成回答,确保回答基于可信来源。

最佳实践建议

  1. 文档质量:确保上传的文档结构清晰、内容准确,这将直接影响回答质量。

  2. 测试策略:设计全面的测试用例,覆盖各种可能的提问方式。

  3. 性能监控:关注知识库检索的延迟和准确性,必要时调整分块策略或检索参数。

  4. 版本控制:更新文档时考虑版本管理,避免影响现有功能。

总结

通过本教程,我们成功地为Amazon Bedrock智能代理添加了知识库支持,使其能够回答基于特定文档内容的问题。这种架构模式非常适用于需要结合操作能力(如预订)和知识问答(如菜单查询)的场景。

在后续实践中,可以进一步优化知识库内容、调整检索参数,并探索如何将操作请求和知识查询更自然地结合在一起,提供更流畅的用户体验。

【免费下载链接】amazon-bedrock-workshop This is a workshop designed for Amazon Bedrock a foundational model service. 【免费下载链接】amazon-bedrock-workshop 项目地址: https://gitcode.com/GitHub_Trending/am/amazon-bedrock-workshop

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

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

抵扣说明:

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

余额充值