随着大语言模型(LLM)的快速发展,将企业内部知识库与 AI 工具结合成为热门解决方案。作为一名技术探索者,我对构建私有知识库充满兴趣,也希望测试 LLM 的能力,尤其是像 Ollama 和千问这类模型。此外,AnythingLLM 是一个开源项目,具有较高的社区关注度,因此我决定对其进行深入调研。
基于 RAG(检索增强生成)技术,AnythingLLM[1] 提供了从数据处理到用户界面的全栈解决方案,支持构建企业内部的智能知识库。其模块化架构和灵活部署方式,使其成为企业和个人开发者进行知识管理和 AI 项目实践的重要工具。
RAG 原理概述
简介
RAG(Retrieval-Augmented Generation) 是一种结合了信息检索和语言模型的技术。它通过从大规模的知识库中检索相关信息,并利用这些信息来指导语言模型生成更准确和深入的答案。这种方法由 Meta AI 研究人员在 2020 年提出,旨在解决大型语言模型在信息滞后、模型幻觉、私有数据匮乏和内容不可追溯等问题。
RAG 就是可以开卷回复的 LLM。其发展历程:Naive RAG 包含索引、检索、生成三步,存在 召回率低、Prompt 拼接问题。Advanced RAG 优化索引与检索,引入 预检索、后检索策略与数据清洗 提升效率。Modular RAG 实现 模块化流水线与端到端训练,具备更高的 灵活性与适应性。
背景与挑战
尽管 LLM 在处理复杂任务方面表现出色,但在以下三个方面存在局限:
-
知识局限性:大模型的训练数据来自公开数据源,无法访问非公开和实时数据。
-
幻觉问题:模型有时会生成错误答案,特别是在缺少特定领域知识时。
-
数据安全性:涉及内部私有数据时,企业面临数据泄露风险。
RAG 技术通过向量检索与生成模型结合,显著提高了数据处理的深度和准确性。
工作原理
RAG 的工作流程包括两个主要阶段:
- 数据准备阶段
- 将内部私有数据向量化存入数据库,构建检索索引。
- 用户应用阶段
- 根据用户的 Prompt 检索相关内容,将结果与原 Prompt 组合,生成模型回答。
通过这种方式,RAG 可以搭建团队内部的本地知识库,弥补大模型的知识局限性,解决幻觉和数据隐私问题。然而,RAG 也存在一些主要限制:
-
数据依赖性强:RAG 系统的效果严重依赖于内置知识库的数据质量和覆盖范围。
-
检索准确性受限:检索算法可能因索引构建不完善或查询表达模糊导致相关性降低。
-
模型推理成本高:大型语言模型的推理消耗大量资源,尤其在频繁查询和大规模应用场景中。
-
技术复杂度高:构建和维护 RAG 系统需要强大的数据管理与模型集成能力,涉及嵌入、索引构建和检索优化等多个复杂组件。
-
响应延迟与性能瓶颈:在高负载下,检索与推理过程可能导致响应速度变慢,尤其在硬件性能受限的环境中。
AnythingLLM 简介
AnythingLLM 是 Mintplex Labs Inc. 开发的一款开源 ChatGPT 等效工具,用于在安全的环境中与文档进行交互。它融合了从数据处理到用户界面的所有技术,适用于构建个人或企业私有化的知识库。
核心特点
-
多用户支持和权限管理:支持多个用户和不同权限设置。
-
支持多种文档类型:PDF、TXT、DOCX、JSON 等。
-
内置数据连接器:GitHub、GitLab、YouTube、链接抓取、Confluence 等。
-
多种向量数据库支持:如 LanceDB(默认)、Pinecone、Weaviate 等。
-
灵活的 LLM 集成:支持 OpenAI、Azure OpenAI、Ollama、LM Studio、LocalAI 等。
-
成本节约措施:大文档只需嵌入一次,显著降低成本。
-
开发者 API 支持:便于自定义和扩展。
在 AnythingLLM 中选择 LLM
技术架构
-
收集器(Collector):将本地或在线资源转化为 LLM 可用格式。
-
前端(Frontend):基于 ViteJS 和 React 构建的用户界面。
-
服务器(Server):基于 NodeJS 和 Express 的后端,管理数据库和 LLM 交互。
构建自己的知识库:详细步骤
要在 AnythingLLM 中构建一个私有知识库,可以按照以下步骤操作:
-
上传文档:将 PDF、TXT、DOCX、JSON 等支持的文档格式上传到系统中。
-
嵌入向量生成(Embedding):
-
使用配置的嵌入模型(如 OpenAI、Azure OpenAI、LocalAI)将文档转化为向量数据。
-
确保配置正确的嵌入模型以匹配项目需求。
- 存储到向量数据库:
-
选择适合的向量数据库,如 LanceDB(默认)、Pinecone、Weaviate。
-
配置数据库连接,保证数据安全和高效检索。
- 查询与回答:
-
用户输入查询,系统将其转化为查询向量。
-
向量数据库检索最匹配的内容,调用大语言模型(如 OpenAI GPT)生成答案。
-
返回最终答案,链接相关文档和参考。
在 Docker 中安装 AnythingLLM
参考:Docker 安装指南[2]
export STORAGE_LOCATION=$HOME/anythingllm && \ mkdir -p $STORAGE_LOCATION && \ touch "$STORAGE_LOCATION/.env" && \ docker run -d \ --cap-add SYS_ADMIN \ --network host \ --add-host=host.docker.internal:host-gateway \ -v ${STORAGE_LOCATION}:/app/server/storage \ -v ${STORAGE_LOCATION}/.env:/app/server/.env \ -e STORAGE_DIR="/app/server/storage" \ mintplexlabs/anythingllm
注意:使用 host network,否则容器中无法与 Ollama 通信。
若要在本机运行 Ollama,可以使用下面的命令:
ollama run qwen2.5:14b --keepalive 0
这将会运行 qwen2.5:14b,你也可以选择其他大模型。
打开浏览器:http://localhost:3001
注意:必须选择要接入的 LLM,可以使用
local
或cloud
Desktop 部署
AnythingLLM 内置的 LLM 引擎支持下载流行的模型如 LLama-3、Phi-3 等,支持 CPU 和 GPU。本地运行适用于试用其基本功能。
参考:Desktop 安装概览[3]
局限性:缺少多用户支持、浏览器插件、用户和 Workspace 管理等功能。
AnythingLLM 的对话界面
使用体验与问题记录
如果你的电脑性能堪忧的话,强烈不建议你在本地运行大模型。你会遇到各种性能问题,例如下面看到的,在上传文件嵌入到 Workspace 时卡住了。
本地运行大模型时遇到性能问题
性能与硬件限制
-
构建向量数据库特别慢:支持的文档格式很多,但在我的 MacBook Pro 2015(16G 内存,无 M 系列芯片)上,构建向量数据库的过程非常耗时。这是因为文档需要被嵌入模型处理成高维向量,并存储到数据库中。该过程涉及复杂的计算和大量内存操作,导致处理一个 7M 的 JSON 数据需要 3 分钟,而嵌入(Embed)到 Workspace 则需十几分钟,且时常失败。
-
高性能需求:由于硬件性能受限,运行本地 LLM 十分吃力。运行 Ollama 尚可,但进行 RAG 操作时性能明显不足。
查询与响应延迟
- 响应慢:在聊天模式下,系统反馈非常慢,通常需要等待几分钟才能得到回复。
常见错误提示与解决方案
-
查询执行失败:遇到错误提示
Failed to execute query stream: Invalid input, No vector column found to match with the query vector dimension: 4096
。 -
解决方案:查看官方问题跟踪 [BUG]: Could not respond to message. LanceDBError: No vector column found to create index #1131[4]。
如何改善用户体验
- 使用商用大模型 API:
- 如果硬件资源有限,可以考虑使用 OpenAI、Azure OpenAI 等商用大模型 API。这些服务在稳定性和性能方面具有优势,尤其适用于大规模文档处理和实时查询。
- 优化硬件环境:
- • 使用带有 GPU 加速的现代硬件,推荐内存不低于 32GB,显卡支持 CUDA 的 GPU(如 NVIDIA RTX 系列)来显著提升向量嵌入和模型推理速度。
- 调整 AnythingLLM 配置:
-
Chat Setting(聊天设置):配置聊天相关参数,包括模型选择、响应超时、查询历史记录存储策略等。
-
Agent 设置:根据项目需求启用不同类型的代理,如检索代理、对话代理和任务代理。
-
资源分配与性能优化:在 Docker 或 Kubernetes 部署环境中,设置 CPU、内存和 GPU 加速参数。调整嵌入批处理大小(Batch Size)、线程池大小等性能参数,优化推理与检索性能。
- 分布式部署与扩展:
-
Kubernetes 集群部署:
-
使用 Kubernetes 编排多个 AnythingLLM 实例,确保高可用性和自动扩展能力。
-
部署配置包括 ReplicaSet、Pod 自动缩放(HPA)、负载均衡(Service)、存储卷(PersistentVolumeClaim)等。
-
云服务部署:
-
在云平台上运行托管服务,使用容器服务管理。
-
配置高性能数据库(如 RDS、Firestore),并启用 CDN 加速文件传输。
-
数据库和缓存扩展:
-
使用分布式数据库(如 Redis、Pinecone、Weaviate)提高查询速度。
-
启用数据库主从复制与自动备份,确保数据持久性和高可用性。
- 升级数据库存储方案:
- • 替换默认数据库 LanceDB,考虑使用更高性能的向量数据库如 Pinecone、Weaviate 等,以减少查询延迟。
- 代码优化与插件扩展:
- 定制插件来适配特定任务,并启用数据缓存机制以减少频繁查询对资源的消耗。
总结与展望
AnythingLLM 是一个功能全面的 RAG 解决方案,适用于企业内部知识库构建。通过结合向量检索与大语言模型,该平台提供了强大的文档问答能力。然而,部署和定制化需要一定的技术投入。未来的改进方向包括增强多数据库支持、更灵活的嵌入模型选择以及提升文档解析能力。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。