博客文章

首页 / 博客文章 / 构建 RAG 应用程序知识库

目录
自动化, 无代码 数据栈

了解如何 Astera Data Stack 可以简化企业的数据管理。

    为 RAG 应用程序构建知识库

    二零一九年六月六日

    构建 RAG 应用程序时,您面临着一个根本性的选择:在何处存储和检索信息。您可以投资一个完整的知识图谱,以精确的结构捕获实体和关系;或者,您可以采用更传统的方法,构建基于文档集合和向量搜索的知识库。

    知识图谱擅长建模关系并支持多跳推理。然而,对于 RAG 应用来说,从知识库入手是有充分理由的。

    在本文中,我们将从 RAG 的角度指导您了解知识库的目的、如何设计和实施知识库,以及您可以遵循哪些最佳实践来确保内容增长时的性能和准确性。

    检索增强生成 (RAG) 概述

    检索增强生成(RAG) 只是一个 LLM 使用外部来源(例如知识库)生成与上下文相关的响应。RAG 包含两个组件:

    • 从外部源获取相关信息的检索器
    • 一个生成器,将这些信息合成为连贯的响应

    在查询时,系统会从连接的源检索相关数据,并使用该数据生成输出。这种方法有助于克服纯生成模型的幻觉倾向,使其能够提供最新的答案或特定领域的详细信息。

    建立真正有效的 RAG管道你需要优秀的知识库。它决定了模型可以使用哪些内容,以及检索速度有多快。

    RAG 中的知识库是什么?

    知识库 (KB) 是相关数据或信息的存储库,当您需要找到常见问题的答案或解决问题时可以利用它。

    在 RAG 的语境中,知识库通常是文本段落或文档片段的集合。与存储结构化数据的传统数据库不同,知识库主要包含自然语言内容,例如您组织的产品手册或文档。

    此内容已编入索引,可用于基于含义的搜索。这意味着 RAG 系统会查找并提取与您的问题主题或观点相同的段落,即使这些段落使用的词语并非完全相同。它通过将自然语言内容(使用 Transformer 等高级 AI 模型)转换为 高维向量.

    为什么知识库对于 RAG 至关重要

    没有知识库,就没有任何内容可检索。生成器将默认依赖其预先训练的参数,这意味着它可能会生成幻觉内容。

    知识库至关重要,主要是因为它们是LLM学生的记忆工具。以下是LLM学生如果没有知识库就无法实现的三个关键目标:

    1. 接地:专门的知识库提供事实背景,以减少语言模型带来的幻觉。
    2. 领域适应:知识库使 RAG 能够“注入”特定领域的知识,而无需重新训练或微调模型。
    3. 合时:知识库通过检索最近发布的内容来提供最新的答案,即使基础模型是很久以前训练的。

    简而言之,如果没有知识库,RAG 系统就只是另一个文本生成器——有限、通用且不可信。

    您是否应该全力投入 RAG 的知识图谱?

    鉴于 RAG 应用的知识图谱被大肆宣传,人们很容易怀疑它们是否真的是 LLM 最可行的解决方案。那么,为什么在投资知识图谱之前要先建立知识库呢?

    这里还有几个原因:

    基于向量的索引的简单性

    首先,世界上大多数信息都存在于非结构化或半结构化文本中,例如报告、电子邮件、维基页面和其他文档。要将所有这些材料转化为规范的图谱,需要在实体识别、关系消歧和持续的整理方面投入大量精力。

    相比之下,基于向量的知识库允许您直接根据文本块的含义对其进行索引。您只需几个小时(而不是几周)就能将原始文件转化为可搜索的存储库。

    敏捷更新

    其次,您可以享受无摩擦更新的优势。当新文档到达时,您只需将其转换为嵌入并添加到索引中即可。这样可以避免僵化的图模式带来的脆弱性,因为每当主题发生变化或出现新的实体类型时,都必须重新提取和重新注释。采用基于向量的方法,您可以牺牲一些最丰富的关系语义,从而显著加快价值实现速度并降低操作复杂性。

    常见 RAG 应用程序的可扩展性能

    最后,向量搜索引擎可以优雅地扩展。它们将你的嵌入向量分布到各个分片中,并利用近似最近邻算法,即使你的语料库增长到数亿篇,也能保持检索速度。

    对于许多常见的 RAG 用例(例如客户支持、知识工作者协助或合规性研究),管理大型图表的开销超过了您可能从复杂的图表遍历中获得的精度的边际收益。

    如何为 RAG 构建知识库

    以下是构建知识库需要执行的步骤:

    步骤 1:了解您的域和用户问题

    在接触任何数据之前,需要问一些基本问题:

    • RAG 系统应该回答哪些问题?具体说明主题、领域以及所需的详细程度。
    • 目标受众是谁?他们需要什么样的答案?这将影响所包含信息的语言、复杂性和类型。
    • 哪些数据源被认为是可靠的?RAG 系统的准确性取决于所提取信息的可信度和正确性。
    • 关键实体和概念是什么?确定你的知识库将围绕的核心主题。

    例如,如果您正在为软件平台构建支持助手,用户可能会对产品功能、集成步骤或故障排除方法感兴趣。有了这些关键信息,您就可以明确地知道,您的知识库需要以用户手册、常见问题解答、更新日志和论坛讨论等内容作为核心信息来源。

    第 2 步:收集和清理数据

    明确了知识库所需内容的类型和深度后,您需要一种机制来提取相关数据并将其格式化为纯文本形式。这一点至关重要,因为纯文本是LLM流程的通用语言,从分块到嵌入再到生成,一切都取决于纯文本的整洁性和格式是否规范。任何其他方式都会增加噪音,降低相关性和响应质量。

    您可以使用文本转换器从各种文件格式(包括文档、图像和音频文件)中提取纯文本 Astera的数据提取平台。具体来说,您可以使用“文本转换”从以下来源提取文本:

    • PDF、DOC/DOCX、XLS/XLSX 等文档和文件。
    • 使用光学字符识别 (OCR) 的图像
    • 基于 HTML 的文件
    • MD、MARKDOWN、MKD、MKDN、MDWN 和 MDOWN 文件

    请记住,这里的目标是创建统一的文本语料库,而不管原始文件类型如何。

    步骤3:将数据拆分成块

    由于 LLM 的上下文窗口有限,它们每次只能处理一定量的文本。这意味着你需要对大型文档进行预处理,并将其分解成更小、更易于管理的“块”,使其符合模型的标记限制,也就是说,易于模型消化。这个过程称为分块或拆分。

    Astera的文本分割器可以通过常用的分块技术来分割文本,例如递归、基于句子、基于 HTML 和基于分隔符的分割。

    步骤 4:为每个块生成嵌入(矢量化)

    你需要将每一段文本转换成一个数值向量——一个数字列表,用数学的方式表示该文本块的语义,或者换句话说,表示文本在概念层面上的含义。例如,“重启系统”和“重启机器”这两个短语可能看起来不同,但嵌入模型可以识别出它们经常出现在相似的语境中,并将它们分配到相似的向量。

    这个过程称为向量嵌入,它允许 RAG 系统根据含义而不是确切的措辞来比较和检索相关信息。

    您可以使用内部的 Build Embeddings 对象 Astera的 UI 为:

    • 使用语义向量嵌入来捕捉文本的含义
    • 使用 TS 向量执行基于关键字的匹配

    步骤 5:将块存储在矢量数据库中

    为了使 RAG 系统能够访问块及其嵌入和元数据,您需要将它们存储在向量数据库(向量存储)中。这很重要,因为向量数据库可以实现以下功能:

    • 相似度搜索: 将查询与预先存储的文档块嵌入进行比较。目标是快速识别具有相似含义的块。
    • 元数据过滤: 现代向量数据库还允许您按元数据(例如来源、日期或文档类型)筛选结果。这使得您的 RAG 系统不仅能够检索相关内容,还能从正确的上下文中检索相关内容,这对于企业用例中的准确性和可信度至关重要。例如,如果用户询问最近发布的政策,您可以优先显示最新文档中的段落。

    矢量数据库的示例包括:

    • 托管矢量数据库(云):Pinecone、Zilliz Cloud(Milvus)、Google Vertex AI Vector Search、Weaviate Cloud
    • 自托管矢量数据库:Milvus、ChromaDB、Qdrant
    • 向量索引库和搜索即服务:FAISS、Azure 认知搜索

    通常,下一步是实现检索管道。然而,这涉及构建 RAG 应用程序,而本文的重点是构建知识库。

    牢记最佳实践

    干净可靠的知识库对于保持 RAG 系统性能优化大有裨益,尤其是在内容可能持续增长的情况下。以下最佳实践将帮助您设计知识库。

    • 按含义而不是长度来划分内容。
      将文档分成清晰的章节或段落,而不是按标记数拆分。这样可以保持上下文的完整性,并提高检索到的答案的相关性。
    • 保持所有来源的格式一致。
      对标题、列表和间距使用相同的结构,以便您的管道能够统一处理内容。这可以减少分块和检索过程中的错误。
    • 使用有用的元数据标记每个块。
      添加主题、来源、日期和类型等标签,以便稍后进行筛选和范围检索。元数据也有助于组织和管理内容。
    • 删除重复和过时的版本。
      确保每条内容只出现一次,并且旧版本不会保留在索引中。这可以避免混淆并提高答案的可靠性。
    • 使用干净且可信赖的输入源。
      从精心编写且准确的文档开始,以巩固你的基础。质量差的输入会导致检索效果差和生成能力弱。

    何时转向知识图谱

    虽然知识库在早期阶段会为您提供良好的服务,但是当您的用例开始要求更多而不是“找到最近的文本块”时,您可以在引用存储在向量索引中的相同文档的图表上分层。

    在实践中,这意味着以下情况:

    • 需要复杂的实体推理。
      例如,如果用户经常询问多跳问题(需要跨多条信息进行推理才能正确回答的问题),例如“2020 年后,机构 X 的哪些作者发表了关于主题 Y 的文章?”,那么您将受益于作者、机构、主题和出版日期的明确图表。
    • 消除歧义或共指不能仅通过上下文来解决。
      当同一个术语指代完全不同的实体时,例如,“水星”这个词可以指行星、元素,甚至是一家现已停产的汽车制造商,实体类型和关系的微小图表将大大提高检索精度。
    • 分层分类法或本体论支撑着您的内容。
      如果您的知识自然存在于层次中,例如产品线、SKU 和规格,或疾病类别、亚型和治疗方法,则图表可让您沿层次结构向上或向下遍历,以实现更灵活的查询。

    请记住,引入图并不意味着放弃向量存储基础;相反,你会丰富它。你可以继续通过嵌入(快速、可扩展地检索候选段落)完成繁重的工作,然后只在优化、过滤或扩展结果时参考图。而且,由于这种混合模型只在需要的地方增加复杂性,因此你的核心流程可以保持精简。

    使用以下工具构建 RAG 知识库 Astera

    要为 RAG 创建知识库,您必须完成一系列以数据为中心的任务:

    • 从文档、网页和数据库中提取原始内容
    • 清理并规范文本
    • 将其分解成连贯的块
    • 将每个块转换为向量嵌入
    • 对这些嵌入进行索引以进行快速相似性搜索。

    每个阶段都至关重要,以确保您的检索层能够准确地显示与查询最相关的段落,但每个阶段也带来了一系列挑战,例如:

    • 编写自定义 PDF 解析器
    • 调整文本分割逻辑以尊重语义边界
    • 依赖不同的工具进行嵌入生成和向量存储

    这是哪里 Astera 可以利用其人工智能数据堆栈来发挥作用。

    您无需跨不同工具管理多个脚本和 API,只需在单一环境中定义整个工作流程即可。这简化了步骤之间的转换,降低了不一致的风险,并使您能够专注于提高检索准确性并集成语言模型以生成响应。

    具体而言, Astera 通过提供以下内容来自动化创建 RAG 知识库的过程:

    • 拖放常见来源的连接器
    • 预先构建的用于消除噪音和文本转换的转换
    • 可配置的分块模块
    • 开箱即用的嵌入生成

    结语

    为 RAG 构建知识库,为构建强大的检索增强应用程序提供了一条切实可行的途径。您可以利用海量非结构化文本,以最低的管理成本获得快速的价值实现和可扩展的性能。

    当您的需求发生变化时,您可以随时使用知识图谱来增强系统,以处理高级推理任务。从精心构建的知识库开始,您将为 RAG 应用程序未来任何功能的增强奠定坚实的基础。

    知识库:常见问题 (FAQ)

    什么是知识管理?

    知识管理是捕获、组织、共享和维护组织集体专业知识和信息资产的过程。在 RAG 的背景下,知识管理涉及提取、索引和更新文档、常见问题解答、产品规格等内容,以便 AI 代理能够实时检索最相关的片段。

    什么构成了良好的知识库?

    强大的知识库应该涵盖 AI 可能遇到的所有主题。此外,所有文章或条目都必须经过事实核查和领域专家审核。最后,您的团队成员和 AI 系统应该能够轻松访问知识库。

    知识库应该包含什么?

    知识库必须包含哪些内容,并没有一套统一且普遍接受的标准。不过,通常情况下,你会发现大多数知识库内容都包含结构化文章、非结构化文档、常见问题解答和词汇表、变更日志、更新和用户反馈。

    您如何构建您的知识库?

    核心原则是尽可能简化信息,以便算法找到最相关的上下文来回答用户的查询。因此,RAG 应用的结构化知识库是一个填充的向量数据库,其中每个条目都由内容块、向量嵌入和元数据组成。

    如何为 RAG 应用程序创建自己的知识库?

    广义上,你可以通过两种方式创建知识库:要么自己组合广泛可用的编程库和服务,要么利用交钥匙解决方案。在后一种情况下, Astera 提供一个可视化环境,其中包含构建 RAG 功能齐全的知识库所需的一切。

    作者:

    • Astera 营销团队
    你也许也喜欢
    RAG 驱动的法律文件数据提取,加快案件管理速度
    从 RAG 到财富:为何检索增强生成能赢得 RAG 与微调之战
    Agentic RAG 指南:是什么让 RAG 真正具有 Agentic 性?
    考虑到 Astera 满足您的数据管理需求?

    与您的企业应用程序、数据库和云应用程序建立无代码连接,以集成您的所有数据。

    现在就联系吧!
    让我们联系