检索增强生成 (RAG) 入门指南:构建知识库与 LLM 协同系统
检索增强生成(RAG)初学者指南
大语言模型(LLM)使我们能够高效、可靠且快速地处理大量文本数据。过去两年最流行的应用场景之一就是检索增强生成(Retrieval-Augmented Generation, RAG)。
RAG 允许我们获取若干文档(从几个到数十万个),创建文档知识库,然后进行查询并基于文档获得带有相关来源的答案。相比需要耗时数小时甚至数天的手动搜索,我们只需几秒延迟就能让 LLM 完成搜索。
云端部署 vs 本地部署
构建 RAG 系统包含两个核心部分:知识数据库和 LLM。前者如同图书馆,后者则像高效的图书管理员。
创建此类系统的首要决策是选择云端还是本地部署。本地部署在大规模时具有成本优势,同时能更好保障隐私;而云端方案则启动成本低且几乎无需维护。为清晰演示 RAG 概念,本指南将采用云端部署方案,但文末会补充本地部署的注意事项。
知识(向量)数据库
首先需要创建知识数据库(技术上称为向量数据库)。具体方法是通过嵌入模型处理文档,为每个文档生成向量。嵌入模型擅长理解文本,生成的向量在向量空间中会使相似文档彼此靠近。
这种特性极其便利,我们通过一个假设组织的四份文档在二维向量空间中的分布来说明:
如图所示,两份人力资源文档被归为一组,且远离其他类型文档。当收到 HR 相关问题时,我们可以计算该问题的嵌入向量,其结果也会靠近这两份 HR 文档。
通过简单的欧几里得距离计算,就能匹配最相关的文档提供给 LLM 回答问题。MTEB 排行榜比较了各种嵌入算法,值得注意的是许多开源模型已超越 OpenAI 等专有供应商。
选择模型时需关注三个指标:总体评分、模型大小和最大 token 数。模型大小决定加载所需显存和嵌入计算速度;最大 token 数限制单次嵌入的文本量,大文件可能需要分割处理。注意嵌入模型仅处理文本,PDF 需转换格式,图像等富媒体内容需要添加描述(使用 AI 图像标注模型)或舍弃。
开源本地嵌入模型可通过 transformers 库运行,OpenAI 嵌入模型则需要 API 密钥。以下是使用 OpenAI API 创建嵌入和简易基于 pickle 文件系统的向量数据库的 Python 代码:
大语言模型(LLM)集成
构建文档数据库后,创建函数获取查询最相关的 3 个文档:
最后使用 GPT-4o 基于检索到的文档生成答案:
进阶方向
这个直观的 RAG 实现还有很大优化空间:
使用本地 LLM 并添加语音支持
采用直接偏好优化(DPO)微调 LLM
针对医疗/法律等专业领域微调嵌入模型
大规模应用时选用 Pinecone 或 Milvus 等企业级向量数据库
当默认结果不满意时,微调 LLM 的应答方式更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码
- 办公AI智能小助手
评论