RAG API
配置用于文档索引和检索的检索增强生成 (RAG) API,该 API 使用 Langchain 和 FastAPI 构建。此 API 与 LibreChat 集成,可根据用户上传的文件提供具备上下文感知能力的响应。
RAG API 会对用户上传的文件进行索引,并检索相关段落以增强您的提示词,从而使 LibreChat 能够根据您的文档提供具有上下文感知能力的回复。它作为一个独立的 FastAPI 服务运行,并由 PostgreSQL + pgvector 数据库提供支持。
RAG 新手?
RAG API Presentation 更详细地解释了这一概念,并提供了相关视频链接。本页面涵盖了设置与配置说明。
可用性
RAG 可与 Agents 以及 Custom Endpoints、OpenAI、Azure OpenAI、Anthropic 和 Google 配合使用。
OpenAI Assistants 通过“检索 (Retrieval)”功能拥有其自身的 RAG 实现(详情请见此处)。由于 OpenAI 会同时收取文件存储和检索的费用,因此将 RAG API 与 Assistants API 结合使用仍然是有价值的。此集成计划在未来的更新中实现。
Docker 快速入门
对于 Docker,RAG API 已在默认的 docker-compose.yml 和 deploy-compose.yml 文件中配置好,包括 RAG_API_URL 的值。您只需要确保运行的是最新的镜像和 compose 文件即可。如果您不确定如何更新,请参阅 Updating LibreChat guide for Docker。
共享的 .env 文件
在使用默认的 Docker 设置时,.env 文件会在 LibreChat 和 RAG API 之间共享。请在同一个文件中定义 RAG 变量。完整列表请参阅 RAG API README。
选择您想要使用的 embeddings 提供商。
使用带有 OpenAI embeddings 的 RAG。 这是默认配置。
设置 RAG API URL。 将以下内容添加到您的 .env 文件中:
提供 OpenAI API 密钥(如果需要)。 如果您的 OpenAI API 密钥设置为 user_provided,请添加一个用于 embeddings 的密钥。如果您已经在 .env 文件中提供了 OpenAI 密钥,则可以跳过此步骤。
启动容器。
Lite 与完整镜像对比
Docker 默认使用 RAG API 的 "lite" 镜像 (registry.librechat.ai/danny-avila/librechat-rag-api-dev-lite:latest),该镜像仅支持来自 OpenAI 的远程嵌入,或您已配置的远程 HuggingFace/Ollama 服务。
对于本地 embeddings,请将 compose 文件中的镜像切换为完整构建版本:registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest。请在您的 Docker Compose Override File 中进行此更改。有关示例,请参阅项目根目录下的 docker-compose.override.yml.example。
如果您需要一个仅包含 PostgreSQL + pgvector 数据库和 Python API 的 compose 文件,请参阅项目根目录下的 rag.yml。
数据库存储
默认的 compose 文件将 pgvector/PostgreSQL 数据存储在 Docker 管理的 pgdata2 卷中。这是有意为之的:数据库文件无需直接从宿主机进行编辑,且使用托管卷可以避免常见的归属权和权限问题。面向用户且可编辑的文件(上传内容、日志、图像、MongoDB 数据和 NGINX 配置)则通过绑定挂载(bind-mounted)到项目文件夹中,以便在需要时从宿主机直接访问。
本地设置
非容器化设置需要更多手动操作。请遵循 RAG API repo 中的说明。
在您的 LibreChat .env 文件中将 RAG_API_URL 设置为您设置中 API 可访问的地址。这与 Docker 不同,在 Docker 中,该值已在默认的 docker-compose.yml 文件中设置。
配置
通过 .env 文件中 API 可访问的环境变量来设置 RAG API 选项。除了您所选提供商所需的凭据和路径外,大多数选项都是可选的。在默认设置中,仅需 RAG_OPENAI_API_KEY。
环境变量
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | RAG API 服务的 URL。 | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | 用于 embeddings 的 OpenAI API key。将覆盖用于 RAG 的 OPENAI_API_KEY。 | # RAG_OPENAI_API_KEY=sk-your-key |
| RAG_OPENAI_BASEURL | string | 用于 RAG 嵌入的自定义 OpenAI 基础 URL。 | # RAG_OPENAI_BASEURL= |
| RAG_USE_FULL_CONTEXT | boolean | 获取整个文件上下文,而不是仅获取前 4 个结果。默认值:false。 | # RAG_USE_FULL_CONTEXT=true |
| EMBEDDINGS_PROVIDER | string | Embeddings 提供商:openai、azure、huggingface、huggingfacetei 或 ollama。默认值:openai。 | # EMBEDDINGS_PROVIDER=openai |
| EMBEDDINGS_MODEL | string | 要使用的 Embeddings 模型。默认值取决于提供商。 | # EMBEDDINGS_MODEL=text-embedding-3-small |
| RAG_PORT | number | RAG API 运行的端口。默认值:8000。 | # RAG_PORT=8000 |
| RAG_HOST | string | RAG API 的主机名。默认值:0.0.0.0。 | # RAG_HOST=0.0.0.0 |
| COLLECTION_NAME | string | 向量数据库集合名称。默认值:testcollection。 | # COLLECTION_NAME=testcollection |
| CHUNK_SIZE | number | 文本块的大小。默认值:1500。 | # CHUNK_SIZE=1500 |
| CHUNK_OVERLAP | number | 分块之间的重叠。默认值:100。 | # CHUNK_OVERLAP=100 |
| OLLAMA_BASE_URL | string | 使用 Ollama 嵌入时 Ollama 的基础 URL。 | # OLLAMA_BASE_URL=http://host.docker.internal:11434 |
凭据优先级
OPENAI_API_KEY 可用于 RAG 嵌入,但 RAG_OPENAI_API_KEY 会覆盖它以避免凭据冲突。
有关变量及其描述的完整列表,请参阅 RAG API repo。
使用方法
一旦 RAG API 运行起来,它就会自动与 LibreChat 集成。当用户将文件上传到对话中时,API 会对其进行索引,并将其用于上下文感知的响应。
将文件上传到对话中。 如果未配置 RAG_API_URL 或无法访问,上传将会失败。
像往常一样聊天。 当用户与模型交互时,RAG API 会根据输入从索引文件中检索相关段落,并使用它们来增强提示词。
控制何时查询文件。 默认情况下,每当对话中附有文件时,系统都会在发送新消息时查询向量存储。请据此撰写您的提示词。
在对话设置中关闭 Resend Files,以便仅在文件明确附加到消息时才查询这些文件。
复用已索引的文件。 上传一次文件,然后即可从侧边栏将其附加到任何新消息或对话中。
文件必须位于“Host”存储中。“OpenAI”文件处理方式不同,且仅限于 Assistants 使用,因此在选择并激活 Assistants endpoint 时,不得上传这些文件。您可以在侧边栏(Side Panel)中查看和管理您的文件。
故障排除
如果您在设置或使用 RAG API 时遇到问题:
- 请确认所有必需的环境变量已在您的
.env文件中正确设置。 - 确保向量数据库已配置且可访问。
- 验证 OpenAI API 密钥或其他提供商凭据是否有效。
- 检查 LibreChat 和 RAG API 日志中是否存在错误或警告。
如果问题仍然存在,请参考 RAG API 文档,或在 GitHub Discussions 或 Discord 上向 LibreChat 社区寻求帮助。
这篇指南怎么样?