基于Amazon Bedrock Workshop的RAG问答应用开发实战:RetrieveAndGenerate API详解
引言
在现代企业应用中,构建能够准确回答特定领域问题的智能系统一直是个挑战。传统的大型语言模型(LLM)虽然强大,但存在知识更新滞后和可能产生幻觉(hallucination)的问题。Amazon Bedrock的Knowledge Bases与RetrieveAndGenerate API为解决这些问题提供了优雅的解决方案。
本文将带您深入了解如何使用Amazon Bedrock的RetrieveAndGenerate API构建一个完整的检索增强生成(RAG)问答系统。这个系统能够自动从知识库中检索相关信息,并生成基于上下文的准确回答。
技术背景
什么是RAG?
检索增强生成(Retrieval-Augmented Generation)是一种结合信息检索与文本生成的技术范式。它通过以下步骤工作:
- 将用户查询转换为向量表示
- 从知识库中检索最相关的文档片段
- 将这些片段作为上下文注入到生成模型的提示中
- 模型基于上下文生成最终回答
这种方法显著提高了回答的准确性和可信度,同时减少了模型幻觉的可能性。
Amazon Bedrock Knowledge Bases
Amazon Bedrock Knowledge Bases是一个完全托管的服务,它能够:
- 自动将文档分块并生成向量嵌入
- 维护向量索引(支持OpenSearch Serverless等多种后端)
- 提供简单的API进行检索和生成操作
环境准备
在开始之前,请确保已完成以下准备工作:
- 已创建Amazon Bedrock Knowledge Base并完成文档摄取
- 已启用以下模型的访问权限:
- Amazon Nova Micro(生成模型)
- Amazon Titan Text Embeddings V2(嵌入模型)
实战步骤
1. 初始化环境
首先需要设置必要的Python环境和客户端:
import os
import json
import boto3
from botocore.client import Config
# 创建Bedrock客户端
bedrock_config = Config(connect_timeout=120, read_timeout=120, retries={'max_attempts': 0})
bedrock_agent_client = boto3.client('bedrock-agent-runtime', config=bedrock_config)
# 设置模型参数
model_id = 'amazon.nova-micro-v1:0'
model_arn = f'arn:aws:bedrock:{aws_region}::foundation-model/{model_id}'
2. 使用RetrieveAndGenerate API
RetrieveAndGenerate API是构建RAG应用的核心,它封装了完整的检索-生成流程:
user_query = "Amazon如何利用技术更好地服务客户?"
response = bedrock_agent_client.retrieve_and_generate(
input={
'text': user_query
},
retrieveAndGenerateConfiguration={
'type': 'KNOWLEDGE_BASE',
'knowledgeBaseConfiguration': {
'knowledgeBaseId': bedrock_kb_id,
'modelArn': model_arn
}
}
)
print("生成的回答:\n", response['output']['text'])
API的关键参数说明:
knowledgeBaseId: 指定要查询的知识库IDmodelArn: 指定用于生成回答的基础模型
3. 解析响应与引用
RetrieveAndGenerate API的响应不仅包含生成的文本,还包含详细的引用信息:
print("引用信息:\n", json.dumps(response["citations"], indent=2, ensure_ascii=False))
典型的响应结构包含:
generatedResponsePart: 模型生成的自然语言回答retrievedReferences: 用于生成回答的知识库内容片段,包含:- 原始文本内容
- 来源文档URI
- 页面位置信息
这种结构确保了回答的可追溯性和透明度。
技术深度解析
RetrieveAndGenerate的工作流程
- 查询向量化:API自动将用户查询转换为向量表示
- 语义检索:在知识库的向量索引中执行相似性搜索
- 上下文构建:将最相关的文档片段整合到提示中
- 生成回答:基础模型基于上下文生成最终回答
- 引用生成:系统自动关联回答与来源文档
多轮对话支持
RetrieveAndGenerate API内置了短时对话记忆功能,能够维护对话上下文,使得在多轮对话中也能提供连贯的回答。这是通过维护对话状态实现的,无需开发者额外处理。
最佳实践
- 知识库质量:确保知识库中的文档准确、最新且覆盖全面
- 查询优化:设计清晰、具体的查询以获得最佳结果
- 结果验证:利用引用信息验证回答的准确性
- 模型选择:根据应用场景选择合适的生成模型
进阶方向
对于需要更精细控制的场景,可以考虑:
- 使用单独的Retrieve API获取文档片段,然后自定义提示工程
- 结合关键词检索和语义检索的混合搜索策略
- 实现自定义的上下文重组逻辑
- 集成多个知识源
总结
Amazon Bedrock的RetrieveAndGenerate API为构建RAG应用提供了简单而强大的解决方案。通过本文的实践,我们实现了:
- 完全托管的检索-生成流程
- 自动化的引用和溯源
- 多轮对话支持
- 高度可解释的回答生成
这种模式特别适合企业知识问答、技术支持系统等需要准确性和可验证性的场景。相比传统方法,它大幅降低了开发复杂度,同时提高了回答质量。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



