Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

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.ymldeploy-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 文件中:

RAG_API_URL=http://host.docker.internal:8000

提供 OpenAI API 密钥(如果需要)。 如果您的 OpenAI API 密钥设置为 user_provided,请添加一个用于 embeddings 的密钥。如果您已经在 .env 文件中提供了 OpenAI 密钥,则可以跳过此步骤。

RAG_OPENAI_API_KEY=sk-your-openai-api-key-example

启动容器。

docker compose up -d

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

环境变量

KeyTypeDescriptionExample
RAG_API_URLstringRAG API 服务的 URL。RAG_API_URL=http://host.docker.internal:8000
RAG_OPENAI_API_KEYstring用于 embeddings 的 OpenAI API key。将覆盖用于 RAG 的 OPENAI_API_KEY。# RAG_OPENAI_API_KEY=sk-your-key
RAG_OPENAI_BASEURLstring用于 RAG 嵌入的自定义 OpenAI 基础 URL。# RAG_OPENAI_BASEURL=
RAG_USE_FULL_CONTEXTboolean获取整个文件上下文,而不是仅获取前 4 个结果。默认值:false。# RAG_USE_FULL_CONTEXT=true
EMBEDDINGS_PROVIDERstringEmbeddings 提供商:openai、azure、huggingface、huggingfacetei 或 ollama。默认值:openai。# EMBEDDINGS_PROVIDER=openai
EMBEDDINGS_MODELstring要使用的 Embeddings 模型。默认值取决于提供商。# EMBEDDINGS_MODEL=text-embedding-3-small
RAG_PORTnumberRAG API 运行的端口。默认值:8000。# RAG_PORT=8000
RAG_HOSTstringRAG API 的主机名。默认值:0.0.0.0。# RAG_HOST=0.0.0.0
COLLECTION_NAMEstring向量数据库集合名称。默认值:testcollection。# COLLECTION_NAME=testcollection
CHUNK_SIZEnumber文本块的大小。默认值:1500。# CHUNK_SIZE=1500
CHUNK_OVERLAPnumber分块之间的重叠。默认值:100。# CHUNK_OVERLAP=100
OLLAMA_BASE_URLstring使用 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 社区寻求帮助。

这篇指南怎么样?