问答社区
AnythingLLM 面向所有人的超高效和开源企业级文档聊天机器人解决方案。
AnythingLLM:一个符合业务标准的文档聊天机器人。
面向所有人的超高效和开源企业级文档聊天机器人解决方案。
一个全栈应用程序,使您能够将任何文档、资源或内容转换为任何 LLM 都可以在聊天期间用作参考的上下文。此应用程序允许您选择要使用的 LLM 或向量数据库。目前,该项目支持Pinecone,ChromaDB等用于矢量存储,OpenAI用于LLM/聊天。
开源:https://github.com/hanselpetter/AnythingLLM/archive/refs/heads/master.zip
SSH终端执行:git@github.com:hanselpetter/AnythingLLM.git
AnythingLLM 旨在成为一个全栈应用程序,您可以在其中使用商用现成的 LLM 或流行的开源 LLM 和 vectorDB 解决方案。
Anything LLM 是一个全栈产品,您可以在本地运行,也可以远程托管,并能够与您提供的任何文档进行智能聊天。
AnythingLLM 将您的文档划分为称为 的对象。工作区的功能很像线程,但增加了文档的容器化。工作区可以共享文档,但它们不会相互通信,因此您可以保持每个工作区的上下文干净。workspaces
AnythingLLM的一些很酷的功能
- 多用户实例支持和监督
- 通过简单的 UI 以原子方式管理矢量数据库中的文档
- 两种聊天模式和 .对话保留了以前的问题和修改。查询是针对您的文档的简单 QA
conversation
query
- 每个聊天回复都包含链接到原始内容的引文
- 简单的技术堆栈,可实现快速迭代
- 100% 云部署就绪。
- “自带法学硕士”模式。仍在进行中 - 目前仅支持 OpenAI
- 极其高效的节约成本措施,用于管理超大型文档。您永远不会为多次嵌入大量文档或成绩单付费。比其他文档聊天机器人解决方案更具成本效益 90%。
- 用于自定义集成的完整开发人员 API!
此 monorepo 由三个主要部分组成:
collector
:使您能够快速将在线资源或本地文档转换为 LLM 可用格式的 Python 工具。frontend
:一个 viteJS + React 前端,您可以运行它来轻松创建和管理 LLM 可以使用的所有内容。server
:一个 nodeJS + express 服务器,用于处理所有交互并执行所有 vectorDB 管理和 LLM 交互。
yarn
在您的机器上node
python
3.9+ 用于在 .collector/
- 访问像 , .
GPT-3.5
GPT-4
- 一个 Pinecone.io 免费帐户*。 *您可以使用直接替换来代替这些。这只是最容易快速启动和运行的方法。我们支持多个矢量数据库提供商。
yarn setup
从项目根目录。- 这将填写您在每个应用程序部分中所需的文件。在继续之前先填写这些内容,否则事情将无法正常进行。
.env
- 这将填写您在每个应用程序部分中所需的文件。在继续之前先填写这些内容,否则事情将无法正常进行。
cd frontend && yarn install && cd ../server && yarn install
从项目根目录。
要在本地启动服务器(从存储库的根目录运行命令):
- 确保已设置并填写。
server/.env.development
yarn dev:server
要在本地启动前端(从存储库的根目录运行命令):
- 确保已设置并填写。
frontend/.env
- 确保
VITE_API_BASE="http://localhost:3001/api"
yarn dev:frontend
接下来,您将需要一些内容进行嵌入。这可能是 Youtube 频道、Medium 文章、本地文本文件、Word 文档,等等。这是您将使用存储库部分的位置。collector/
- 创建问题
- 创建分支名称格式为
<issue number>-<short name>
- 呀
Mintplex Labs Inc 的 AnythingLLM 包含收集匿名使用信息的遥测功能。
我们使用这些信息来帮助我们了解 AnythingLLM 的使用方式,帮助我们确定新功能和错误修复工作的优先级,并帮助我们提高 AnythingLLM 的性能和稳定性。
在服务器或 docker .env 设置中设置为“true”以选择退出遥测。DISABLE_TELEMETRY
DISABLE_TELEMETRY="true"
我们只会跟踪有助于我们做出产品和路线图决策的使用详细信息,特别是:
- 安装版本
- 添加或删除文档时。没有关于文档的信息。只是事件发生了。这给了我们一个使用的概念。
- 正在使用的矢量数据库的类型。让我们知道哪个矢量数据库提供程序最常用于在该提供程序的更新到达时确定更改的优先级。
- 正在使用的 LLM 类型。让我们了解最受欢迎的选择,并在该提供商的更新到达时确定更改的优先级。
- 聊天已发送。这是最常规的“事件”,让我们了解该项目在所有装置中的日常活动。同样,只发送事件 - 我们没有关于聊天本身的性质或内容的信息。
您可以通过查找调用的所有位置来验证这些声明。此外,这些事件将写入输出日志,因此您还可以查看发送的特定数据(如果启用)。不会收集 IP 或其他识别信息。遥测提供程序是 PostHog - 一种开源遥测收集服务。Telemetry.sendTelemetry
使用 AnythingLLM 的 Dockerized 版本可以更快、更完整地启动 AnythingLLM。
- 在您的计算机或计算机上安装 Docker。
git clone
此存储库并访问根目录。cd anything-llm
cd docker/
cp .env.example .env
以创建文件。.env
- 编辑文件并更新变量
.env
docker-compose up -d --build
要构建映像 - 这将需要一些时间。
构建过程完成后,您的 docker 主机将显示映像为联机。这会将应用构建为 .http://localhost:3001
- 要访问完整的应用程序,请访问您的浏览器。
http://localhost:3001
-
从 Workspace 设置中的 UI 上传文件
-
运行收集器脚本来获取外部数据(文章、URL 等)
docker exec -it --workdir=/app/collector anything-llm python main.py
-
运行收集器监视脚本以处理 hotdir 中的文件
docker exec -it --workdir=/app/collector anything-llm python watch.py
- 将合规文件上传到,它们将被处理并在 UI 中可用。
./collector/hotdir
- 更新并运行以使用新环境进行重建。
./docker/.env
docker-compose up -d --build
- 默认情况下,UID 和 GID 设置为 1000。这是 Docker 容器和大多数主机操作系统上的默认用户。如果主机用户 UID 和 GID 与文件中设置的内容不匹配,则可能会遇到权限问题。
.env
开箱即用,支持所有向量数据库。下面列出了任何需要特殊配置的向量数据库。
- 确保您的文件中有
./docker/.env
#./docker/.env
...other configs
VECTOR_DB="chroma"
CHROMA_ENDPOINT='http://host.docker.internal:8000' # Allow docker to look on host port, not container.
...other configs
您可能正在远程计算机(如 EC2)或其他实例上运行 docker 容器,其中可访问的 URL 不是,而是类似 - 在这种情况下,您需要做的就是在运行之前将以下内容添加到您的http://localhost:3001
http://193.xx.xx.xx:3001
frontend/.env.production
docker-compose up -d --build
# frontend/.env.production
GENERATE_SOURCEMAP=false
VITE_API_BASE="http://<YOUR_REACHABLE_IP_ADDRESS>:3001/api"
例如,如果 docker 实例在 you 上可用,则如 所示。192.186.1.222
VITE_API_BASE
VITE_API_BASE="http://192.186.1.222:3001/api"
frontend/.env.production