一、检索增强生成简介
1. 传统LLM应用的弊端
自OpenAI革命性的ChatGPT发布以来,在人工智能领域,特别是大型语言模型(Large Language Model,LLM)的能力进化速度之快令人惊叹,大模型浪潮已经席卷了几乎各行业。通过利用LLM的强大功能来解决复杂任务、增强自然语言理解和生成类人文本,从而可能颠覆各个领域。
但是当涉及到专业场景或行业细分领域时,通用的基础大模型基本无法满足我们的实际业务需求,主要有以下几方面原因:
-
知识的局限性:模型自身的知识完全源于它的训练数据,而现有的主流大模型(ChatGPT、文心一言、通义千问)的训练集基本都是构建于网络公开的数据,对于一些实时性的、非公开的或离线的数据是无法获取到的,这部分知识也就无从具备。
-
幻觉问题:所有的AI模型的底层原理都是基于数学概率,其模型输出实质上是一系列数值运算,大模型也不例外,所以它有时候会一本正经地胡说八道,尤其是在大模型自身不具备某一方面的知识或不擅长的场景。而这种幻觉问题的区分是比较困难的,因为它要求使用者自身具备相应领域的知识。
-
数据安全性:对于企业来说,数据安全至关重要,没有企业愿意承担数据泄露的风险,将自身的私域数据上传第三方平台进行训练。这也导致完全依赖通用大模型自身能力的应用方案不得不在数据安全和效果方面进行取舍。既要保证安全,又要借助AI能力,那么最好的方式就是把数据全部放在本地,企业数据的业务计算全部在本地完成。
其实问题还有很多,包括tokens的限制,虽然这个长期来看不是问题,各LLM供应商的tokens数量限制肯定会越来越大。但是,费用也许就是另外一个需要考虑的问题了。
2. 检索增强生成原理
检索增强生成(Retrieval-Augmented Generation,RAG),是一种使用外部知识库来补充大语言模型的上下文并生成响应的技术。 RAG结合了LLM中的参数化知识和非参数化外部知识,缓解了幻觉问题,通过检索技术识别及时的信息,并增强了响应的准确性。 此外,通过引用来源,RAG增加了模型输出的透明度和用户信任度。 RAG还可以通过索引相关文本语料库进行定制以适应特定领域。
RAG的架构如图所示,简单来讲,RAG就是通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为“检索+生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和Prompt工程,将召回的知识合理利用,生成目标答案。
完整的RAG应用流程主要包含数据准备和应用两个阶段。
数据准备主要是将私域数据向量化后构建索引并存入数据库的过程。主要包括:数据提取、文本分割、向量化、数据入库等环节。文本分割主要考虑两个因素:1)embedding模型的Tokens限制情况;2)语义完整性对整体的检索效果的影响。向量化是一个将文本数据转化为向量矩阵的过程,该过程会直接影响到后续检索的效果。数据向量化后构建索引,并写入数据库的过程可以概述为数据入库过程。
应用阶段根据用户的提问,通过高效的检索方法,召回与提问最相关的知识,并融入Prompt;大模型参考当前提问和相关知识,生成相应的答案。
我们可以化繁为简。把RAG——Retrieval **Augmented** Generation理解为Retrieval **And** Generation,也就是**检索与生成**,在加上一个数据向量和索引的工作,我们对RAG就可以总概方式地理解为“**索引、检索和生成**”。
可以看到,RAG与LLM相结合,成为现阶段自动构建私有/本地知识库的主要手段。
构建本地知识库有三个方面,一是LLM,懂得怎么处理自然语言;二是嵌入模型,它的工作就是把复杂的数据简化,转化成易于处理的格式;最后是向量数据库,专门存储和管理那些转化后的数据。
本文介绍利用Ollama和AnythingLLM构建自己的本地知识库。
二、Ollama安装
Ollama 是一个专注于本地运行大型语言模型(LLM)的框架,它使得用户能够在自己的计算机上轻松地部署和使用大型语言模型,而无需依赖昂贵的GPU资源。Ollama 提供了一系列的工具和服务,旨在简化大型语言模型的安装、配置和使用过程,让更多人能够体验到人工智能的强大能力。Ollama的下载和安装可以参考我之前写的另一篇文章([Window 11本地部署 Meta Llama3-8b](https://blog.csdn.net/sheex2012/article/details/138124358 "Window 11本地部署 Meta Llama3-8b")),这里不再赘述。
三、安装AnythingLLM
1. AnythingLLM 简介
AnythingLLM 是 Mintplex Labs 开发的一款可以与任何内容聊天的私人ChatGPT,是高效、可定制、开源的企业级文档聊天机器人解决方案。它能够将任何文档、资源或内容片段转化为大语言模型(LLM)在聊天中可以利用的相关上下文。
AnythingLLM 支持多种文档类型(PDF、TXT、DOCX等),具有对话和查询两种聊天模式。
支持多种 LLM、嵌入模型和向量数据库:
LLM:包括任何开源的 llama.cpp 兼容模型、OpenAI、Azure OpenAI、Anthropic ClaudeV2、LM Studio 和 LocalAi。
嵌入模型:AnythingLLM 原生嵌入器、OpenAI、Azure OpenAI、LM Studio 和 LocalAI。
向量数据库:LanceDB(默认)、Pinecone、Chroma、Weaviate 和 QDrant。
AnythingLLM 主要由三部分组成:收集器、前端和服务器。
-
collector:Python 工具,可快速将在线资源或本地文档转换为 LLM 可用格式。
-
frontend:ViteJS + React 前端,用于创建和管理 LLM 可使用的所有内容。
-
server:NodeJS + Express 服务器,处理所有向量数据库管理和 LLM 交互。
可见,AnythingLLM是一个功能丰富,集成度很高的RAG框架,其在github上的开源项目([anything-llm](https://github.com/Mintplex-Labs/anything-llm "anything-llm")),已经有1万2千多Star。它不仅仅是一个聊天机器人,是一个全栈应用程序,旨在通过一个精心设计的用户界面,为客户提供与文档、资源等进行智能对话的最简单方式。该工具的一个独特之处在于,它可以在后台简单地运行,而不需要使用大量的内存或资源。 AnythingLLM将文档的容器化作为其基础。在这种情况下,不同的工作区可以共享相同的记录,但不能相互交互,从而允许用户为不同的用例维护不同的工作区。AnythingLLM包括两种聊天模式:对话模式,其中保留以前的问题;查询模式,指针对用户指定的文档进行简单的问答聊天。此外,对于公开可访问的文档,每个聊天响应还包括一个引用,链接到原始内容。
2. AnythingLLM 安装
AnythingLLM安装有很多方式,一是到官方网站([Download AnythingLLM for Desktop](https://useanything.com/download "Download AnythingLLM for Desktop"))下载桌面版,然后双击即可。
但是,与Docker版本相比,Desktop版本的功能要少很多,所以还是安装Docker版的吧。
首先下拉一个镜像:
docker pull mintplexlabs/anythingllm
按照官方说明,输入下列命令:
# Run this in powershell terminal
$env:STORAGE_LOCATION="$HOME\Documents\anythingllm"; `
If(!(Test-Path $env:STORAGE_LOCATION)) {New-Item $env:STORAGE_LOCATION -ItemType Directory}; `
If(!(Test-Path "$env:STORAGE_LOCATION\.env")) {New-Item "$env:STORAGE_LOCATION\.env" -ItemType File}; `
docker run -d -p 3001:3001 `
--cap-add SYS_ADMIN `
-v "$env:STORAGE_LOCATION`:/app/server/storage" `
-v "$env:STORAGE_LOCATION\.env:/app/server/.env" `
-e STORAGE_DIR="/app/server/storage" `
mintplexlabs/anythingllm;
然后就开源打开浏览器,输入网址http://localhost:3001/,显示Anyting LLM入口。
3. AnythingLLM 配置
**LLM选择**
选择 Ollama,填入 Ollama 的 `http://localhost:11434` 端口,然后选择你下载的模型。
咦,报错了!
Failed to save LLM settings: Port is not reacjable sevice on loopback address from inside the Anything LLM container. Please use host.docker.internal, a real machine IP, or domain to connect to your service.
哦,原因是AnythingLLM是运行在Docker容器中的,无法连接本地环回地址,得用这个地址:`**http://host.docker.internal**:11434` ,并选择LLM(llama3)。
- AnythingLLM 测试
Embedding 和向量数据库配置
可以选择AnythingLLM 自带的 AnythingLLMEmbedder,以及默认使用内置的向量数据库 LanceDB。
四、AnythingLLM 测试
1. 配置worksapce
点击`New Workspace`新建文档库,填写名称testanythingllm。
我们将本笔记存储为简单的txt文件,作为LLM的外部文档。点击按钮开始添加文档,并将文档`Move to Workspace,然后`点击`Save and Embed,`出现`Workspace updated successfully`就表示配置已经完成。
2. 比较测试
回到主页面,输入问题“如何基于ollama+anything构建知识库”,结果见下图,可以看到结果基本正确。
作为对比,我们看一下,llama3本身的答案:是很通用的答案,与ollama和anythingllm没有联系。
我们把llm换成对中文支持比较好的llama2 chinese版,看看这个问题的结果。
可以看到,基于llama2中文版的AnythingLLM结果还是比较理想的。类似的,后面直接基于llama2的回答结果就有点“胡思乱语”了。
五、小结
本文首先介绍了LLM在落地应用中的不足,引入了RAG这个框架和原理,介绍了RAG在私有知识库中的重要作用。以Ollama和AnythingLLM为实现手段,构建了并测试了本地知识库。测试结果表明,有了RAG的加持,LLM的回答结果更加贴切,有效。
那么,如何系统的去学习大模型LLM?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~
篇幅有限,部分资料如下:
👉LLM大模型学习指南+路线汇总👈
💥大模型入门要点,扫盲必看!
💥既然要系统的学习大模型,那么学习路线是必不可少的,这份路线能帮助你快速梳理知识,形成自己的体系。
👉大模型入门实战训练👈
💥光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉国内企业大模型落地应用案例👈
💥《中国大模型落地应用案例集》 收录了52个优秀的大模型落地应用案例,这些案例覆盖了金融、医疗、教育、交通、制造等众多领域,无论是对于大模型技术的研究者,还是对于希望了解大模型技术在实际业务中如何应用的业内人士,都具有很高的参考价值。 (文末领取)
💥《2024大模型行业应用十大典范案例集》 汇集了文化、医药、IT、钢铁、航空、企业服务等行业在大模型应用领域的典范案例。
👉LLM大模型学习视频👈
💥观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 (文末领取)
👉640份大模型行业报告👈
💥包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉获取方式:
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓