译 者 序
2022年11月30日,ChatGPT横空出世,此后,“生成式AI”与“大语言模型”这两个术语迅速从学术圈走进大众视野。然而,随着使用深入,大语言模型的短板也日渐显现——它们会“一本正经地胡说八道”,会因所学知识的截止日期而无法回答关于近期事件的问题,更对私有数据一无所知。
正是在这样的背景下,检索增强生成(RAG)技术应运而生,并迅速成为AI领域发展最快的技术方向之一。RAG的核心思想朴素而精妙:它不试图让大语言模型记住所有知识,而是教会它在回答之前先去“查资料”——从外部知识库中检索相关信息,再用这些信息增强提示词,最后让模型基于可靠的上下文生成答案。这一技术路线有效缓解了幻觉问题,让大语言模型的回答变得可追溯、可验证、可信任。
这是一本为初学者铺路、为实践者指路的书。全书分为四部分,共九章,内容编排循序渐进。书中穿插了大量基于LangChain框架的Python代码示例,读者即使没有大语言模型的背景知识,也可以跟随书中指引,从零开始搭建一个完整的RAG系统。
翻译这本书的过程,也是译者系统梳理RAG知识体系的过程。从数据加载、文本分块、向量嵌入到向量数据库的选型,从检索策略、提示工程到系统评估与部署,每一个环节都凝聚着作者在实战中积累的宝贵经验。尤其令译者印象深刻的是,作者始终保持“以简驭繁”的写作风格——无论多么复杂的概念,他总能用清晰的逻辑和生动的类比讲清楚,让读者真正理解“为什么这样做”而不只是“怎么做”。这种化繁为简的专业功底,源于他多年躬身实践中的深刻洞察。
在翻译中,译者力求忠实传达原作的准确与清晰,同时兼顾中文表达的流畅与自然。对于专业术语,尽量采用业内通用译法,必要时保留英文原名以便对照。书中代码示例均保留原貌,读者可直接运行或对照学习。需要说明的是,生成式AI领域发展极为迅速,书中提及的部分工具和框架版本可能已有更新,建议读者在实践时结合最新文档灵活调整。
献给帕拉维和扎拉——我最深爱的人,我力量和灵感的源泉。
序 言
我一直非常关心机器如何理解人类意图。虽然我早在2007年就涉足人工智能和机器学习领域,但真正让我着迷的是2016年初开发虚拟数据分析师时接触到的自然语言处理。2018年谷歌推出BERT模型后,我相信NLP即将迎来革命性突破。
2022年,当OpenAI旗下GPT-3系列模型text-davinci-002发布后,我决定加入Yarnit(这是一家基于生成式AI内容的营销平台),负责创建该应用的人工智能核心。我们的目标是打造一个平台,使得企业内容营销团队能够高速度、大规模、低成本且高精度地生成营销素材(包括社交媒体帖子、博客文章、电子邮件等)。我们很快发现,如果不整合品牌专属知识和私有数据,任何生成式模型都无法有效实现这一目标。这一事实使我开始探索检索增强生成(Retrieval-Augmented Generation,RAG)技术。
大语言模型(Large Language Model,LLM)常常难以满足用户期待。LLM尽管在知识存储和生成方面表现出色,但也容易产生幻觉——输出结果看似可靠实则错误。RAG技术突破了这一局限,能让LLM在生成响应之前,先检索出相关、实时且准确的信息。RAG技术的精妙之处在于概念简单,而实施过程精妙入微。RAG克服了LLM的核心局限,其巨大的潜力让科研人员和从业者保持着高度关注。
当我开始研究RAG时,这仍是一个未被充分探索的领域。正规的学习资源稀缺,大部分知识分散在博客、社交媒体帖子、研究论文和在线讨论平台上。我在社交平台和博客文章中分享了许多自己的发现,这些内容逐渐积累。最终,我决定将所有知识整合成一本全面书籍。
为了给开发LLM应用的技术人员提供一个简单实用的资源,我于2024年年中开始编写这本书。随着时间的推移,本书逐渐发展成为RAG的基础指南,内容广泛、深入浅出,同时通过清晰的解释和简洁的Python代码确保了实际应用的可行性。
我坚信,对于所有人来说RAG是人工智能应用领域的基本技术,掌握这一技术必须建立扎实的概念基础。本书正是为此而作。写作过程让我收获颇丰。希望您读完后既有所收获,又能享受到阅读的乐趣。
致 谢
撰写书籍需要大量的时间以及心血,当涉及RAG这类日新月异、几乎每周都有新发现的领域时,更是如此。若没有妻子帕拉维的坚定支持与无微不至的关爱,此书就不可能完成。她始终如一的鼓励与耐心支撑着我完成这段旅程,对此我无比感激。
我由衷感谢联合创始人Jyotirmoy和Akash,以及Yarnit团队的全体成员,他们为我理解RAG作出了重要贡献。创建AI应用的实践经验毫无疑问地丰富了本书的内容,使其成为对读者更具价值的资源。
我还要向同事们和指导者们致以诚挚的谢意,他们是Ashish Rishi、Satyakam Mohanty、Pradeepta Mishra、Megha John、Sandeep Acharya、Akshit Sharma、Vishal Sinha等,感谢他们多年来给予的深刻见解和指导。他们的观点塑造了我对待数据科学和AI的理念与方法。
特别感谢曼宁出版社的卓越团队,特别是Andy Waldron先生为我提供了这个难得的机会。我要衷心感谢Ian hough先生在整个写作过程中给予的宝贵建议和指导。特别感谢我的技术编辑Arturo Geigel先生,他细致的审阅和中肯的反馈让本书更加完善。衷心感谢Azra Dedic女士大幅提升了本书的视觉效果。同时向Robin Campbell和Aira Ducic两位女士致以最诚挚的谢意,感谢她们在本书推广和营销中付出的卓越努力。最后,还要感谢制作团队为本书出版所做的辛勤工作。
我诚挚地感谢人工智能研究团体,他们对知识与创新的不懈追求,让更多的事情成为可能。本书在诸多方面凝聚了研究者、开源贡献者与从业人员的集体智慧,这些学者通过论文、博客和论坛等方式慷慨地分享了他们的见解。
在此向所有审稿人致谢:Abhishek Gupta、Alejandro Cuevas Rivero、Alex McLintock、Alireza Aghamohammadi、Amit Dixit、Anindita Nath、Anindyadeep Sannigrahi、Aryan Jadon、Ashish Sarkar、Aushim Nagarkatti、Avinash Tiwari、Babloo Kumar、Balaji Dhamodharan、Balakrishnan Balasubramanian、Bert Gollnick、Bhargob Deka、Brian Daley、Charan Akiri、Christopher G. Fry、Harcharan S. Kabbay、Harshwardhan S. Fartale、Igor Svilenkov Božić、Iván Moreno、Lalit Chourey、Louis Luangkesorn、Louis-François Bouchard、Manas Talukdar、Márcio F. Nogueira、Marine Serré、Naga Santhosh Reddy Vootukuri、Neelesh Pateriya、Peter Cotroneo、Peter Morgan、Richa Taldar、Riddhiben Sunitkumar Shah、Robert Vince、Sameet Sonawane、Sashank Dara、Stephen Wolff、Subhash Kumar Periasamy、Vinesh Gudla和Yanqi Luo。衷心感谢各位专家的宝贵见解与建议,这些意见极大地提升了本书的质量。
最后,我要衷心感谢所有参与这段旅程的人。你们的支持、智慧和慷慨让这本书以及我的作家梦想成为现实。
前 言
检索增强生成正在重塑应用生成式AI的格局。该技术最初由刘易斯团队在开创性论文《用于知识密集型自然语言处理任务的检索增强生成》(https://arxiv.org/abs/2005.11401) 中介绍,RAG很快成为现代AI的基石,增强了大语言模型的可靠性及可信度。
本书是一本面向希望探索RAG的人员的基础指南。它提供了一个由浅入深而全面的概念介绍,并给出了实用见解,有助于充分利用RAG的优点。
本书的目标读者
本书专为希望了解RAG概念并创建基于LLM的应用的技术专业人士打造。无论您是数据科学家、数据工程师、机器学习工程师、软件开发者、技术领导者,还是对生成式AI驱动应用开发感兴趣的学生,都能有所收获。读完本书后,您将能够:
● 掌握RAG的基础知识,包括其组成部分和实际应用。
● 了解非参数化知识库的工作原理及其创建方法。
● 创建一个RAG系统,深入研究索引管道及生成管道。
● 深入理解RAG系统评估及模块化评估策略。
● 熟悉先进的RAG策略以及不断变化的市场格局。
● 掌握用于创建和部署生产级RAG系统的可用工具、技术和框架。
● 了解前沿的RAG变体,例如多模态RAG和Agentic RAG。
● 了解RAG当前的局限性,并进一步探索流行的前沿技术。
事先接触过机器学习、生成式AI和大语言模型对于学习本书会有所帮助,但这本书是一本基础指南,并不假设您对这些概念有深入理解。当您开始阅读时,会逐渐加深对LLM的理解。
本书还穿插了Python代码片段,这些代码使用了LangChain框架。需要说明的是,这些代码片段仅作为概念的补充说明,主要面向希望获得实践体验的读者。读者具备Python和API的基础知识即可尝试这些代码。
生成式AI仍是一个新兴的技术领域。通过学习本书可以提升自己的技能,并在当前和未来的事业中发现许多全新的机会。
本书的组织方式
本书共9章,分为4个部分。第I部分对RAG进行基础性阐述。
● 第1章定义RAG,以及其在AI驱动的LLM领域的必要性和重要性,并探讨RAG系统在现实世界中的若干应用实例。
● 第2章讨论RAG系统的主要组件,介绍两个主要的管道:索引管道和生成管道;此外还介绍RAG评估等概念。
第II部分演示如何构建基础RAG系统,包括核心管道及其评估方法。
● 第3章讲解并演示端到端索引管道,为RAG系统创建知识库。通过这些示例,读者将了解数据加载、分块、嵌入和向量存储等核心概念。
● 第4章关注生成管道,该机制支持对知识库的实时访问,并使LLM能够生成符合上下文的精准响应。该章还讨论RAG的检索器、检索策略和提示工程,并简单总结可用的LLM。
● 第5章深入探讨多种RAG评估技术,并从问题、响应和上下文的角度进行分析,同时讨论真实数据集的重要性和其开发过程。该章还将详细介绍RAG评估中使用的主流框架和基准测试。
第III部分介绍如何改进RAG管道,并为创建生产级RAG系统所需的层制定蓝图。
● 第6章从基础版、高级版和模块化RAG实现的角度探讨RAG的高级概念,以及重要的组件和预检索/后检索策略。该章还提供优化技术来提高RAG系统的性能。
● 第7章介绍支持RAGOps栈的各类工具与技术,将学习RAG系统必不可少的关键层、提升系统性能的基础层,以及专注于系统易用性、可扩展性和效率的增强层。
第IV部分介绍常见的最新RAG变体和RAG开发框架。
● 第8章讨论当前最先进的RAG变体,涵盖多模态RAG、知识图谱RAG及Agentic RAG等。
● 第9章以RAG开发框架作为全书总结,该框架有助于规划RAG系统的开发。
建议按顺序阅读本书,最后一章将对书中介绍的所有概念进行总结。
关于代码
本书中的所有代码示例均使用Python编写,可从GitHub (网址为https://mng.bz/a9DJ)下载,也可扫二维码获取。
第3章到第6章提供了许多源代码的示例。有时候会将代码加粗显示,以强调这些代码是从本章前面的代码变化而来,例如将新特性加入了已有代码。
在很多情况下,原始源代码已经被调整了格式;我们添加了换行符,并重新调整了缩进,以适应书中可用的页面空间。此外,如果代码已经在书中描述,源代码中的注释经常被删除。许多代码都附有代码注释,强调了重要的概念。
关于本书封面
本书封面上的插图名为《服装商人》(Le Marchand D’Habits),选自Louis Curmer在1841年出版的一本书。这幅插图经过了精细的手工绘制和上色处理。
在那个时代,人们仅凭衣着就能轻易分辨出一个人的居住地、职业或社会地位。曼宁出版社通过这种封面设计,展示了几百年前地区文化的丰富多元性,并通过这些珍贵藏品插图让昔日的文化风貌重焕生机,彰显了计算机行业的创造力与开创精神。
作者简介
Abhinav Kimothi是一位经验丰富的AI专家,拥有超过15年开发前沿AI和机器学习解决方案的经验。在其职业生涯中,Abhinav主导的AI项目涵盖数据分析、预测性机器学习、自然语言处理和生成式AI等领域,有些项目取得了成功,有些项目则提供了宝贵的经验。怀着对创新的热忱与好奇心,他持续突破AI技术边界,致力于开发高效解决方案。
