深入探讨 LangChain 中的 RAG
- 深入探讨 LangChain / Agents 中的检索增强生成 (RAG)
- 主题
- 问题定义
- 数据收集与预处理
- 注意事项
- 检索模型
- 生成模型
- 集成
- 微调与评估
- 部署与监控
- 持续改进
- 伦理考量
- 文档与维护
- 朴素检索增强生成 (Naive RAG)
- RAG 面临的常见挑战
- 高级 RAG 系统
- 架构
- 演示
- 资源
深入探讨 LangChain / Agents 中的检索增强生成 (RAG)
实现高级检索增强生成需要结合自然语言处理 (NLP)、信息检索 (IR) 和机器学习 (ML) 的技术。其目标是通过利用检索到的信息和生成模型,生成连贯且与上下文相关的响应。
主题
- 问题定义
- 数据收集与预处理
- 检索模型
- 生成模型
- 集成
- 微调与评估
- 部署与监控
- 持续改进
- 伦理考量
问题定义
L'Pital 医院系统正在寻找一名人工智能工程师,帮助将其现有的企业基础设施中引入大语言模型 (LLM),以推动创新并在医疗行业中获得竞争优势。L'Pital 医院是位于佐治亚州的一家大型医疗机构。作为一名人工智能工程师,你将利用现有的信息(如患者数据、患者就医体验、医院位置信息、就诊记录、保险支付方以及医院系统的医生信息)来构建一个 LLM。
数据收集与预处理
数据集
- 医院数据
- 患者数据
- 支付方数据
- 医生数据
- 评论数据
- 就诊数据
*数据预处理*:确保数据的一致性以减少噪声。
分词 (Tokenization)、转小写 (Lowercasing)、去除停用词 (Removing stop-words) 以及词干提取/词形还原 (Stemming/Lemmatization) 都是自然语言处理 (NLP) 中数据预处理阶段的一部分。以下是每一项的重要性:
分词: 分词是指将一段文本分解为更小的单元,通常是单词或子词。这一步至关重要,因为大多数 NLP 算法都是在单词级别上运行的,因此分词提供了一种标准化表示文本数据的方法。它还有助于进一步的分析,如计算词频或识别语法模式。
转小写: 转小写是指将所有文本转换为小写。这很重要,因为它确保了单词表示的一致性。如果不进行转小写,同一个单词以不同的大小写形式出现(例如 "Word"、"word"、"WORD")会被 NLP 算法视为不同的单词,从而导致分析不准确。
去除停用词: 停用词是像 "the"、"is"、"and" 等在语言中频繁出现但本身不承载重要意义的常用词。去除停用词有助于减少数据中的噪声,并将注意力集中在更有意义的词汇上,从而提高文本分类或情感分析等 NLP 任务的性能。
词干提取/词形还原: 词干提取和词形还原是用于将单词还原为基本形式或词根的技术。这很重要,因为它有助于规范化含义相似但形式不同的单词。例如,"running"、"runs" 和 "ran" 都可以通过词干提取或词形还原还原为相同的词根 "run"。这减少了词汇量并确保同一单词的变体被视为等效,从而提高 NLP 模型的有效性。
总的来说,这些预处理步骤对于清理和标准化文本数据、减少噪声以及为后续分析或在 NLP 应用中使用做好准备至关重要。
注意事项
- 为模型类型选择合适的提示词 (Prompts)。
- Anthropic 的模型在 XML 格式下表现最佳,而 ChatGPT 在 JSON 格式下表现最佳。
检索模型
选择或设计适合你任务的检索模型。常见的方法包括:
- 向量空间模型(例如 TF-IDF、词嵌入):在向量空间中表示文档和查询,从而进行相似度计算。
- 神经检索模型:利用神经网络学习文档和查询的表示,例如密集检索 (Dense Retrieval) 或基于 BERT 的模型。
- 在你的数据集上训练或微调检索模型,以学习有效的表示。
生成模型
选择或设计用于文本生成的生成模型。常见的选择包括: 具有 LSTM 或 GRU 单元的循环神经网络 (RNN)。 基于 Transformer 的架构,如 GPT (生成式预训练 Transformer) 或 BERT (来自 Transformer 的双向编码器表示)。 使用无监督学习目标(如语言建模)在大型文本语料库上预训练生成模型。
集成
确定如何集成检索和生成组件。常见的方法包括: 顺序方法:首先检索相关的文档或段落,然后根据检索到的信息生成响应。 联合训练:联合训练检索和生成组件,针对共同目标(如最大化响应相关性)进行优化。 混合模型:设计在单一架构内结合检索和生成组件的模型,实现端到端学习。
微调与评估
如果可用,在特定任务的数据集上微调集成模型。此步骤有助于模型适应目标任务或领域的细微差别。 使用适当的指标评估模型,例如 BLEU (双语评估替补)、ROUGE (面向召回的摘要评估替补),或针对对话质量和相关性等任务进行人工评估。 在构建和评估高级 RAG 时,你可以使用 TruEra 的评估基准。
部署与监控
将训练好的模型部署到你所需的应用程序环境中。 随时间推移监控模型的性能,并收集用户反馈以确定改进领域。
持续改进
根据用户反馈、性能指标和领域内的进展对模型进行迭代。 考虑加入主动学习等技术,即模型主动选择最具信息量的数据点进行标注,以进一步提高性能。
伦理考量
在整个开发和部署过程中,注意偏见、公平性和隐私等伦理考量。 实施适当处理敏感或有害内容的机制。
文档与维护
详细记录实施过程,包括模型架构、训练程序和部署说明。 通过定期更新模型、修复错误以及跟进环境或数据源的变化来维护系统。
朴素检索增强生成 (Naive RAG)
朴素 RAG 指的是检索增强生成 (RAG) 框架的一种简单或直接的实现。RAG 将基于检索的方法与生成模型相结合,以提高生成文本的质量和相关性。在朴素实现中,检索和生成组件可能比较基础,没有太多的复杂性或优化。
以下是朴素 RAG 系统的工作方式:
检索组件
使用基础检索方法(如 TF-IDF 或 BM25)根据给定的查询从语料库中检索相关文档或段落。 根据检索到的文档或段落与查询的相似度进行排序。
生成组件
使用基础生成模型(如循环神经网络 (RNN) 或简单的基于 Transformer 的架构)根据检索到的文档或段落提供的上下文生成响应或文本。 生成模型可能没有针对检索增强任务进行专门的微调或优化。
集成
简单地将检索到的文档或段落拼接或作为额外输入提供给生成模型,而无需复杂的处理或交互。 生成过程可能不会明确考虑检索内容中不同部分的关联性或重要性。
评估与优化
评估指标可能比较基础,可能包括标准的语言生成指标,如 BLEU 或困惑度 (Perplexity)。 优化策略可能有限,系统可能未在特定任务数据上进行广泛微调。
虽然朴素 RAG 实现可能缺乏更高级方法的复杂性和优化,但它可以作为尝试检索增强生成并理解所涉及基本组件的起点。
RAG 面临的常见挑战
- 检索不准确
- 文档规模和复杂性增加
- 上下文溢出
所有这些挑战都会显著影响生成答案的质量和可靠性。
高级 RAG 系统
一个适用于生产环境的高级检索增强生成 (RAG) 系统,相比朴素实现,集成了多项优化和改进。以下是定义高级 RAG 系统的功能和特征概述:
复杂的检索组件
利用最先进的检索模型(如密集检索或基于 BERT 的模型)实现更准确且具有上下文意识的文档检索。 考虑检索内容的语义相关性、多样性和时效性等多种因素。 实施高效的索引和检索策略,以有效处理大规模语料库。
高级生成组件
采用强大的生成模型,如针对检索增强任务专门微调的大规模基于 Transformer 的架构(例如 GPT、BERT)。 整合受控生成等技术,确保生成的响应与检索到的上下文连贯且相关。 支持条件生成,使生成模型能够利用检索到的内容生成与用户查询或上下文紧密对齐的响应。
集成策略
实施复杂的机制,无缝集成检索和生成组件。 在生成过程中考虑检索内容中不同部分的关联性和重要性。 允许检索和生成组件之间的动态交互,实现基于检索反馈对生成响应的迭代优化。
评估与优化
使用全面的评估指标来捕捉生成响应的相关性、连贯性和信息量,并在可行的情况下包括人工评估。 采用强化学习或对抗训练等高级优化技术,微调 RAG 模型以获得更好的性能。 进行广泛的实验和消融研究,以了解不同组件和超参数对系统性能的影响。
可扩展性与效率
将 RAG 系统设计为可扩展的,能够高效处理大量用户查询和文档。 利用并行处理、分布式计算或硬件加速来提高系统吞吐量和响应时间。 实施缓存和预计算策略以减少延迟并提高实时响应能力。
鲁棒性与安全性
整合机制以优雅地处理噪声或不相关的检索内容,最大限度地减少对生成响应质量的影响。 实施防护措施以降低生成不当或有害内容的风险,例如亵渎过滤器或内容审核。
监控与维护
建立强大的监控和日志记录机制,以跟踪生产环境中的系统性能和用户交互。 定期更新和维护 RAG 系统,整合新数据、模型和改进,以适应不断变化的用户需求和偏好。
架构
在构建 RAG 架构时,所需的主要工具包括: 大语言模型 (LLM) 嵌入模型 (Embedding model) 文档检索工具 向量数据库
graph LR
style A fill:#f9d5e5,stroke:#b58bba
style B fill:#84b6f4,stroke:#6d95c1
style C fill:#f7db70,stroke:#bfa554
style D fill:#c1f0c1,stroke:#8dbc8d
style E fill:#f7d9c4,stroke:#c1a18a
style F fill:#ececec,stroke:#b3b3b3
style G fill:#d3a4f9,stroke:#a177d3
A([用户])
B(Notebook-app)
C[/提示词模板/]
D[(向量存储)]
E(数据操作 / 预处理技术)
F[文档]
G([大语言模型 LLM])
A --查询---> B
B --> C
D --检索模型--> C
B -- 嵌入模型--> D
C -- 查询+上下文 / 压缩技术---> G
F --> E
E --> D
G --LLM生成的响应--> A
classDef classCyl fill:#f9d5e5,stroke:#333,stroke-width:2px
class F classCyl演示
简单 RAG 系统 高级 RAG 系统 智能体 (Agents)
资源
- 数据集:Kaggle 医疗保健数据集
- LangChain:LangChain 简介
- Huggingface:Huggingface 主页
- Ollama:Ollama 主页
- 模型:Llama, OpenAI, HuggingFace 模型

