什么是 RAG
RAG,即检索增强生成(Retrieval-Augmented Generation),是一种先进的自然语言处理技术架构,它旨在克服传统大型语言模型(LLMs)在处理开放域问题时的信息容量限制和时效性不足。RAG的核心机制融合了信息检索系统的精确性和语言模型的强大生成能力,为基于自然语言的任务提供了更为灵活和精准的解决方案。
RAG与LLM的关系
RAG不是对LLM的替代,而是对其能力的扩展与升级。传统LLM受限于训练数据的边界,对于未见信息或快速变化的知识难以有效处理。RAG通过动态接入外部资源,使LLM得以即时访问和利用广泛且不断更新的知识库,进而提升模型在问答、对话、文本生成等任务中的表现。此外,RAG框架强调了模型的灵活性和适应性,允许开发者针对不同应用场景定制知识库,从而满足特定领域的需求。
下图是 RAG 的一个大致流程:
RAG就像是为大型语言模型(LLM)配备了一个即时查询的“超级知识库”。这个“外挂”不仅扩大了模型的知识覆盖范围,还提高了其回答特定领域问题的准确性和时效性。
想象一下,传统的LLM像是一个博学多才但记忆力有限的学者,它依赖于训练时吸收的信息来回答问题。而RAG,则是这位学者随时可以连线的庞大图书馆和实时资讯网络。当面临复杂或最新的查询时,RAG能让模型即时搜索并引用这些外部资源,就像学者翻阅最新的研究资料或在线数据库一样,从而提供更加精准、全面和最新的答案。这种设计尤其适用于需要高度专业化或快速更新信息的场景,比如医学咨询、法律意见、新闻摘要等。
基于此,RAG 技术特别适合用来做个人或企业的本地知识库应用,利用现有知识库资料结合 LLM 的能力,针对特定领域知识的问题能够提供自然语言对话交互,且答案比单纯用 LLM 准确性要高得多。
实践
现成方案
现成的方案有很多,比如:
- https://www.53ai.com/news/gerentixiao/1889.html
- https://github.com/chatchat-space/Langchain-Chatchat
- https://www.anjhon.top/llms-mac-local-rag
- https://github.com/1Panel-dev/MaxKB?tab=readme-ov-file
- https://www.youtube.com/watch?v=Gh4plFSbW8M
- https://qanything.ai/
本文将采用 Ollama + Qwen2.5 + AnythingLLM
来实现本地知识库
Ollama 大法
Ollama 与 LLM 的关系可以这样理解:Ollama 本身不是 LLM,而是一个服务于 LLM 的工具。它提供了一个平台和环境,使得开发者和研究人员能够在本地机器上轻松地运行、测试和部署各种大型语言模型。
GitHub: https://github.com/ollama/ollama
下载安装 Ollama 和大模型
下载地址:https://www.ollama.com/download ,支持 Windows、Mac、Linux。
当然你也可以用 Docker 安装镜像,官方镜像在 https://hub.docker.com/r/ollama/ollama ,更多细节请参考 GitHub 的 Readme: https://github.com/ollama/ollama
当你运行 ollama --version
命令成功查询到版本时,表示 Ollama 的安装已经顺利完成。
接下来便可以用 pull
命令从在线模型库下载模型,比如:
ollama pull llama2
还有更简单的方法直接使用 run
命令,它会在运行之前自动检查模型是否下载,如果没有会自动下载:
ollama run llama3
但因为我们想搭建本地知识库,且以中文为主,所以需要对中文支持最好的模型:
Ollama官方提供的模型中,对中文支持较好的有:
- Llama2-Chinese:基于Llama2微调。搜“Chinese”关键词即可找到。
- Qwen 1.5:阿里的通义千问,支持多语言和长文本上下文。
阿里的 通义Qwen2
模型刚刚开源,是一个非常适合的选择:
“阿里开源的通义Qwen2模型,现阶段是规模最大的开源模型之一。模型在中文、英文语料基础上,增加了27种语言的高质量数据;增大了上下文长度支持,最高达到128K tokens。”
顺序介绍一下中文大模型,可以通过此仓库了解:https://github.com/HqWu-HITCS/Awesome-Chinese-LLM
安装并运行 Qwen2 模型,注意由于我笔记本配置问题,所以选用的是 7B
参数的模型:
ollama run qwen2:7b
模型下载的默认路径是:/Users/${home}/.ollama/models
以下是我的机器配置,mac Intel 芯片:
安装完成后就可以对话了:
Open Web UI
通过命令行交互不太友好,因此我们需要一个更直观的UI界面来与模型交互。Open Web UI 是一个通过 Docker 部署的简单软件:https://github.com/open-webui/open-webui
部署完成后,使用界面友好度大幅提升,但由于我们是要搭建个人本地知识库,需要对知识库有更多的掌控,因此选择更合适的 AnythingLLM 软件。
AnythingLLM
首先下载安装 AnythingLLM : https://useanything.com/download
安装完成后的界面如下:
然后我们开始选择模型:
这里我们要用服务器模式启动 Ollama,它其实有两种模式:
- 聊天模式
- 服务器模式
所谓服务器模式,即 Ollama 在后端运行大模型,然后开放一个端口供其他软件调用。启动方法非常简单,在终端输入:ollama serve
用服务器模式启动 Ollama 后:
- 在AnythingLLM界面中选择
Ollama
- 在 Base URL 中填入:http://127.0.0.1:11434
- 模型选择之前下载的 Qwen2.5 7b
- Token context window 可以先用默认的 4096
完成以上设置后,可以搭建一个知识库,会涉及到两个关键:
- Embedding Model,嵌入模型,负责把高维数据转化为低维度的嵌入空间。
- Vector Store,向量数据库,用来高效处理大规模向量数据。
默认设置后,下一步是填写个人信息,接着为你的 workspace 起名。创建完成后,你就可以在建好的 workspace 中上传个人知识库内容了:
你可以上传文件(支持多种格式 pdf word...),甚至是一个外部的网站链接:
数据源还可以是其他知识网站:
你可以根据项目创建Workspace,并导入相关文档或网页。聊天模式有两种设置:
- 对话模式:模型综合文档与自身知识储备回答。
- 查询模式:模型针对文档进行回答。
![查询模式](https://image.222888.top/h/
24/0811/66b79010473da.webp)
例如,我上传了一个《劳动合同法》的pdf文件,用查询模式进行对话:
尽管不太准确,但内容确实是从文件中找到的。上传更多计算机相关的 markdown
文件后,问答效果如下:
至此,我的本地个人知识库就搭建完成了!
参考
- https://sspai.com/post/85193
- https://medium.com/@huangyihe/中文大模型-本地运行-b30e14d4d6ac