分享这篇文章
现代大型语言模型 (LLM) 令人印象深刻,但它们有一个主要限制:它们的知识固定在权重中,这使得更新和扩展它们的知识变得困难。检索增强生成 (RAG) 是一种旨在解决此问题的方法。它由 Meta 于 2020 年推出,将语言模型连接到外部知识库(例如,一组文档),以便它可以将最新和特定的信息整合到其响应中。在实践中,对于每个提出的问题,RAG 系统首先从其文档库中提取相关内容,然后通过将检索到的上下文与 LLM 的语言能力相结合来生成响应。
注意:本文中提到的示例项目的完整源代码可在 GitHub 上找到。
什么是 RAG 以及为什么要使用它?
RAG 系统的架构
使用 TypeScript 的实践实现
代码分析和最佳实践
技术栈的优势
更进一步
检索增强生成 (RAG) 字面意思是“通过检索增强的生成”。其思想是将知识与模型分离。我们不是试图将所有信息都整合到 LLM 的参数中(通过昂贵的微调),也不是设计一个从数据中预测响应的经典模型,而是让主模型生成文本,并通过信息检索的中间步骤来增强它。典型的 RAG 管道工作流程如下:
这个过程允许模型在生成时依赖特定的外部知识,而无需永久记住它。这可以比作一个人在面对问题时,会在回答之前查阅书籍或参考文件:LLM 在说话之前“搜索其图书馆”。
每当对话助手需要处理不断发展或庞大的知识库时,RAG 方法就特别有用。以下是一些 RAG 相对于传统方法表现出色的具体用例示例:
文档聊天机器人:由公司的技术文档驱动的助手,能够通过直接从手册、内部知识库甚至源代码中提取信息来回答开发人员或客户的问题。例如,模型可以连接到 API 规范或开源项目代码,以解释函数的工作原理或某种设计的原因。
动态常见问题解答:在客户支持场景中,RAG 聊天机器人可以根据最新的政策或产品数据回答常见问题 (FAQ)。如果政策(例如退货条件)发生变化,您只需更新参考文档,机器人就会立即将其考虑在内,而无需重新训练。这会产生始终保持最新的常见问题解答,并能够提供信息来源以支持答案。
法律助手:助手可以通过在法律、判例法或合同数据库中查找给定问题的相关段落,然后用自然语言表述答案,来帮助律师或法律专业人士。模型不需要记住整部民法典;它只需要查找适当的条款。这同样适用于医疗助手,它可以查询科学出版物或医疗协议数据库,以提供基于最新临床知识的答案。
编程助手:这就是我们示例项目的情况——一个了解代码库内容并能回答有关此代码(架构、模块作用、潜在错误等)问题的助手。我们不是训练专门的编程模型,而是使用通过在存储库中搜索相关代码文件来增强的通用 LLM。
一个完整的 RAG 系统通常包括以下组件:
索引和存储
查询管道
生成和后处理
typescript
对于我们的实现,我们选择了一个现代且高性能的技术栈:
这种组合在性能、开发易用性和灵活性之间提供了极好的平衡。
让我们从初始化我们的项目开始:
bash
typescript
索引是 RAG 系统中的关键步骤。它涉及将原始文档转换为适当大小的块,然后为每个块生成嵌入。
typescript
typescript
typescript
将文档分割成块是直接影响结果质量的关键步骤。一些最佳实践:
语义搜索的质量至关重要:
提示构建是一门艺术,它强烈影响响应的质量:
typescript
Bun 为此类应用程序提供了显著优势:
LangChain 极大地促进了基于 LLM 的应用程序的开发:
Ollama 允许以极大的灵活性在本地运行语言模型:
Qdrant 是专为语义搜索设计的现代向量数据库:
衡量 RAG 系统质量:
检索增强生成代表了我们在特定用例中利用语言模型方式的重大进步。通过将知识与生成模型分离,RAG 能够创建更准确、更新、更透明的 AI 助手。
我们使用 TypeScript、Bun、LangChain、Ollama 和 Qdrant 的实现表明,现在可以使用现代且易于访问的技术构建高性能的 RAG 系统。这种方法为新一代 AI 助手铺平了道路,这些助手能够基于特定知识库进行推理,同时保持大型语言模型的流畅性和连贯性。
欢迎在 GitHub 上探索完整的源代码,并根据您自己的用例进行调整。RAG 是一项不断发展的技术,在这个激动人心的领域存在着大量的创新机会。
Sébastien TIMONER
作为 Web 开发和技术团队管理专家,我专注于创建和优化高性能数字解决方案。通过对 React.js、Node.js、TypeScript、Symfony 和 IoT 领域的 Zephyr OS 等现代技术的深入掌握,我确保在 offroadLabs 中为各行业企业的复杂 SaaS 和 IoT 项目从设计到生产的成功。
在 offroadLabs,我提供定制开发服务,结合技术专长和协作方法。无论是创建创新的 SaaS 解决方案、使用 Zephyr OS 开发 IoT 系统、现代化现有应用程序还是支持团队的专业成长,我都致力于提供稳健且高效的解决方案,适应每个项目的具体需求。
我可以在艾克斯普罗旺斯周边或完全远程工作。