
检索增强生成(RAG)技术是在生成式 AI 应用场景中提升模型回答质量的主要方式。通过将企业私有数据融入大模型的推理过程,RAG 技术能够显著增强回答的准确性、相关性和可靠性。当用户提出问题时,系统会从知识库中检索最相关的信息,并将这些内容作为上下文提供给大模型,从而生成准确的响应。[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库作为亚马逊云科技提供的全托管服务,无需额外管理基础设施或开发复杂的检索系统,即可帮助您快速将 RAG 融入到 AI 应用中。
通过 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库,您可以:
- 使用从数据源检索的信息帮助生成对用户查询的准确且相关的响应。
- 在生成的响应中自动附加引用信息,包括源文档名称、页码或段落位置、引用内容等详细出处,让用户可以便捷地回溯和验证信息来源。
- 支持多模态知识库构建,自动处理包含图表、图像、表格等视觉元素的复杂文档,不仅提取文本内容,还能理解和检索视觉信息。
- 将自然语言转换为结构化的数据库查询语句(如 SQL 查询),这些查询可以用于从结构化数据存储中检索数据。
- 利用专门的重排序模型(Reranker)优化检索结果的相关性排序,显著提升检索精度和问答质量。
- 将知识库无缝集成到 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Agent 工作流中,构建既能理解用户意图、又能访问专业领域知识的 AI 应用,无需复杂的集成开发工作。
本文将主要介绍在创建 Bedrock 知识库的过程中的三个重要参数:
- 解析策略(Parsing strategy)
- 分块策略(Chunking strategy)
- 转换函数(Transformation function)

### **一、解析策略(Parsing strategy)**
在将数据存入向量数据库之前,**解析处理**是一个不可或缺的步骤,因为没有经过解析的原始文档往往存在结构混乱、信息缺失和噪声干扰等问题,直接向量化会严重影响后续的检索和输出效果。解析过程能够对数据进行清洗以及结构化处理,并为后续向量的嵌入(Vector Embedding)和搜索(Vector Search)做好准备。
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库在数据导入过程中,提供如下数据解析选项:
- **默认解析器**
只能解析文本文件中的纯文本内容,包括 .txt、.md、.html、.doc/.docx、.xls/.xlsx和.pdf 文件。此解析器不会产生任何使用费用。
由于默认解析器只输出文本,如果您的文档包含图表、图形、表格或图像,我们建议使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Data Automation(BDA)或基础模型作为解析器。
- **高级解析器**
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库提供以下解析器来解析多模态数据,包括 .pdf 文件中的图表、图形和表格,以及 .jpeg和.png 图像文件。这些解析器还可以提取这些图表、表格和图像,并将它们作为文件存储在您在创建知识库时指定的S3存储桶中。在知识库检索期间,这些文件可以在响应或来源引用中返回。
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Data Automation(BDA):一项完全托管的服务,无需提供任何额外提示词即可有效处理多模态数据。此解析器的成本取决于文档中的页数或要处理的图像数量。
基础模型:使用基础模型处理多模态数据。此解析器允许您自定义用于数据提取的默认提示词。其成本取决于基础模型处理的输入和输出的Token数量。
### **二、分块策略(Chunking strategy)**
在数据解析完成之后,系统会将您的数据分割为便于高效检索的文本块(Chunk)。这些文本块随后通过 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 的基础模型转换为嵌入向量,并存储在向量索引中,同时保留与原始文档的映射关系,以支持后续的数据检索与引用。Bedrock 提供了下面几种分块方式:
#### 1. 标准分块
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 支持以下标准分块类型:
- 固定大小分块:您可以通过指定每个文本块(Chunk)的 Token 数量和重叠百分比来配置块的大小,从而灵活地满足您的特定需求。
- 默认分块:会将内容分割成大约300个 Token 的文本块。分块过程会遵守句子边界,确保在每个文本块内保证句子的完整性。
- 您也可以选择不对文档进行分块,每个文档会被视为单个文本块。
##### **1.1 标准分块的适用场景:**
- 简单文本检索:例如 FAQ、公告通知等结构松散、信息密度不高的文档,采用固定长度分块即可满足检索需求。
- 快速原型开发:在需要快速验证 RAG 方案效果、构建 PoC(概念验证)阶段,标准分块方案配置简单、上线速度快。
- 成本敏感场景:标准分块不依赖基础模型进行预处理,计算成本较低,适用于对检索效果要求不高但预算有限的应用。
#### **2. 层次分块**
层次分块涉及将信息组织成子块和父块的嵌套结构。您可以定义父块大小、子块大小以及每个块之间重叠的 Token 数量。在检索过程中,系统最初会检索子块,但随后会用更广泛的父块替换它们,以便为模型提供更全面的上下文。小型文本嵌入更精确,但检索的目标是提供更全面的上下文,层次分块通过用父块替换检索到的子块来平衡这些需求。
##### **2.1 层次分块的适用场景:**
- 长文档处理:对于研究论文、法律文件或技术手册等长篇文档,层次分块可以保持文档的逻辑结构。
- 复杂问答系统:层次分块通过维持文档的结构层次,确保相关的关键信息在检索过程中能够被提取,为模型提供充分的上下文信息。
- 知识库构建:对于企业知识库中包含的复杂的互相关联的概念、流程和专业知识,层次分块能在保持检索效率的同时提供足够的背景信息。
#### **3. 语义分块**
语义分块将文本分割成语义连贯的单元以增强语义理解和信息检索。它通过关注语义内容和上下文关联性而非仅仅是句法结构来提高检索的准确性。
语义分块本质上是让 AI 理解文本的含义,然后在语义自然断点处分割内容。不同于仅考虑字符或 Token 数量的传统方法,它能够识别主题变化、概念转换和逻辑结构,创建更有意义的文本单元。这就像一位理解内容的编辑,而不是机械地按照页数切割的助手。它知道在哪里划分章节才不会打断一个完整的逻辑或概念。
##### **3.1 关键参数及其影响**

断点百分位阈值:这是决定何时在句子之间划分界限的关键。系统会计算句子之间的语义距离或不相似度,然后根据这个阈值决定是否在此处进行分块:
- 较高阈值:要求句子之间差异更明显才会分割,产生更少、更大的文本块。
- 较低阈值:对句子差异的要求较低,产生更多、更小的文本块。
这类似于决定何时开始新的章节或段落的标准——是在微小的主题变化处就分割,还是只在更明显的主题转换时才分割。
##### **3.2 使用语义分块的成本考量**
值得注意的是,语义分块由于使用了基础模型来理解文本含义,会产生额外成本。这些成本与处理的数据量成正比。对于小型知识库,成本增加可能不明显;但对于大型企业知识库,可能需要进行成本效益分析。
##### **3.3 语义分块的适用场景:**
- 高价值问答系统:例如金融、医疗、法律等领域,对回答准确率和语义连贯性要求极高的应用场景。
- 客户服务与智能助手:需要根据用户提问,快速准确地从大规模知识库中提取上下文相关信息,并避免回答断裂或遗漏。
- 非结构化复杂文档:例如新闻稿件、政策文件、技术白皮书等内容复杂、结构松散的文档,通过语义分块能够有效提升检索效果和用户体验。
#### **4. 分块策略对比**
最后总结一下不同的分块策略的特点,您可以根据业务需求进行选择:
1. 标准分块采用固定长度切割,技术实现最简单,适用于内容结构松散或需要快速上线的场景,但容易打断上下文,检索时可能会出现信息缺失或回答不连贯的情况。
2. 层次分块则依托文档原有的章节层级,能在一定程度上保留语义完整性,特别适用于规章制度、技术手册等结构清晰的文档,检索结果更具上下文关联性。
3. 语义分块通过模型自动识别语义单元,动态决定分块边界,能够实现细粒度、语义连贯的内容切分,显著提升检索准确率和用户体验。但由于语义分块依赖基础模型,预处理成本较高,适用于高价值、问答质量要求较高的业务场景。
### **三、使用自定义的 Lambda 转换函数定义数据摄取方式**
如果您需要 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库原生不支持的特定分块逻辑,您还可以使用自定义的 Lambda 转换函数,将您自己的逻辑注入到知识库摄取过程中。您可以通过选择"无分块策略"选项,同时指定包含您的分块逻辑的 Lambda 函数。
自定义转换函数提供了两种主要的使用场景:
1. 实现自定义分块逻辑。
2. 添加块级元数据:如果你想使用 Bedrock 的原生分块策略,但需要添加自定义的块级元数据,也可以使用自定义的转换函数。
了解更多 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库功能请参阅“[Amazon Bedrock 知识库](https://aws.amazon.com/bedrock/knowledge-bases/)”。