❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
大家好,我是蚝油菜花,今天跟大家分享一下 AnythingLLM 这个能够将任何文档、资源转换为 AI 知识库,构建私人 AI 助手的强大应用。
🚀 快速阅读
AnythingLLM 是一个全栈应用程序,能够将任何文档、资源转换为上下文,以便大语言模型(LLM)在聊天期间作为参考使用。
- 核心功能:支持多用户管理、多种 LLM 和向量数据库,提供智能聊天功能。
- 技术原理:通过工作区隔离不同内容,确保上下文清晰,并支持本地和云部署。
AnythingLLM 是什么
AnythingLLM 是一个全栈应用程序,旨在将任何文档、资源(如网址链接、音频、视频)或内容片段转换为上下文,以便大语言模型(LLM)在聊天期间作为参考使用。该应用程序允许用户选择使用哪个 LLM 或向量数据库,并支持多用户管理和权限设置。
通过 AnythingLLM,用户可以轻松构建一个私有 ChatGPT,不再受制于第三方平台。您可以本地运行,也可以远程托管,并能够与您提供的任何文档智能聊天。
AnythingLLM 的主要功能
- 多用户实例支持和权限管理:支持多个用户同时使用,管理员可以设置不同用户的权限。
- 工作区内的智能体 Agent:Agent 可以浏览网页、运行代码等,帮助用户更高效地处理任务。
- 可嵌入聊天窗口:为您的网站定制的可嵌入聊天窗口,方便集成到现有系统中。
- 多种文档类型支持:支持 PDF、TXT、DOCX 等多种文档格式。
- 文档管理:通过简单的用户界面管理向量数据库中的文档。
- 两种对话模式:提供“聊天”和“查询”两种模式,满足不同的需求。
- 引用文档内容:聊天中会自动引用相关文档的内容,确保信息准确。
- 高效处理超大文档:只需要一次嵌入即可处理超大文档,节省时间和成本。
- 开发者 API:提供全套的开发人员 API,便于自定义集成。
AnythingLLM 的技术原理
- 前端:基于 ViteJS + React 构建,提供直观的用户界面,方便用户创建和管理 LLM 可使用的所有内容。
- 后端:基于 NodeJS Express 服务器,处理所有交互并进行向量数据库管理和 LLM 交互。
- Docker:提供 Docker 指令和构建过程,方便用户从源代码构建和部署。
- 文档收集器:基于 NodeJS Express 服务器,负责从 UI 处理和解析文档。
AnythingLLM 的最小要求
为了确保 AnythingLLM 的顺利运行,建议满足以下最低要求:
- 内存:至少 2GB RAM
- 磁盘存储:推荐 10GB 以上,具体取决于存储的数据量(文档、向量、模型等)
- 软件:需要安装
docker
,以及yarn
和node
(用于本地开发) - LLM 访问:需要访问本地或远程运行的语言模型
如何运行 AnythingLLM
1. 设置开发环境
- 安装依赖:在仓库根目录下运行
yarn setup
,填充每个应用程序部分所需的.env
文件。 - 启动服务器:运行
yarn dev:server
启动本地服务器。 - 启动前端:运行
yarn dev:frontend
启动本地前端。 - 启动文档收集器:运行
yarn dev:collector
启动文档收集器。
2. 自托管部署
Mintplex Labs 提供了多种部署方法,包括 Docker、AWS、GCP、Digital Ocean 和 Render.com。下面选择 Docker 作为部署方法进行详细介绍。
推荐使用 Docker 进行部署
为了确保 AnythingLLM 的最佳性能和稳定性,推荐使用 Docker 化部署。以下是详细的步骤:
1. 拉取最新镜像
首先,从 Docker Hub 拉取最新的 AnythingLLM 镜像:
docker pull mintplexlabs/anythingllm
2. 持久化存储
为了确保数据在容器重启后不会丢失,建议将容器的存储卷挂载到主机的文件夹中。这样可以在更新镜像时保留现有数据。
Linux/MacOS
export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm
Windows
# 在 PowerShell 终端中运行
$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;
3. 使用 Docker Compose
如果你更喜欢使用 Docker Compose,可以使用以下配置文件:
version: '3.8'
services:
anythingllm:
image: mintplexlabs/anythingllm
container_name: anythingllm
ports:
- "3001:3001"
cap_add:
- SYS_ADMIN
environment:
- STORAGE_DIR=/app/server/storage
- JWT_SECRET="make this a large list of random numbers and letters 20+"
- LLM_PROVIDER=ollama
- OLLAMA_BASE_PATH=http://127.0.0.1:11434
- OLLAMA_MODEL_PREF=llama2
- OLLAMA_MODEL_TOKEN_LIMIT=4096
- EMBEDDING_ENGINE=ollama
- EMBEDDING_BASE_PATH=http://127.0.0.1:11434
- EMBEDDING_MODEL_PREF=nomic-embed-text:latest
- EMBEDDING_MODEL_MAX_CHUNK_LENGTH=8192
- VECTOR_DB=lancedb
- WHISPER_PROVIDER=local
- TTS_PROVIDER=native
- PASSWORDMINCHAR=8
volumes:
- anythingllm_storage:/app/server/storage
restart: always
volumes:
anythingllm_storage:
driver: local
driver_opts:
type: none
o: bind
device: /path/on/local/disk
4. 访问用户界面
完成上述步骤后,访问 http://localhost:3001
即可使用 AnythingLLM 的用户界面。所有数据和进度将持久保存,即使在容器重建或从 Docker Hub 拉取新镜像后也不会丢失。
常见问题解决
无法连接到本地服务
如果你在 Docker 容器中无法连接到主机上的服务(如 Chroma、LocalAI 或 LMStudio),请确保将 localhost
替换为 host.docker.internal
。例如,如果 Ollama 在主机上运行并绑定到 http://127.0.0.1:11434
,则应将连接 URL 设置为 http://host.docker.internal:11434
。
注意:在 Linux 上,http://host.docker.internal
不可用,应使用 http://172.17.0.1
作为替代。
API 无法工作,无法登录,LLM 离线
如果你在远程机器(如 EC2)上运行 Docker 容器,并且无法通过 http://localhost:3001
访问 API,请确保在 frontend/.env.production
中设置正确的 API 基础 URL。例如,如果 Docker 实例的 IP 地址为 192.186.1.222
,则应将 VITE_API_BASE
设置为 VITE_API_BASE="http://192.186.1.222:3001/api"
。
Ollama 问题
如果你遇到与 Ollama 相关的错误(如 llama:streaming - could not stream chat. Error: connect ECONNREFUSED 172.17.0.1:11434
),请参考 Ollama 常见问题 进行排查。
资源
- GitHub 仓库:https://github.com/Mintplex-Labs/anything-llm
- AnythingLLM 官方文档:https://docs.anythingllm.com
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 微信公众号|搜一搜:蚝油菜花 🥦