环境变量
配置应用程序环境的综合指南,使用 `.env` 文件。本文档是您了解和自定义环境变量的一站式资源,这些变量将决定您的应用程序在不同环境下的行为。
欢迎阅读使用 .env 文件配置应用程序环境的综合指南。本文档是您了解和自定义环境变量的一站式资源,这些变量将决定您的应用程序在不同环境下的行为方式。
虽然默认设置已为标准的 docker 安装提供了坚实的基础,但深入阅读本指南将揭示 LibreChat 的全部潜力。本指南旨在帮助您根据具体需求定制 LibreChat。了解如何调整语言模型的可用性、集成社交登录、管理自动审核系统等等。这一切都是为了让您能够掌控并微调 LibreChat,以获得最佳的用户体验。
提醒:请重启 LibreChat 以使配置更改生效
或者,您可以在 LibreChat 的主 docker-compose.yml 文件所在的目录下创建一个名为 docker-compose.override.yml 的新文件,在其中根据需要于 environment 下设置您的 .env 变量,或者修改主 docker-compose.yml 提供的默认配置,而无需直接编辑或复制整个文件。
更多信息请参阅:
-
我们的快速指南:
-
官方 Docker 文档:
-
您也可以在您的 LibreChat 文件夹中以及 GitHub 上查看 LibreChat 的覆盖文件示例:
服务器配置
端口
- 服务器监听特定端口。
PORT环境变量用于设置服务器监听的端口。默认情况下,它被设置为3080。
| Key | Type | Description | Example |
|---|---|---|---|
| HOST | string | 指定主机。 | HOST=localhost |
| PORT | number | 指定端口。 | PORT=3080 |
Trust proxy
使用距离 Express 应用程序最多 n 跳的地址。
req.socket.remoteAddress 是第一跳,其余地址从右到左在 X-Forwarded-For 标头中查找。
值为 0 表示第一个不受信任的地址将是 req.socket.remoteAddress,即没有反向代理。
TRUST_PROXY 环境变量的默认值设置为 1。
有关此内容的更多信息,请参阅 Express.js - trust proxy。
| Key | Type | Description | Example |
|---|---|---|---|
| TRUST_PROXY | number | 指定跳数。 | TRUST_PROXY=1 |
凭据配置
为了安全地存储凭据,您需要一个固定的密钥和 IV。您可以在此处为生产环境和开发环境设置它们。
| Key | Type | Description | Example |
|---|---|---|---|
| CREDS_KEY | string | 用于安全存储凭据的 32 字节密钥(十六进制为 64 个字符)。应用启动时必需。 | CREDS_KEY=f34be427ebb29de8d88c107a71546019685ed8b241d8f2ed00c3df97ad2566f0 |
| CREDS_IV | string | 用于安全存储凭据的 16 字节 IV(32 个十六进制字符)。应用启动所必需。 | CREDS_IV=e2341419ec3dd3d19b13a1a87fafcbfb |
警告
警告: 如果您不设置 CREDS_KEY 和 CREDS_IV,应用程序将在启动时崩溃。- 您可以使用此 密钥生成器 快速生成它们。
静态文件处理
| Key | Type | Description | Example |
|---|---|---|---|
| STATIC_CACHE_MAX_AGE | string | Cache-Control max-age(以秒为单位) | STATIC_CACHE_MAX_AGE=172800 |
| STATIC_CACHE_S_MAX_AGE | string | 用于共享缓存(CDN 和代理)的 Cache-Control s-maxage(以秒为单位) | STATIC_CACHE_S_MAX_AGE="86400" |
| DISABLE_COMPRESSION | boolean | 禁用静态文件的压缩。 | DISABLE_COMPRESSION=false |
| ENABLE_IMAGE_OUTPUT_GZIP_SCAN | boolean | 如果同一文件夹中存在已上传图片的 gzip 版本,则启用对其的服务。 | ENABLE_IMAGE_OUTPUT_GZIP_SCAN=true |
| ENABLE_STATIC_ASSET_BROTLI | boolean | 在可用时启用静态应用资源的预压缩 Brotli 版本服务。 | ENABLE_STATIC_ASSET_BROTLI=true |
行为:
为静态文件设置 Cache-Control 响应头。这些配置仅在 NODE_ENV 设置为 production 时生效。
- 取消注释
STATIC_CACHE_MAX_AGE以更改静态文件的本地max-age。默认设置为 2 天(172800 秒)。 - 取消注释
STATIC_CACHE_S_MAX_AGE以设置共享缓存(CDN 和代理)的s-maxage。默认设置为 1 天(86400 秒)。 - 取消注释
DISABLE_COMPRESSION以禁用静态文件的压缩。默认情况下,压缩是启用的。 - 取消注释
ENABLE_IMAGE_OUTPUT_GZIP_SCAN以启用对已压缩图像的扫描和提供服务功能,前提是这些图像已在同一文件夹中预先压缩,且具有相同的文件名及 .gz 扩展名。默认情况下,上传图像的 gzip 扫描功能处于禁用状态。 - 取消注释
ENABLE_STATIC_ASSET_BROTLI以在存在预压缩的.br版本时,提供静态应用资源的预压缩版本。启用后,对于 API 提供的静态文件,Brotli 的优先级高于 gzip。
警告
- 这仅影响由 API 服务器提供的静态文件,不适用于 Firebase、NGINX 或任何其他配置。
Index HTML 缓存控制
| Key | Type | Description | Example |
|---|---|---|---|
| INDEX_CACHE_CONTROL | string | index.html 的 Cache-Control 标头 | INDEX_CACHE_CONTROL=no-cache, no-store, must-revalidate |
| INDEX_PRAGMA | string | index.html 的 Pragma 标头 | INDEX_PRAGMA=no-cache |
| INDEX_EXPIRES | string | index.html 的 Expires 标头 | INDEX_EXPIRES=0 |
行为:
专门为 index.html 响应控制缓存头。默认情况下,这些设置会禁止缓存,以确保用户始终获取应用程序的最新版本。
注意
与为了性能而缓存的静态资源不同,index.html 文件的缓存头是单独配置的,以确保用户始终能获取到最新的应用程序外壳。
MongoDB 数据库
| Key | Type | Description | Example |
|---|---|---|---|
| MONGO_URI | string | 指定 MongoDB URI。 | MONGO_URI=mongodb://127.0.0.1:27017/LibreChat |
如果您的 MongoDB URI 不同,请将其更改为此处。您应该在 URI 中将 LibreChat 或您自己的 APP_TITLE 添加为数据库名称。
如果您正在使用在线数据库,URI 格式为 mongodb+srv://<username>:<password>@<host>/<database>?<options>。您的 MONGO_URI 应该如下所示:
mongodb+srv://username:[email protected]/LibreChat?retryWrites=true(使用在线数据库时,retryWrites是您唯一需要配置的选项。)
MongoDB 连接池配置
| Key | Type | Description | Example |
|---|---|---|---|
| MONGO_MAX_POOL_SIZE | number | 连接池中的最大连接数。 | # MONGO_MAX_POOL_SIZE= |
| MONGO_MIN_POOL_SIZE | number | 连接池中的最小连接数。 | # MONGO_MIN_POOL_SIZE= |
| MONGO_MAX_CONNECTING | number | 连接池中允许同时建立连接的最大数量。 | # MONGO_MAX_CONNECTING= |
| MONGO_MAX_IDLE_TIME_MS | number | 连接在池中保持空闲状态直至被移除并关闭的最长毫秒数。 | # MONGO_MAX_IDLE_TIME_MS= |
| MONGO_WAIT_QUEUE_TIMEOUT_MS | number | 线程等待连接可用的最长时间(以毫秒为单位)。 | # MONGO_WAIT_QUEUE_TIMEOUT_MS= |
MongoDB Schema 配置
| Key | Type | Description | Example |
|---|---|---|---|
| MONGO_AUTO_INDEX | boolean | 设置为 false 可禁用与此连接关联的所有模型的自动索引创建。如果省略,则使用 Mongoose 的默认行为。 | # MONGO_AUTO_INDEX= |
| MONGO_AUTO_CREATE | boolean | 设置为 false 可禁用 Mongoose 在此连接上为每个创建的模型自动调用 createCollection() 的行为。省略时,将使用 Mongoose 的默认行为。 | # MONGO_AUTO_CREATE= |
或者,您可以使用模拟 mongoDb 的 documentDb,但它:
- 不支持
retryWrites- 请使用retryWrites=false - 需要 TLS 连接,因此请使用参数
tls=true来启用 TLS,并使用tlsCAFile=/path-to-ca/bundle.pem来指向 AWS 提供的 CA 证书包文件。
documentDb 的 URI 看起来如下:
mongodb+srv://username:password@domain/dbname?retryWrites=false&tls=true&tlsCAFile=/path-to-ca/bundle.pem
另请参阅:
- MongoDB Atlas,了解如何创建在线 MongoDB Atlas 数据库(适用于不使用 Docker 的情况)
- MongoDB Community Server,了解如何创建本地 MongoDB 数据库(不使用 Docker)的说明
- MongoDB Authentication 若要在 Docker 中为 MongoDB 启用显式身份验证。
- 使用 Mongo Express 管理您的数据库,以便安全地访问您的 Docker MongoDB 数据库
应用领域
若要配置 LibreChat 以供本地使用或自定义域名部署,请设置以下环境变量:
| Key | Type | Description | Example |
|---|---|---|---|
| DOMAIN_CLIENT | string | 指定客户端域名。 | DOMAIN_CLIENT=http://localhost:3080 |
| DOMAIN_SERVER | string | 指定服务器端域名。 | DOMAIN_SERVER=http://localhost:3080 |
| ADMIN_PANEL_URL | string | 当管理面板单独托管时,用于管理 OAuth/SSO 重定向的外部管理面板基础 URL。请勿在末尾包含斜杠。 | ADMIN_PANEL_URL=https://admin.example.com/admin |
| ADMIN_PANEL_SESSION_SECRET | string | 用于捆绑管理面板的必需会话加密密钥(至少 32 个字符)。docker-compose 和 deploy-compose 管理面板服务将其读取为 SESSION_SECRET。在启动堆栈之前,请使用 `openssl rand -hex 32` 生成该密钥。 | ADMIN_PANEL_SESSION_SECRET=<your-32-char-random-string> |
| ADMIN_PANEL_PORT | number | 默认 docker-compose 中捆绑的管理面板的主机端口。在 deploy-compose 中,面板通过 nginx 在 http://admin.localhost 提供服务。 | ADMIN_PANEL_PORT=3000 |
当将 LibreChat 部署到自定义域名时,请将 http://localhost:3080 替换为您部署后的 URL。
- 例如
https://librechat.example.com。
防止公共搜索引擎索引
默认情况下,您的网站不会被公共搜索引擎(如 Google、Bing 等)索引。这意味着人们将无法通过这些搜索引擎找到您的网站。如果您希望提高网站的可见度和可搜索性,可以将以下设置更改为 false
| Key | Type | Description | Example |
|---|---|---|---|
| NO_INDEX | boolean | 防止公共搜索引擎索引您的网站。 | NO_INDEX=true |
❗注意: 此方法不能保证对所有搜索引擎都有效,且某些搜索引擎仍可能出于其他目的(例如缓存或归档)索引您的网站或网页。因此,您不应仅依赖此方法来保护网站或网页上的敏感或机密信息。
日志记录
LibreChat 具有内置的中央日志记录功能,更多信息请参阅 Logging System。
日志文件
- 调试日志默认处于启用状态,这对开发至关重要。
- 若要报告问题,请复现错误并提交
./api/logs/debug-%DATE%.log中的日志至:LibreChat GitHub Issues - 错误日志存储在相同的位置。
环境变量
| Key | Type | Description | Example |
|---|---|---|---|
| DEBUG_LOGGING | boolean | 保持调试日志处于活动状态。 | DEBUG_LOGGING=true |
| DEBUG_CONSOLE | boolean | 启用与文件调试日志格式相同的详细控制台/stdout日志。 | DEBUG_CONSOLE=false |
| LOG_TO_FILE | boolean | 设置为 false 可禁用基于文件的 Winston 传输,同时保留控制台日志记录功能。 | LOG_TO_FILE=true |
| CONSOLE_JSON | boolean | 启用适用于 GCP/AWS 等云部署环境的详细 JSON 控制台/stdout 日志。 | CONSOLE_JSON=false |
| CONSOLE_JSON_STRING_LENGTH | number | 配置 JSON 控制台/stdout 日志中字符串值的截断长度。默认值:255。 | # CONSOLE_JSON_STRING_LENGTH=255 |
| LIBRECHAT_LOG_DIR | string | 日志文件的自定义目录。默认为 /app/logs (Docker) 或 api/logs (本地开发)。 | # LIBRECHAT_LOG_DIR=/custom/log/path |
| MEM_DIAG | boolean | 启用内存诊断 — 每 60 秒记录一次堆/RSS 快照。在使用 --inspect 运行时自动启用。 | # MEM_DIAG=true |
| AGENT_DEBUG_LOGGING | boolean | 在 agent controller 中启用详细调试日志(令牌计数、上下文修剪诊断)。 | # AGENT_DEBUG_LOGGING=true |
注意:
DEBUG_LOGGING可以与DEBUG_CONSOLE或CONSOLE_JSON中的任意一个配合使用,但不能同时使用两者。DEBUG_CONSOLE和CONSOLE_JSON是互斥的。CONSOLE_JSON:在云部署(如 GCP 或 AWS)中处理控制台日志时,启用此项将以 JSON 格式输出带有 UTC 时间戳的日志。
注意:不建议使用 DEBUG_CONSOLE,因为其输出可能非常冗长,因此默认情况下它是禁用的。
权限
UID 和 GID 是 Linux 系统分配给每个用户和组的数字。如果您遇到权限问题,请在此处设置运行 Docker Compose 命令的用户的 UID 和 GID。容器中的应用程序将以这些 UID/GID 运行。
| Key | Type | Description | Example |
|---|---|---|---|
| UID | number | 用户 ID。 | # UID=1000 |
| GID | number | 组 ID。 | # GID=1000 |
OpenTelemetry Tracing
LibreChat 可以为通用 API、HTTP、MongoDB、Mongoose、Redis 和出站请求的可视性发出后端 OpenTelemetry 追踪。Redis 命令级跨度(spans)为可选功能,因此默认追踪保持在高层级。使用 Langfuse 进行 GenAI 特定的提示词/模型可观测性。
| Key | Type | Description | Example |
|---|---|---|---|
| OTEL_TRACING_ENABLED | boolean | 启用后端 OpenTelemetry 追踪。当 OTEL_SDK_DISABLED=true 时,追踪功能将保持禁用状态。 | # OTEL_TRACING_ENABLED=false |
| OTEL_SERVICE_NAME | string | 向 OpenTelemetry 报告的服务名称。默认值:librechat。 | # OTEL_SERVICE_NAME=librechat |
| OTEL_SERVICE_VERSION | string | 上报给 OpenTelemetry 的服务版本。未设置时默认为包版本。 | # OTEL_SERVICE_VERSION= |
| OTEL_EXPORTER_OTLP_ENDPOINT | string | 基础 OTLP exporter endpoint。 | # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 |
| OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | string | 特定于 Trace 的 OTLP endpoint。设置后将覆盖用于 Trace 的基础 endpoint。 | # OTEL_EXPORTER_OTLP_TRACES_ENDPOINT= |
| OTEL_EXPORTER_OTLP_HEADERS | string | 以逗号分隔的 OTLP 导出器标头,例如授权元数据。 | # OTEL_EXPORTER_OTLP_HEADERS= |
| OTEL_TRACES_EXPORTER | string | Trace exporter 选择。 | # OTEL_TRACES_EXPORTER=otlp |
| OTEL_TRACES_SAMPLER | string | OpenTelemetry 追踪采样器。默认示例:parentbased_always_on。 | # OTEL_TRACES_SAMPLER=parentbased_always_on |
| OTEL_LOG_LEVEL | string | OpenTelemetry SDK 日志级别。 | # OTEL_LOG_LEVEL=INFO |
| OTEL_SDK_DISABLED | boolean | 即使启用了追踪,也禁用 OpenTelemetry SDK。 | # OTEL_SDK_DISABLED=false |
| OTEL_IOREDIS_TRACING_ENABLED | boolean | 启用 Redis 命令级追踪(spans)。默认情况下处于禁用状态,以保持后端追踪的高层级概览。 | # OTEL_IOREDIS_TRACING_ENABLED=false |
真实用户监控 (浏览器)
LibreChat 可以将浏览器真实用户监控 (RUM) 遥测数据发布到兼容 HyperDX 的 OTLP 收集器。RUM 默认处于禁用状态。
| Key | Type | Description | Example |
|---|---|---|---|
| RUM_ENABLED | boolean | 启用浏览器真实用户监控 (Real User Monitoring)。默认值:false。 | # RUM_ENABLED=false |
| RUM_PROVIDER | string | 浏览器 RUM 提供商。目前支持 `hyperdx`。 | # RUM_PROVIDER=hyperdx |
| RUM_URL | string | 用于 public-token 模式的公共收集器 URL。 | # RUM_URL=http://localhost:4318 |
| RUM_SERVICE_NAME | string | 浏览器 SDK 报告的服务名称。默认值:librechat-web。 | # RUM_SERVICE_NAME=librechat-web |
| RUM_ENVIRONMENT | string | 通过浏览器遥测报告的环境标签。 | # RUM_ENVIRONMENT=development |
| RUM_AUTH_MODE | string | 浏览器遥测的身份验证模式。使用 `publicToken` 或 `proxy`。 | # RUM_AUTH_MODE=publicToken |
| RUM_PUBLIC_TOKEN | string | 用于 public-token 模式的公共浏览器令牌。请将其视为公开信息,并在收集器端限制摄入。 | # RUM_PUBLIC_TOKEN= |
| RUM_PROXY_TARGET_URL | string | 在认证代理模式下使用的 Collector 基础 URL。当 `RUM_AUTH_MODE=proxy` 时为必填项。 | # RUM_PROXY_TARGET_URL=http://otel-collector:4318 |
| RUM_PROXY_TIMEOUT_MS | number | 代理请求超时时间(以毫秒为单位)。默认值:10000。 | # RUM_PROXY_TIMEOUT_MS=10000 |
| RUM_TRACE_PROPAGATION_TARGETS | string | 以逗号分隔的应接收 traceparent 标头的第一方 HTTPS 源或 URL。 | # RUM_TRACE_PROPAGATION_TARGETS=https://api.example.com |
| RUM_DISABLE_REPLAY | boolean | 禁用浏览器会话重放。默认值:true。 | # RUM_DISABLE_REPLAY=true |
| RUM_CONSOLE_CAPTURE | boolean | 捕获浏览器控制台日志。可能会收集敏感的提示词、响应或有效负载。 | # RUM_CONSOLE_CAPTURE=false |
| RUM_ADVANCED_NETWORK_CAPTURE | boolean | 捕获详细的网络负载。可能会收集敏感的提示词、响应或负载。 | # RUM_ADVANCED_NETWORK_CAPTURE=false |
| RUM_SAMPLE_RATE | number | 浏览器遥测采样率,范围从 0 到 1。默认值:1。 | # RUM_SAMPLE_RATE=1 |
在 publicToken 模式下,浏览器将遥测数据直接发送到带有 RUM_PUBLIC_TOKEN 的 RUM_URL。在 proxy 模式下,浏览器通过 LibreChat 发送遥测数据;后端会验证用户会话,剥离应用身份验证标头,并将遥测数据转发到 RUM_PROXY_TARGET_URL。无效或过期的会话将以 204 响应被丢弃,因此浏览器遥测失败不会显现出正常的 API 身份验证错误。代理结果会在 LibreChat API /metrics 端点上通过带有 endpoint 和 result 标签的 rum_proxy_requests_total 进行统计。
配置路径 - librechat.yaml
为 LibreChat 配置文件指定一个替代位置。
您可以指定绝对路径、相对路径或 URL。路径中的文件名非常灵活,不必非得是 librechat.yaml;任何有效的配置文件均可使用。
注意:如果您希望 LibreChat 在根目录中搜索配置文件(这是默认行为),只需将此选项保持注释状态即可。
| Key | Type | Description | Example |
|---|---|---|---|
| CONFIG_PATH | string | LibreChat 配置文件的一个替代位置。 | # CONFIG_PATH=https://raw.githubusercontent.com/danny-avila/LibreChat/main/librechat.example.yaml |
部署技巧
Deployment Skills 在启动时以只读方式从文件系统加载,并向启用了 Skills 功能的用户公开。
| Key | Type | Description | Example |
|---|---|---|---|
| DEPLOYMENT_SKILLS_DIR | string | 包含部署所提供 Skills 的目录。默认为项目根目录下的 `./skill`。 | # DEPLOYMENT_SKILLS_DIR=./skill |
更改此目录或其中的任何文件后,请重启 LibreChat。部署提供的 Skills 优先级高于同名的持久化 Skills。
配置验证
默认情况下,如果 librechat.yaml 配置文件包含验证错误,LibreChat 将会报错退出(退出代码 1)。这种快速失败(fail-fast)行为有助于在部署流水线中尽早发现配置问题,并防止在非预期的默认设置下运行。
| Key | Type | Description | Example |
|---|---|---|---|
| CONFIG_BYPASS_VALIDATION | boolean | 当设置为 `true` 时,即使 `librechat.yaml` 存在验证错误,服务器也会记录警告并继续使用默认配置启动。这保留了旧有的行为。 | # CONFIG_BYPASS_VALIDATION=true |
警告
不建议在生产环境中使用 CONFIG_BYPASS_VALIDATION=true。它仅旨在作为调试配置问题时的临时变通方案。请务必修复配置文件中的验证错误。
未捕获异常处理
默认情况下,LibreChat 会在发生未捕获异常时退出进程,这是 Node.js 的标准行为。你可以覆盖此设置,以便在出现未捕获异常后保持应用运行。
| Key | Type | Description | Example |
|---|---|---|---|
| CONTINUE_ON_UNCAUGHT_EXCEPTION | boolean | 当设置为 `true` 时,应用在遇到未捕获的异常后将继续运行,而不是退出进程。 | # CONTINUE_ON_UNCAUGHT_EXCEPTION=false |
警告
除非必要,否则不建议在生产环境中使用。未捕获的异常可能会使应用程序处于不可预测的状态。
Endpoints
在本节中,您可以配置 endpoint 和模型选择、它们的 API 密钥,以及支持该功能的 endpoint 的代理和反向代理设置。
通用配置
取消注释 ENDPOINTS 以自定义 LibreChat 中可用的 endpoint。
| Key | Type | Description | Example |
|---|---|---|---|
| ENDPOINTS | string | 以逗号分隔的可用 endpoint 列表。 | # ENDPOINTS=openAI,agents,assistants,gptPlugins,azureOpenAI,google,anthropic,bingAI,custom |
| PROXY | string | 用于受支持的服务器端客户端的出站代理。适用于 HTTP 和 HTTPS 目标。 | PROXY= |
| HTTP_PROXY | string | 当 PROXY 未设置时,受支持的服务器端客户端所使用的 HTTP 代理回退。 | # HTTP_PROXY= |
| HTTPS_PROXY | string | 当 PROXY 未设置时,受支持的服务器端客户端所使用的 HTTPS 代理回退。 | # HTTPS_PROXY= |
| NO_PROXY | string | 以逗号分隔的主机、域名或 IP 范围,支持的服务器端客户端应绕过这些地址。同时也支持小写的 no_proxy 变体。 | # NO_PROXY= |
| TITLE_CONVO | boolean | 为所有 endpoint 启用标题生成。 | TITLE_CONVO=true |
已知 endpoint - librechat.yaml
- 另请参阅:自定义 Endpoints 与配置
| Key | Type | Description | Example |
|---|---|---|---|
| ANYSCALE_API_KEY | string | Anyscale 的 API key。 | # ANYSCALE_API_KEY= |
| APIPIE_API_KEY | string | Apipie 的 API key | # APIPIE_API_KEY= |
| COHERE_API_KEY | string | Cohere 的 API key。 | # COHERE_API_KEY= |
| FIREWORKS_API_KEY | string | Fireworks 的 API key。 | # FIREWORKS_API_KEY= |
| GROQ_API_KEY | string | Groq 的 API key。 | # GROQ_API_KEY= |
| MISTRAL_API_KEY | string | Mistral 的 API key。 | # MISTRAL_API_KEY= |
| OPENROUTER_KEY | string | OpenRouter 的 API key。 | # OPENROUTER_KEY= |
| PERPLEXITY_API_KEY | string | Perplexity 的 API key。 | # PERPLEXITY_API_KEY= |
| SHUTTLEAI_API_KEY | string | ShuttleAI 的 API key。 | # SHUTTLEAI_API_KEY= |
| TOGETHERAI_API_KEY | string | TogetherAI 的 API key。 | # TOGETHERAI_API_KEY= |
| DEEPSEEK_API_KEY | string | Deepseek API 的 API key | # DEEPSEEK_API_KEY= |
网络搜索
网页搜索功能可在 LibreChat 中启用互联网搜索能力。
重要提示:下方所示的确切环境变量名称均为默认参考,您可以通过 librechat.yaml 配置文件进行自定义,以使用您偏好的任何变量名称。
有关详细的配置和自定义选项,请参阅:Web Search Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| SERPER_API_KEY | string | Serper 搜索提供商的 API key。请从 https://serper.dev/api-keys 获取您的 key。 | # SERPER_API_KEY= |
| TAVILY_API_KEY | string | 用于 Tavily 搜索和抓取提供商的 API key。请从 https://app.tavily.com/home 获取您的 key。 | # TAVILY_API_KEY= |
| TAVILY_SEARCH_URL | string | 自定义 Tavily Search API URL(可选)。仅在需要自定义或代理 Tavily 兼容的搜索 endpoint 时使用。 | # TAVILY_SEARCH_URL= |
| TAVILY_EXTRACT_URL | string | 自定义 Tavily Extract API URL(可选)。仅在需要自定义或代理兼容 Tavily 的 extract 端点时使用。 | # TAVILY_EXTRACT_URL= |
| FIRECRAWL_API_KEY | string | Firecrawl 爬虫服务的 API key。请从 https://docs.firecrawl.dev/introduction#api-key 获取您的 key。 | # FIRECRAWL_API_KEY= |
| FIRECRAWL_API_URL | string | 自定义 Firecrawl API URL(可选)。仅在使用自定义 Firecrawl 实例时需要。 | # FIRECRAWL_API_URL= |
| FIRECRAWL_VERSION | string | Firecrawl API 版本 (v0 或 v1)。 | # FIRECRAWL_VERSION=v1 |
| JINA_API_KEY | string | Jina 重排序服务的 API key。请从 https://jina.ai/api-dashboard/ 获取您的 key。 | # JINA_API_KEY= |
| JINA_API_URL | string | 自定义 Jina API URL(可选)。仅在使用自定义 Jina 实例时需要。 | # JINA_API_URL= |
| COHERE_API_KEY | string | Cohere 重排序服务的 API key。请从 https://dashboard.cohere.com/welcome/login 获取您的 key。 | # COHERE_API_KEY= |
注意:这些变量名称可以在您的 librechat.yaml 配置文件中进行自定义。例如,您可以通过在网页搜索设置中进行配置,使用 CUSTOM_SERPER_KEY 来代替 SERPER_API_KEY。有关自定义变量名称的详细信息,请参阅 Web Search Configuration 文档。
Anthropic
- 您可以从 https://platform.claude.com/ 申请访问密钥。
- 将
ANTHROPIC_API_KEY=留空以禁用此 endpoint - 将
ANTHROPIC_API_KEY=设置为 "user_provided",以允许用户从 WebUI 提供他们自己的 API 密钥。 - 如果您有
Anthropic的反向代理访问权限,可以通过ANTHROPIC_REVERSE_PROXY=进行设置。- 留空或注释掉以使用默认 base url
| Key | Type | Description | Example |
|---|---|---|---|
| ANTHROPIC_API_KEY | string | Anthropic API key 或设置为 "user_provided" 以允许用户提供他们自己的 API key。 | Defaults to an empty string. |
| ANTHROPIC_MODELS | string | 要使用的 Anthropic 模型列表,以逗号分隔。 | # ANTHROPIC_MODELS=claude-fable-5,claude-opus-4-8,claude-opus-4-7,claude-sonnet-4-6,claude-opus-4-6,claude-opus-4-20250514,claude-3-7-sonnet-20250219,claude-3-5-sonnet-20241022,claude-3-5-haiku-20241022 |
| ANTHROPIC_REVERSE_PROXY | string | Anthropic 的反向代理。 | # ANTHROPIC_REVERSE_PROXY= |
| ANTHROPIC_TITLE_MODEL | string | 已弃用:用于 Anthropic 标题生成的模型。 | # ANTHROPIC_TITLE_MODEL=claude-3-haiku-20240307 |
ANTHROPIC_TITLE_MODEL现已弃用,并将在未来版本中移除。请改用librechat.yaml配置文件中的titleModel端点设置。
注意: 必须与 Anthropic endpoint 兼容。此外,Claude 2 和 Claude 3 模型在此任务中表现最佳,其中
claude-3-haiku模型最为经济实惠。
Claude Fable 5 已包含在默认的 Anthropic 模型列表中。Fable/Mythos 类模型在 LibreChat 中使用现代 Anthropic 行为:支持 1M 上下文、自适应思维(adaptive thinking)支持、提示词缓存(prompt caching)支持,以及针对摘要或省略推理输出的 thinkingDisplay 处理。
通过 Vertex AI 使用 Anthropic
您也可以通过 Google Cloud Vertex AI 使用 Anthropic Claude 模型。有关详细的 YAML 配置选项,请参阅:Anthropic Vertex AI Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| ANTHROPIC_USE_VERTEX | boolean | 设置为 true 以通过 Google Vertex AI 而非直接 API 使用 Anthropic 模型。 | ANTHROPIC_USE_VERTEX=true |
| ANTHROPIC_VERTEX_REGION | string | Vertex AI 的 Google Cloud 区域。默认值:us-east5。 | ANTHROPIC_VERTEX_REGION=us-east5 |
注意: 使用 Vertex AI 时,您还必须配置
GOOGLE_SERVICE_KEY_FILE(请参阅 Google 配置),并使用具有Vertex AI User角色的服务账号。
AWS Bedrock
| Key | Type | Description | Example |
|---|---|---|---|
| BEDROCK_AWS_DEFAULT_REGION | string | 必须为 Bedrock 提供一个默认的 AWS 区域。 | BEDROCK_AWS_DEFAULT_REGION=us-east-1 |
| BEDROCK_AWS_ACCESS_KEY_ID | string | 用于 Bedrock 的 AWS 访问密钥 ID。如果使用默认 AWS 凭证链,则为可选。 | # BEDROCK_AWS_ACCESS_KEY_ID=your_access_key_id |
| BEDROCK_AWS_SECRET_ACCESS_KEY | string | 用于 Bedrock 的 AWS secret access key。如果使用默认的 AWS 凭证链,则为可选。 | # BEDROCK_AWS_SECRET_ACCESS_KEY=your_secret_access_key |
| BEDROCK_AWS_SESSION_TOKEN | string | 用于临时凭证的 AWS 会话令牌。可选。 | # BEDROCK_AWS_SESSION_TOKEN=your_session_token |
| BEDROCK_AWS_PROFILE | string | 用于 Bedrock 的 AWS 共享配置概况名称。如果使用默认 AWS 凭证链,则为可选。 | # BEDROCK_AWS_PROFILE=your-profile-name |
| BEDROCK_AWS_BEARER_TOKEN | string | 用于 Bearer 认证的 Amazon Bedrock API 密钥,或设置为 user_provided 以允许用户在 UI 中输入他们自己的 Bedrock API 密钥。 | # BEDROCK_AWS_BEARER_TOKEN=your_bedrock_api_key |
| BEDROCK_AWS_MODELS | string | 以逗号分隔的 Bedrock 模型 ID 列表。如果省略,则包含所有已知的受支持模型。 | # BEDROCK_AWS_MODELS=anthropic.claude-fable-5,anthropic.claude-opus-4-8,anthropic.claude-opus-4-7,anthropic.claude-sonnet-4-6,meta.llama3-1-8b-instruct-v1:0 |
注意: 您可以省略访问密钥以使用默认的 AWS 凭证链(环境变量、SSO 凭证、共享凭证文件或 EC2/ECS 实例元数据服务)。有关更多详细信息,请参阅 AWS Bedrock Setup。
Bedrock 上的 Claude Fable/Mythos 类模型仅支持推理配置文件(inference-profile)。请使用诸如 us.anthropic.claude-fable-5 的配置文件 ID,并在调用它们之前在 Bedrock 控制台或数据保留 API(Data Retention API)中启用所需的 Anthropic 数据共享设置。
BingAI
Bing,也用于 Sydney、越狱以及 Bing Image Creator
| Key | Type | Description | Example |
|---|---|---|---|
| BINGAI_TOKEN | string | Bing 访问令牌。留空则禁用。可设置为 "user_provided",允许用户从 WebUI 提供自己的令牌。 | BINGAI_TOKEN=user_provided |
| BINGAI_HOST | string | Bing 主机 URL。保持注释状态以使用默认服务器。 | # BINGAI_HOST=https://cn.bing.com |
注意:建议将其保留为 "user_provided" 并从 WebUI 提供令牌。
请按照这些说明来设置 Google Endpoint
| Key | Type | Description | Example |
|---|---|---|---|
| GOOGLE_KEY | string | Google API key。设置为 "user_provided" 以允许用户从 WebUI 提供他们自己的 API key。 | GOOGLE_KEY=user_provided |
| GOOGLE_SERVICE_KEY_FILE | string | Google 服务账号 JSON 密钥文件的路径、获取该文件的 URL,或字符串化的 JSON。用于 Vertex AI 身份验证(例如 OCR 功能)。 | GOOGLE_SERVICE_KEY_FILE=/path/to/auth.json |
| GOOGLE_REVERSE_PROXY | string | Google 反向代理 URL。 | GOOGLE_REVERSE_PROXY= |
| GOOGLE_AUTH_HEADER | boolean | 使用 Authorization 请求头代替 X-goog-api-key。某些反向代理需要此设置。 | # GOOGLE_AUTH_HEADER=true |
| GOOGLE_MODELS | string | 可用的 Gemini API Google 模型,以逗号分隔。 | GOOGLE_MODELS=gemini-3.1-pro-preview,gemini-3.1-pro-preview-customtools,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash,gemini-2.0-flash-lite |
| GOOGLE_MODELS | string | 可用的 Vertex AI Google 模型,以逗号分隔。 | GOOGLE_MODELS=gemini-3.1-pro-preview,gemini-3.1-pro-preview-customtools,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite,gemini-2.0-flash-001,gemini-2.0-flash-lite-001 |
| GOOGLE_TITLE_MODEL | string | 已弃用:用于 Google 标题生成的模型。 | GOOGLE_TITLE_MODEL=gemini-pro |
| GOOGLE_LOC | string | 指定用于处理 API 请求的 Google Cloud 位置 | GOOGLE_LOC=us-central1 |
| GOOGLE_CLOUD_LOCATION | string | Gemini 图像生成的备选区域(例如:global)。 | # GOOGLE_CLOUD_LOCATION=global |
| GOOGLE_EXCLUDE_SAFETY_SETTINGS | string | 完全忽略默认包含的安全设置,这将使用提供商的默认设置 | GOOGLE_EXCLUDE_SAFETY_SETTINGS=true |
| GOOGLE_SAFETY_SEXUALLY_EXPLICIT | string | 针对性露骨内容的安全设置。选项包括 BLOCK_ALL、BLOCK_ONLY_HIGH、WARN_ONLY 和 OFF。 | GOOGLE_SAFETY_SEXUALLY_EXPLICIT=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_HATE_SPEECH | string | 针对仇恨言论内容的安全设置。选项包括 BLOCK_ALL、BLOCK_ONLY_HIGH、WARN_ONLY 和 OFF。 | GOOGLE_SAFETY_HATE_SPEECH=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_HARASSMENT | string | 针对骚扰内容的安全设置。选项包括 BLOCK_ALL、BLOCK_ONLY_HIGH、WARN_ONLY 和 OFF。 | GOOGLE_SAFETY_HARASSMENT=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_DANGEROUS_CONTENT | string | 危险内容的安全设置。选项包括 BLOCK_ALL、BLOCK_ONLY_HIGH、WARN_ONLY 和 OFF。 | GOOGLE_SAFETY_DANGEROUS_CONTENT=BLOCK_ONLY_HIGH |
| GOOGLE_SAFETY_CIVIC_INTEGRITY | string | 公民诚信内容的安全性设置。选项包括 BLOCK_ALL、BLOCK_ONLY_HIGH、WARN_ONLY 和 OFF。 | # GOOGLE_SAFETY_CIVIC_INTEGRITY=BLOCK_ONLY_HIGH |
自定义可用模型,以逗号分隔,不要包含空格。第一个模型将作为默认模型。留空或注释掉该项以使用内部设置。
GOOGLE_TITLE_MODEL现已弃用,并将在未来版本中移除。请改用librechat.yaml配置文件中的titleModelEndpoint Setting。
注意: 对于 Vertex AI 的 GOOGLE_SAFETY 变量,默认情况下您无法访问 BLOCK_NONE 设置。要使用此受限的 HarmBlockThreshold 设置,您需要执行以下任一操作:
- (a) 通过您的 Google 账户团队获取允许列表 (allowlist) 访问权限
- (b) 按照此说明将您的账户类型切换为月度发票结算: https://cloud.google.com/billing/docs/how-to/invoiced-billing
Gemini 图像生成
Gemini Image Generation 是一个适用于 Agents 的工具,同时支持 Gemini API 和 Vertex AI。请参阅:Gemini Image Generation
| Key | Type | Description | Example |
|---|---|---|---|
| GEMINI_API_KEY | string | 用于图像生成的专用 Gemini API 密钥。如果未设置,将回退使用 GOOGLE_KEY。 | # GEMINI_API_KEY=your_gemini_api_key |
| GEMINI_IMAGE_MODEL | string | 用于图像生成的 Gemini 模型。默认值:gemini-2.5-flash-image。 | # GEMINI_IMAGE_MODEL=gemini-2.5-flash-image |
注意: 当未配置 API key 时,该工具会自动回退到使用来自
GOOGLE_SERVICE_KEY_FILE的服务账号的 Vertex AI。该服务账号必须拥有Vertex AI User角色。
OpenAI
请参阅:OpenAI Setup
| Key | Type | Description | Example |
|---|---|---|---|
| OPENAI_API_KEY | string | 您的 OpenAI API 密钥。留空以禁用此 endpoint,或设置为 "user_provided" 以允许用户从 WebUI 提供他们自己的 API 密钥。 | OPENAI_API_KEY=user_provided |
| OPENAI_MODELS | string | 自定义可用模型,以逗号分隔,不要包含空格。第一个模型将作为默认模型。保持注释状态以使用内部设置。 | # OPENAI_MODELS=gpt-5,gpt-5-codex,gpt-5-mini,gpt-5-nano,o3-pro,o3,o4-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o3-mini,o1-pro,o1,gpt-4o,gpt-4o-mini |
| DEBUG_OPENAI | boolean | 启用 OpenAI endpoint 的调试模式。 | DEBUG_OPENAI=false |
| OPENAI_SUMMARIZE | boolean | 启用消息摘要。默认为 False | # OPENAI_SUMMARIZE=true |
| OPENAI_SUMMARY_MODEL | string | 用于 OpenAI 摘要的模型。 | # OPENAI_SUMMARY_MODEL=gpt-3.5-turbo |
| OPENAI_FORCE_PROMPT | boolean | 强制 API 使用 prompt 负载而非 messages 负载进行调用。 | # OPENAI_FORCE_PROMPT=false |
| OPENAI_ORGANIZATION | string | 指定每个向 OpenAI 发送的 API 请求所使用的组织。可选。 | # OPENAI_ORGANIZATION= |
| OPENAI_REVERSE_PROXY | string | 已弃用:OpenAI 的反向代理设置。 | # OPENAI_REVERSE_PROXY= |
| OPENAI_TITLE_MODEL | string | 已弃用:用于 OpenAI 标题生成的模型。 | # OPENAI_TITLE_MODEL=gpt-3.5-turbo |
OPENAI_TITLE_MODEL现已弃用,并将在未来版本中移除。请改用librechat.yaml配置文件中的titleModel端点设置。OPENAI_REVERSE_PROXY现已弃用,并将在未来版本中移除。请改用自定义 endpoint。
Assistants
请参阅:Assistants Setup
| Key | Type | Description | Example |
|---|---|---|---|
| ASSISTANTS_API_KEY | string | 用于 Assistants API 的 OpenAI API 密钥。留空以禁用此 endpoint,或设置为 "user_provided" 以允许用户从 WebUI 提供他们自己的 API 密钥。 | ASSISTANTS_API_KEY=user_provided |
| ASSISTANTS_MODELS | string | 自定义可用模型,以逗号分隔,不要包含空格。第一个模型将作为默认值。留空则使用内部设置。 | # ASSISTANTS_MODELS=gpt-3.5-turbo-0125,gpt-3.5-turbo-16k-0613,gpt-3.5-turbo-16k,gpt-3.5-turbo,gpt-4,gpt-4-0314,gpt-4-32k-0314,gpt-4-0613,gpt-3.5-turbo-0613,gpt-3.5-turbo-1106,gpt-4-0125-preview,gpt-4-turbo-preview,gpt-4-1106-preview |
| ASSISTANTS_BASE_URL | string | Assistants API 的备用基础 URL。 | # ASSISTANTS_BASE_URL= |
注意:您可以自定义可用模型,以逗号分隔,且不含空格。第一个模型将作为默认模型。留空或注释掉该项以使用内部设置。
Tavily
在此处获取您的 API key:https://tavily.com/#api
环境变量:
| Key | Type | Description | Example |
|---|---|---|---|
| TAVILY_API_KEY | string | Tavily API key | TAVILY_API_KEY= |
Traversaal
描述: LLM 增强型搜索工具。
在此处获取 API key:https://api.traversaal.ai/dashboard
环境变量:
| Key | Type | Description | Example |
|---|---|---|---|
| TRAVERSAAL_API_KEY | string | Traversaal API key | TRAVERSAAL_API_KEY= |
WolframAlpha
详细说明请见此处:Wolfram Alpha
环境变量:
| Key | Type | Description | Example |
|---|---|---|---|
| WOLFRAM_APP_ID | string | Wolfram Alpha App ID | WOLFRAM_APP_ID= |
Zapier
描述: - 您需要一个 Zapier 账户。请从此处获取您的 API 密钥:Zapier
- 创建允许的操作 - 请遵循 Zapier 入门指南中的第 3 步
注意: Zapier 在执行某些操作时可能会比较挑剔。编写电子邮件草稿可能是它最适合的用途。
环境变量:
| Key | Type | Description | Example |
|---|---|---|---|
| ZAPIER_NLA_API_KEY | string | Zapier NLA API 密钥。 | ZAPIER_NLA_API_KEY= |
OpenWeather
查看详细说明请点击此处:OpenWeather
| Key | Type | Description | Example |
|---|---|---|---|
| OPENWEATHER_API_KEY | string | 用于 One Call API 3.0 的 OpenWeather API 密钥。 | OPENWEATHER_API_KEY= |
Code Interpreter
Code Interpreter API 提供了一个用于执行代码和管理文件的安全环境。请参阅:Code Interpreter API
| Key | Type | Description | Example |
|---|---|---|---|
| LIBRECHAT_CODE_API_KEY | string | Code Interpreter 服务的 API key。全局设置时,可为所有用户提供访问权限。 | LIBRECHAT_CODE_API_KEY=your-api-key |
| LIBRECHAT_CODE_BASEURL | string | Code Interpreter API 的自定义基础 URL(仅限企业版)。 | # LIBRECHAT_CODE_BASEURL=https://your-custom-domain.com |
Artifacts
Artifacts 利用 CodeSandbox 库来安全地渲染 HTML/JS 代码。默认情况下,使用由 CodeSandbox 托管的公共 CDN。
幸运的是,对于有内部网络需求的用户,您可以自托管打包器来编译前端代码,并为 Sandpack 指定自定义的打包器 URL。
有关更多信息,包括已移除指标请求的自托管预制容器镜像,请参阅:https://github.com/LibreChat-AI/codesandbox-client
| Key | Type | Description | Example |
|---|---|---|---|
| SANDPACK_BUNDLER_URL | string | 指定用于 Artifacts 的 Sandpack 自定义打包器 URL | SANDPACK_BUNDLER_URL=your-bundler-url |
搜索 (Meilisearch)
启用消息和对话搜索:
| Key | Type | Description | Example |
|---|---|---|---|
| SEARCH | boolean | 启用消息和对话搜索。 | SEARCH=true |
注意:如果您没有使用 Docker,则需要安装免费的自托管 Meilisearch 或付费的远程方案。
若要为 MeiliSearch 禁用匿名遥测分析以实现绝对隐私,请设置为 true:
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_NO_ANALYTICS | boolean | 禁用 MeiliSearch 的匿名遥测分析。 | MEILI_NO_ANALYTICS=true |
为了让 API 服务器连接到搜索服务器。如果使用 docker-compose 部署 MeiliSearch,请将 '0.0.0.0' 替换为 'meilisearch'。
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_HOST | string | API 服务器与搜索服务器的连接。 | MEILI_HOST=http://0.0.0.0:7700 |
此主密钥必须至少为 16 字节,并由有效的 UTF-8 字符组成。如果未提供主密钥或密钥少于 16 字节,MeiliSearch 将抛出错误并拒绝启动。MeiliSearch 会建议一个自动生成的安全主密钥。这是一个为 docker-compose 准备好的安全密钥,你可以将其替换为你自己的密钥。
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_MASTER_KEY | string | MeiliSearch 的主密钥。 | MEILI_MASTER_KEY=DrhYf7zENyR6AlUCKmnz0eYASOQdl6zxH7s7MKFSfFCt |
为了防止 LibreChat 尝试与 Meilisearch 进行数据库索引同步,您可以将以下环境变量设置为 true。这在节点集群或多节点设置中非常有用,因为在这种情况下,应该只有一个实例负责索引。
| Key | Type | Description | Example |
|---|---|---|---|
| MEILI_NO_SYNC | string | 用于禁用 Meilisearch 索引同步的开关 | MEILI_NO_SYNC=true |
RAG API
配置检索增强生成 (RAG) 以进行文档索引和上下文感知响应。请参阅:RAG API Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | RAG API 服务的 URL。 | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | 用于 RAG 嵌入的 OpenAI API key。将覆盖用于 RAG 的 OPENAI_API_KEY。 | # RAG_OPENAI_API_KEY=sk-your-openai-api-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 |
注意: 当使用默认的 Docker 设置时,
.env文件会在 LibreChat 和 RAG API 之间共享。有关完整的配置选项,请参阅 RAG API 文档。
语音转文字与文字转语音
配置语音转文字 (STT) 和文字转语音 (TTS) 服务。请参阅:语音设置
| Key | Type | Description | Example |
|---|---|---|---|
| STT_API_KEY | string | 用于语音转文字服务的 API 密钥(例如 OpenAI Whisper)。 | # STT_API_KEY= |
| TTS_API_KEY | string | 用于文本转语音服务的 API key(例如 OpenAI TTS)。 | # TTS_API_KEY= |
注意: STT 和 TTS 主要通过
librechat.yaml中的speech:部分进行配置。这些环境变量在配置中被引用。有关完整的 YAML 配置选项,请参阅 Speech Settings。
共享链接
配置共享对话链接功能。
| Key | Type | Description | Example |
|---|---|---|---|
| ALLOW_SHARED_LINKS | boolean | 启用或禁用共享对话链接。默认值:true。 | ALLOW_SHARED_LINKS=true |
| ALLOW_SHARED_LINKS_PUBLIC | boolean | 允许共享链接在无需身份验证的情况下公开访问。默认值:false。 | ALLOW_SHARED_LINKS_PUBLIC=false |
| SHARED_LINKS_SNAPSHOT_FILES | boolean | 共享聊天引用的快照文件,以便查看者可以通过共享链接预览或下载它们。设置后将覆盖 interface.sharedLinks.snapshotFiles。 | SHARED_LINKS_SNAPSHOT_FILES=true |
ALLOW_SHARED_LINKS 是功能范围内的总开关。角色权限现在可以控制谁能够创建共享链接、与已认证用户共享链接,或将其设置为对所有人可见;请参阅 interface.sharedLinks。ALLOW_SHARED_LINKS_PUBLIC 仅控制公开共享链接是否可以在无需认证的情况下被查看。SHARED_LINKS_SNAPSHOT_FILES 是共享链接文件快照的全局覆盖设置,当设置为 false 时,可以禁用所有链接的快照服务。
用户系统
本节包含以下内容的配置:
内容审核
自动审核系统使用评分机制来跟踪用户的违规行为。当用户进行诸如频繁登录、注册或发送消息等操作时,他们会积累违规分数。一旦达到设定的阈值,该用户及其 IP 地址将被暂时封禁。该系统通过监控并惩罚快速或可疑的活动,确保了平台的安全性。
请参阅:自动化审核
基础审核设置
| Key | Type | Description | Example |
|---|---|---|---|
| OPENAI_MODERATION | boolean | 是否在 **OpenAI** 和 **Plugins** endpoint 上启用 OpenAI 审核功能。 | OPENAI_MODERATION=false |
| OPENAI_MODERATION_API_KEY | string | 您的 OpenAI API key。 | OPENAI_MODERATION_API_KEY= |
| OPENAI_MODERATION_REVERSE_PROXY | string | 注意:默认情况下已注释,此功能并非适用于所有反向代理。 | # OPENAI_MODERATION_REVERSE_PROXY= |
封禁设置
| Key | Type | Description | Example |
|---|---|---|---|
| BAN_VIOLATIONS | boolean | 是否启用对违规用户的封禁(他们仍会被记录在案)。 | BAN_VIOLATIONS=true |
| BAN_DURATION | integer | 用户及关联 IP 被封禁的时长(以毫秒为单位)。 | BAN_DURATION=1000 * 60 * 60 * 2 |
| BAN_INTERVAL | integer | 每当用户的分数达到或超过区间阈值时,该用户都将被封禁。 | BAN_INTERVAL=20 |
登录和注册速率限制
通过限制登录尝试和新账户注册,防止暴力破解攻击和垃圾注册。
| Key | Type | Description | Example |
|---|---|---|---|
| LOGIN_MAX | integer | 每个 LOGIN_WINDOW 内每个 IP 允许的最大登录次数。 | LOGIN_MAX=7 |
| LOGIN_WINDOW | integer | 以分钟为单位,确定 LOGIN_MAX 次登录的时间窗口。 | LOGIN_WINDOW=5 |
| REGISTER_MAX | integer | 每个 IP 在每个 REGISTER_WINDOW 内允许的最大注册次数。 | REGISTER_MAX=5 |
| REGISTER_WINDOW | integer | 以分钟为单位,确定 REGISTER_MAX 注册的时间窗口。 | REGISTER_WINDOW=60 |
每个违规项的评分
| Key | Type | Description | Example |
|---|---|---|---|
| LOGIN_VIOLATION_SCORE | integer | 登录违规评分。 | LOGIN_VIOLATION_SCORE=1 |
| REGISTRATION_VIOLATION_SCORE | integer | 注册违规评分。 | REGISTRATION_VIOLATION_SCORE=1 |
| CONCURRENT_VIOLATION_SCORE | integer | 并发违规评分。 | CONCURRENT_VIOLATION_SCORE=1 |
| MESSAGE_VIOLATION_SCORE | integer | 消息违规评分。 | MESSAGE_VIOLATION_SCORE=1 |
| NON_BROWSER_VIOLATION_SCORE | integer | 非浏览器违规评分 | NON_BROWSER_VIOLATION_SCORE=20 |
| ILLEGAL_MODEL_REQ_SCORE | integer | 非法模型请求的评分。 | ILLEGAL_MODEL_REQ_SCORE=5 |
| IMPORT_VIOLATION_SCORE | integer | 导入对话违规的评分。 | IMPORT_VIOLATION_SCORE=1 |
| FORK_VIOLATION_SCORE | integer | 对话分支违规的评分。 | FORK_VIOLATION_SCORE=1 |
| TTS_VIOLATION_SCORE | integer | 文本转语音违规评分。 | TTS_VIOLATION_SCORE=0 |
| STT_VIOLATION_SCORE | integer | 语音转文字违规评分。 | STT_VIOLATION_SCORE=0 |
| FILE_UPLOAD_VIOLATION_SCORE | integer | 文件上传违规评分。 | FILE_UPLOAD_VIOLATION_SCORE=0 |
| RESET_PASSWORD_VIOLATION_SCORE | integer | 密码重置违规得分。 | RESET_PASSWORD_VIOLATION_SCORE=0 |
| VERIFY_EMAIL_VIOLATION_SCORE | integer | 电子邮件验证违规的评分。 | VERIFY_EMAIL_VIOLATION_SCORE=0 |
| TOOL_CALL_VIOLATION_SCORE | integer | 工具调用违规评分。 | TOOL_CALL_VIOLATION_SCORE=0 |
| CONVO_ACCESS_VIOLATION_SCORE | integer | 会话访问违规的评分。 | CONVO_ACCESS_VIOLATION_SCORE=0 |
注意:非浏览器访问和非法模型请求几乎总是恶意的,这意味着第三方正在尝试通过自动化脚本访问服务器。
消息速率限制(按用户和 IP)
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_CONCURRENT_MESSAGES | boolean | 是否限制用户每次请求可发送的消息数量。 | LIMIT_CONCURRENT_MESSAGES=true |
| CONCURRENT_MESSAGE_MAX | integer | 用户每次请求可发送的最大消息数量。 | CONCURRENT_MESSAGE_MAX=2 |
限制器
注意:您可以同时使用这两种限制器,但默认情况下仅按 IP 进行限制。
IP 限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_MESSAGE_IP | boolean | 是否限制每个 IP 在 `MESSAGE_IP_WINDOW` 内可以发送的消息数量。 | LIMIT_MESSAGE_IP=true |
| MESSAGE_IP_MAX | integer | 一个 IP 在 `MESSAGE_IP_WINDOW` 内可以发送的最大消息数量。 | MESSAGE_IP_MAX=40 |
| MESSAGE_IP_WINDOW | integer | 以分钟为单位,确定 `MESSAGE_IP_MAX` 条消息的时间窗口。 | MESSAGE_IP_WINDOW=1 |
用户限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_MESSAGE_USER | boolean | 是否限制用户在每个 `MESSAGE_USER_WINDOW` 内可以发送的消息数量。 | LIMIT_MESSAGE_USER=false |
| MESSAGE_USER_MAX | integer | 用户在 `MESSAGE_USER_WINDOW` 时间窗口内可以发送的最大消息数量。 | MESSAGE_USER_MAX=40 |
| MESSAGE_USER_WINDOW | integer | 以分钟为单位,确定 `MESSAGE_USER_MAX` 消息的时间窗口。 | MESSAGE_USER_WINDOW=1 |
导入对话速率限制
限制用户导入对话的频率,以防止滥用。
注意:您可以同时使用这两种限制器,但默认情况下仅按 IP 进行限制。
IP 限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_IMPORT_IP | boolean | 是否限制每个 IP 在 `IMPORT_IP_WINDOW` 时间窗口内可以执行的对话导入次数。 | LIMIT_IMPORT_IP=true |
| IMPORT_IP_MAX | integer | 每个 IP 在 `IMPORT_IP_WINDOW` 时间段内可以执行的最大对话导入次数。 | IMPORT_IP_MAX=100 |
| IMPORT_IP_WINDOW | integer | 以分钟为单位,确定 `IMPORT_IP_MAX` 导入的时间窗口。 | IMPORT_IP_WINDOW=1 |
用户限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_IMPORT_USER | boolean | 是否限制用户在每个 `IMPORT_USER_WINDOW` 内可以执行的对话导入次数。 | LIMIT_IMPORT_USER=false |
| IMPORT_USER_MAX | integer | 用户在每个 `IMPORT_USER_WINDOW` 期间可以执行的最大对话导入次数。 | IMPORT_USER_MAX=50 |
| IMPORT_USER_WINDOW | integer | 以分钟为单位,确定 `IMPORT_USER_MAX` 导入的时间窗口。 | IMPORT_USER_WINDOW=1 |
会话分叉速率限制
限制用户分叉对话的频率,以防止滥用。
注意:您可以同时使用这两种限制器,但默认情况下仅按 IP 进行限制。
IP 限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_FORK_IP | boolean | 是否限制每个 IP 在 `FORK_IP_WINDOW` 内可以创建的对话分支数量。 | LIMIT_FORK_IP=true |
| FORK_IP_MAX | integer | 一个 IP 在 `FORK_IP_WINDOW` 时间内可以创建的最大对话分支数量。 | FORK_IP_MAX=30 |
| FORK_IP_WINDOW | integer | 以分钟为单位,确定 `FORK_IP_MAX` 分叉的时间窗口。 | FORK_IP_WINDOW=1 |
用户限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| LIMIT_FORK_USER | boolean | 是否限制用户在 `FORK_USER_WINDOW` 时间内可以创建的对话分支数量。 | LIMIT_FORK_USER=false |
| FORK_USER_MAX | integer | 用户在每个 `FORK_USER_WINDOW` 内可以创建的最大对话分支数量。 | FORK_USER_MAX=7 |
| FORK_USER_WINDOW | integer | 以分钟为单位,确定 `FORK_USER_MAX` 分叉的时间窗口。 | FORK_USER_WINDOW=1 |
文件上传速率限制
限制用户上传文件的频率,以防止滥用。
注意:这些也可以通过
librechat.yaml中的rateLimits.fileUploads部分进行配置。
IP 限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| FILE_UPLOAD_IP_MAX | integer | 每个 IP 在 `FILE_UPLOAD_IP_WINDOW` 时间窗口内允许的最大文件上传次数。默认值:100。 | # FILE_UPLOAD_IP_MAX=100 |
| FILE_UPLOAD_IP_WINDOW | integer | 以分钟为单位,确定 `FILE_UPLOAD_IP_MAX` 的时间窗口。默认值:15。 | # FILE_UPLOAD_IP_WINDOW=15 |
用户限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| FILE_UPLOAD_USER_MAX | integer | 每个用户在 `FILE_UPLOAD_USER_WINDOW` 时间窗口内允许的最大文件上传数。默认值:50。 | # FILE_UPLOAD_USER_MAX=50 |
| FILE_UPLOAD_USER_WINDOW | integer | 以分钟为单位,确定 `FILE_UPLOAD_USER_MAX` 的时间窗口。默认值:15。 | # FILE_UPLOAD_USER_WINDOW=15 |
TTS (Text-to-Speech) 速率限制
限制用户使用文本转语音(Text-to-Speech)的频率,以防止滥用。
注意:这些也可以通过
librechat.yaml中的rateLimits.tts部分进行配置。
IP 限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| TTS_IP_MAX | integer | 每个 IP 在 `TTS_IP_WINDOW` 时间段内允许的最大 TTS 请求数。默认值:100。 | # TTS_IP_MAX=100 |
| TTS_IP_WINDOW | integer | 以分钟为单位,确定 `TTS_IP_MAX` 的时间窗口。默认值:1。 | # TTS_IP_WINDOW=1 |
用户限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| TTS_USER_MAX | integer | 每个用户在 `TTS_USER_WINDOW` 时间窗口内的最大 TTS 请求数。默认值:50。 | # TTS_USER_MAX=50 |
| TTS_USER_WINDOW | integer | 以分钟为单位,确定 `TTS_USER_MAX` 的时间窗口。默认值:1。 | # TTS_USER_WINDOW=1 |
STT (Speech-to-Text) 速率限制
限制用户使用语音转文字(Speech-to-Text)的频率,以防止滥用。
注意:这些也可以通过
librechat.yaml中的rateLimits.stt部分进行配置。
IP 限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| STT_IP_MAX | integer | 每个 IP 在 `STT_IP_WINDOW` 时间窗口内允许的最大 STT 请求数。默认值:100。 | # STT_IP_MAX=100 |
| STT_IP_WINDOW | integer | 以分钟为单位,确定 `STT_IP_MAX` 的时间窗口。默认值:1。 | # STT_IP_WINDOW=1 |
用户限制器:
| Key | Type | Description | Example |
|---|---|---|---|
| STT_USER_MAX | integer | 每个用户在 `STT_USER_WINDOW` 时间窗口内的最大 STT 请求数。默认值:50。 | # STT_USER_MAX=50 |
| STT_USER_WINDOW | integer | 以分钟为单位,确定 `STT_USER_MAX` 的时间窗口。默认值:1。 | # STT_USER_WINDOW=1 |
余额
以下功能允许管理系统 endpoint 内的用户余额。您可以选择手动添加余额,也可以选择实现一个为用户自动累积余额的系统。如果在配置中定义了特定的初始余额,当用户注册时,系统会自动将代币存入用户的余额中。
请参阅:Token Usage
| Key | Type | Description | Example |
|---|---|---|---|
| CHECK_BALANCE | boolean | 为 OpenAI/Plugins endpoint 启用代币额度余额。 | CHECK_BALANCE=false |
| START_BALANCE | integer | 如果设置了该值,用户注册后将获得相应的积分余额。 | START_BALANCE=20000 |
管理余额
- 运行
npm run add-balance以手动添加余额。- 您也可以指定要添加的邮箱和代币额度,例如:
npm run add-balance [email protected] 1000
- 您也可以指定要添加的邮箱和代币额度,例如:
- 运行
npm run set-balance以手动设置余额,用法类似于add-balance。 - 运行
npm run list-balances以列出每个用户的余额。
注意: 1000 credits = $0.001 (0.001 美元)
注册与登录
配置文件说明
本节中的所有身份验证设置都应在您的 .env 文件中进行配置,而不是在 librechat.yaml 文件或 docker-compose.override.yml 中。docker-compose.override.yml 文件仅用于挂载卷和设置 Docker 的环境变量,而 librechat.yaml 文件则用于自定义 endpoint 和其他应用程序设置。
- 常规设置:
| Key | Type | Description | Example |
|---|---|---|---|
| ALLOW_EMAIL_LOGIN | boolean | 启用或禁用仅限电子邮件登录。 | ALLOW_EMAIL_LOGIN=true |
| ALLOW_REGISTRATION | boolean | 启用或禁用新用户的电子邮件注册。 | ALLOW_REGISTRATION=true |
| ALLOW_SOCIAL_LOGIN | boolean | 允许用户通过各种社交网络连接到 LibreChat。 | ALLOW_SOCIAL_LOGIN=false |
| ALLOW_SOCIAL_REGISTRATION | boolean | 启用或禁用使用各种社交网络注册新用户的功能。 | ALLOW_SOCIAL_REGISTRATION=false |
| ALLOW_PASSWORD_RESET | boolean | 启用或禁用用户自行重置密码的功能 | ALLOW_PASSWORD_RESET=false |
| ALLOW_ACCOUNT_DELETION | boolean | 启用或禁用用户自行删除账户的功能。如果省略或注释掉,则默认启用。 | ALLOW_ACCOUNT_DELETION=true |
| ALLOW_UNVERIFIED_EMAIL_LOGIN | boolean | 设置为 true 以允许用户在不验证电子邮件地址的情况下登录。如果设置为 false,用户在登录前必须先验证其电子邮件。 | ALLOW_UNVERIFIED_EMAIL_LOGIN=true |
| MIN_PASSWORD_LENGTH | number | 用户身份验证的最小密码长度。使用 LDAP 身份验证时,您可能需要将其设置为 1 以绕过本地密码验证,因为 LDAP 服务器会处理其自身的密码策略。 | MIN_PASSWORD_LENGTH=8 |
快速提示: 即使禁用了注册功能,也可以使用
npm run create-user直接将用户添加到数据库。
快速提示: 在禁用注册功能的情况下,您可以使用
npm run delete-user [email protected]删除用户。
- 会话与刷新令牌设置:
| Key | Type | Description | Example |
|---|---|---|---|
| SESSION_EXPIRY | integer (milliseconds) | 会话过期时间。 | SESSION_EXPIRY=1000 * 60 * 15 |
| REFRESH_TOKEN_EXPIRY | integer (milliseconds) | 刷新令牌过期时间。 | REFRESH_TOKEN_EXPIRY=(1000 * 60 * 60 * 24) * 7 |
| SESSION_COOKIE_SECURE | boolean | 覆盖会话/身份验证 cookie 的 Secure 属性。留空则使用默认的 NODE_ENV/DOMAIN_SERVER 启发式规则。 | # SESSION_COOKIE_SECURE=false |
-
更多信息请参考:Refresh Token
-
JWT 设置:
您应该使用新的安全值。提供的示例是 32 字节的密钥(十六进制下为 64 个字符)。 使用此 replit 快速生成一些:JWT Keys
| Key | Type | Description | Example |
|---|---|---|---|
| JWT_SECRET | string (hex) | JWT 密钥。 | JWT_SECRET=16f8c0ef4a5d391b26034086c628469d3f9f497f08163ab9b40137092f2909ef |
| JWT_REFRESH_SECRET | string (hex) | JWT 刷新密钥。 | JWT_REFRESH_SECRET=eaa5191f2914e30b9387fd84e254e4ba6fc51b4654968a9b0803b456a54b8418 |
社交登录
更多详情请见:OAuth2-OIDC
Apple 身份验证
更多信息请参考:Apple Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| APPLE_CLIENT_ID | string | 您的 Apple Services ID(例如 com.yourdomain.librechat.services)。 | APPLE_CLIENT_ID=com.yourdomain.librechat.services |
| APPLE_TEAM_ID | string | 您的 Apple Developer Team ID。 | APPLE_TEAM_ID=YOUR_TEAM_ID |
| APPLE_KEY_ID | string | 从下载的密钥中获取您的 Apple Key ID。 | APPLE_KEY_ID=YOUR_KEY_ID |
| APPLE_PRIVATE_KEY_PATH | string | 您下载的 .p8 文件的绝对路径。 | APPLE_PRIVATE_KEY_PATH=/path/to/AuthKey.p8 |
| APPLE_CALLBACK_URL | string | 用于 Apple 身份验证的回调 URL。 | APPLE_CALLBACK_URL=/oauth/apple/callback |
Discord 身份验证
更多信息:Discord
| Key | Type | Description | Example |
|---|---|---|---|
| DISCORD_CLIENT_ID | string | 您的 Discord 客户端 ID。 | DISCORD_CLIENT_ID= |
| DISCORD_CLIENT_SECRET | string | 您的 Discord 客户端密钥。 | DISCORD_CLIENT_SECRET= |
| DISCORD_CALLBACK_URL | string | 用于 Discord 身份验证的回调 URL。 | DISCORD_CALLBACK_URL=/oauth/discord/callback |
Facebook 身份验证
更多信息:Facebook 身份验证
| Key | Type | Description | Example |
|---|---|---|---|
| FACEBOOK_CLIENT_ID | string | 您的 Facebook 客户端 ID。 | FACEBOOK_CLIENT_ID= |
| FACEBOOK_CLIENT_SECRET | string | 您的 Facebook 客户端密钥。 | FACEBOOK_CLIENT_SECRET= |
| FACEBOOK_CALLBACK_URL | string | 用于 Facebook 身份验证的回调 URL。 | FACEBOOK_CALLBACK_URL=/oauth/facebook/callback |
GitHub 身份验证
更多信息请参阅:GitHub Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| GITHUB_CLIENT_ID | string | 您的 GitHub 客户端 ID。 | GITHUB_CLIENT_ID= |
| GITHUB_CLIENT_SECRET | string | 您的 GitHub 客户端密钥。 | GITHUB_CLIENT_SECRET= |
| GITHUB_CALLBACK_URL | string | GitHub 身份验证的回调 URL。 | GITHUB_CALLBACK_URL=/oauth/github/callback |
| GITHUB_ENTERPRISE_BASE_URL | string | 可选:您的 GitHub Enterprise 实例的基准 URL。 | GITHUB_ENTERPRISE_BASE_URL= |
| GITHUB_ENTERPRISE_USER_AGENT | string | 可选:GitHub Enterprise 请求的用户代理。 | GITHUB_ENTERPRISE_USER_AGENT= |
Google 身份验证
更多信息请参阅:Google Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| GOOGLE_CLIENT_ID | string | 您的 Google 客户端 ID。 | GOOGLE_CLIENT_ID= |
| GOOGLE_CLIENT_SECRET | string | 您的 Google 客户端密钥。 | GOOGLE_CLIENT_SECRET= |
| GOOGLE_CALLBACK_URL | string | 用于 Google 身份验证的回调 URL。 | GOOGLE_CALLBACK_URL=/oauth/google/callback |
OpenID Connect
更多信息:
| Key | Type | Description | Example |
|---|---|---|---|
| OPENID_CLIENT_ID | string | 您的 OpenID 客户端 ID。 | OPENID_CLIENT_ID= |
| OPENID_CLIENT_SECRET | string | 您的 OpenID 客户端密钥。 | OPENID_CLIENT_SECRET= |
| OPENID_ISSUER | string | OpenID 发行方 URL。 | OPENID_ISSUER= |
| OPENID_SESSION_SECRET | string | 用于 OpenID 会话存储的密钥。 | OPENID_SESSION_SECRET= |
| OPENID_SCOPE | string | OpenID 作用域。 | OPENID_SCOPE="openid profile email" |
| OPENID_CALLBACK_URL | string | 用于 OpenID 身份验证的回调 URL。 | OPENID_CALLBACK_URL=/oauth/openid/callback |
| OPENID_AUDIENCE | string | 用于 OpenID JWT 验证和授权请求的 Audience 值。JWT 验证支持逗号分隔的值;授权请求使用第一个非空值。当 OPENID_REUSE_TOKENS=true 时,Auth0 需要此项以接收 JWT 访问令牌而非不透明令牌。 | OPENID_AUDIENCE=https://api.librechat.com |
| OPENID_REQUIRED_ROLE | string | 用于验证所需的角色。支持单个角色或多个以逗号分隔的角色。当指定多个角色时,用户只需具备其中任意一个角色即可(“或”逻辑)。 | OPENID_REQUIRED_ROLE=admin or OPENID_REQUIRED_ROLE=role1,role2,admin |
| OPENID_REQUIRED_ROLE_TOKEN_KIND | string | 用于必需角色验证的令牌类型。 | OPENID_REQUIRED_ROLE_TOKEN_KIND= |
| OPENID_REQUIRED_ROLE_PARAMETER_PATH | string | 用于必需角色验证的参数路径。 | OPENID_REQUIRED_ROLE_PARAMETER_PATH= |
| OPENID_ADMIN_ROLE | string | 用户在 LibreChat 中成为管理员所需具备的角色。 | OPENID_ADMIN_ROLE= |
| OPENID_ADMIN_ROLE_TOKEN_KIND | string | 用于管理员角色验证的信息来源。可选值包括:access、id 或 userinfo。 | OPENID_ADMIN_ROLE_TOKEN_KIND= |
| OPENID_ADMIN_ROLE_PARAMETER_PATH | string | 用于必需角色验证的参数路径。 | OPENID_ADMIN_ROLE_PARAMETER_PATH= |
| OPENID_ROLE_SYNC_ENABLED | boolean | 为非管理员角色启用通用的 OpenID 角色同步。ADMIN 角色无法通过角色同步分配;请使用 OPENID_ADMIN_ROLE 进行管理员权限提升。 | OPENID_ROLE_SYNC_ENABLED=false |
| OPENID_ROLE_SYNC_API_ENABLED | boolean | 启用基于 API 的角色同步助手。需要 OPENID_ROLE_SYNC_ENABLED=true。 | OPENID_ROLE_SYNC_API_ENABLED=false |
| OPENID_ROLE_SYNC_SOURCE | string | 用于角色声明的令牌来源。必须是以下之一:access, id, userinfo。默认值:id。 | OPENID_ROLE_SYNC_SOURCE=id |
| OPENID_ROLE_SYNC_CLAIM | string | 包含提供商角色或组的声明路径。当启用角色同步时为必填项。 | OPENID_ROLE_SYNC_CLAIM= |
| OPENID_ROLE_SYNC_ROLE_PRIORITY | string | 以逗号分隔的 LibreChat 角色,按重要性从高到低排序。系统将分配第一个匹配的角色。 | OPENID_ROLE_SYNC_ROLE_PRIORITY=Support,User |
| OPENID_ROLE_SYNC_FALLBACK_ROLE | string | 当没有匹配的优先级角色时分配的 LibreChat 角色。配置后,该回退角色具有权威性。 | OPENID_ROLE_SYNC_FALLBACK_ROLE=USER |
| OPENID_BUTTON_LABEL | string | OpenID 登录按钮的标签。 | OPENID_BUTTON_LABEL= |
| OPENID_IMAGE_URL | string | OpenID 登录按钮图片的 URL。 | OPENID_IMAGE_URL= |
| OPENID_USE_END_SESSION_ENDPOINT | string | 是否使用 Issuer End Session Endpoint 作为注销重定向 | OPENID_USE_END_SESSION_ENDPOINT=TRUE |
| OPENID_MAX_LOGOUT_URL_LENGTH | number | 在使用 logout_hint 代替 id_token_hint 之前,注销 URL 的最大长度。默认值:2000。 | # OPENID_MAX_LOGOUT_URL_LENGTH=2000 |
| OPENID_AUTO_REDIRECT | boolean | 是否自动重定向到 OpenID 提供商。 | OPENID_AUTO_REDIRECT=true |
| OPENID_USE_PKCE | boolean | 使用 PKCE (Proof Key for Code Exchange) 进行 OpenID 身份验证。对于没有客户端密钥的公共客户端,请将 OPENID_CLIENT_SECRET 留空并将此项设置为 true。 | # OPENID_USE_PKCE=true |
| OPENID_POST_LOGOUT_REDIRECT_URI | string | OpenID 注销后的重定向 URI。默认为 ${DOMAIN_CLIENT}/login。 | # OPENID_POST_LOGOUT_REDIRECT_URI= |
| OPENID_CLOCK_TOLERANCE | number | 用于令牌验证的时钟容差(秒)。默认值:300。 | # OPENID_CLOCK_TOLERANCE=300 |
| OPENID_GENERATE_NONCE | boolean | 强制 OpenID 客户端生成 nonce 参数。某些身份提供商(如 AWS Cognito(特别是联合身份验证时)和 Authentik)需要此项。 | OPENID_GENERATE_NONCE=true |
| DEBUG_OPENID_REQUESTS | boolean | 启用 OpenID 请求标头的详细日志记录。禁用时(默认),仅在调试级别记录请求 URL。启用时,也会记录请求标头(敏感数据已脱敏),以便更深入地调试身份验证问题。 | DEBUG_OPENID_REQUESTS=false |
| OPENID_USERNAME_CLAIM | string | 来自 OpenID 提供商的用于存储为用户用户名的用户信息属性。 | OPENID_USERNAME_CLAIM= |
| OPENID_NAME_CLAIM | string | 来自 OpenID 提供商的用户信息属性,用于存储为用户的显示名称。 | OPENID_NAME_CLAIM= |
| OPENID_EMAIL_CLAIM | string | 用于用户匹配的电子邮件/标识符的用户信息声明(例如,Entra ID 使用 "upn")。未设置时,默认为:email → preferred_username → upn。 | OPENID_EMAIL_CLAIM= |
OpenID 角色同步
当启用角色同步时,OPENID_ROLE_SYNC_CLAIM 是必需的。
OPENID_ROLE_SYNC_API_ENABLED=true 同时要求 OPENID_ROLE_SYNC_ENABLED=true。通用角色同步无法分配 ADMIN;请使用 OPENID_ADMIN_ROLE 进行管理员权限提升。
OpenID Connect 令牌重用
LibreChat 支持重用由您的 OpenID Connect 提供商(如 Azure Entra ID 或 Auth0)颁发的访问令牌和刷新令牌,以管理用户身份验证状态。当此功能启用时,作为 Cookie 传递给用户的刷新令牌将由您的 OpenID 提供商颁发,而不是由 LibreChat 颁发。
| Key | Type | Description | Example |
|---|---|---|---|
| OPENID_REUSE_TOKENS | boolean | 启用 OpenID 提供商令牌的复用以进行会话管理。 | OPENID_REUSE_TOKENS=false |
| OPENID_SCOPE | string | 以空格分隔的 OpenID 作用域列表。必须包含 offline_access 以实现令牌重用。 | OPENID_SCOPE=api://librechat/.default openid profile email offline_access |
| OPENID_AUDIENCE | string | 用于 OpenID JWT 验证和授权请求的 Audience 值。JWT 验证支持逗号分隔的值;授权请求使用第一个非空值。当 OPENID_REUSE_TOKENS=true 时,Auth0 必须配置此项。请参阅上方 OpenID 主章节中的说明。 | OPENID_AUDIENCE=https://api.librechat.com |
| OPENID_REUSE_MAX_SESSION_AGE_MS | number | LibreChat 在强制执行 IdP 刷新之前,复用 OpenID 会话令牌的最长有效期。默认值:900000 毫秒 / 15 分钟。 | OPENID_REUSE_MAX_SESSION_AGE_MS=900000 |
| OPENID_JWKS_URL_CACHE_ENABLED | boolean | 启用签名密钥验证结果的缓存。 | OPENID_JWKS_URL_CACHE_ENABLED=true |
| OPENID_JWKS_URL_CACHE_TIME | number | 缓存持续时间(以毫秒为单位,默认值:600000 毫秒 / 10 分钟)。 | OPENID_JWKS_URL_CACHE_TIME=600000 |
| OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED | boolean | 为用户信息启用 on-behalf-of 流程。 | OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true |
| OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE | string | 代表用户流程中用户信息的范围。 | OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE=user.read |
| OPENID_USE_END_SESSION_ENDPOINT | boolean | 启用注销时使用的 end session endpoint。 | OPENID_USE_END_SESSION_ENDPOINT=true |
| OPENID_MAX_LOGOUT_URL_LENGTH | number | 在切换到 logout_hint 之前,注销 URL 的最大字符长度。这有助于防止 id_token_hint 超过服务器限制时出现 URI 过长错误。默认值:2000。 | OPENID_MAX_LOGOUT_URL_LENGTH=2000 |
OPENID_REUSE_MAX_SESSION_AGE_MS 接受类似于 SESSION_EXPIRY 的算术表达式。当您的提供商在刷新时撤销之前的访问令牌时,请将其增加至接近 IdP 访问令牌的生命周期,以便下游消费者(例如 MCP 服务器)能够完成对仍然有效的持有者令牌(bearer token)的使用。
注意
有关详细的配置步骤和先决条件,请参阅 Re-use OpenID Tokens for Login Session。
Microsoft Graph API / Entra ID 集成
当使用 Azure Entra ID(前身为 Azure AD)作为您的 OpenID 提供商时,您可以启用额外的 Microsoft Graph API 功能,以在权限和共享系统中实现增强的人员和群组搜索能力。
| Key | Type | Description | Example |
|---|---|---|---|
| USE_ENTRA_ID_FOR_PEOPLE_SEARCH | boolean | 在权限/共享系统中启用 Entra ID 人员搜索集成。启用后,人员选择器将同时搜索本地数据库和 Entra ID。 | USE_ENTRA_ID_FOR_PEOPLE_SEARCH=false |
| ENTRA_ID_INCLUDE_OWNERS_AS_MEMBERS | boolean | 启用后,Entra ID 群组所有者将被视为该群组的成员。 | ENTRA_ID_INCLUDE_OWNERS_AS_MEMBERS=false |
| OPENID_GRAPH_SCOPES | string | 进行人员/群组搜索所需的 Microsoft Graph API 范围。默认范围提供对用户资料和群组成员身份的访问权限。 | OPENID_GRAPH_SCOPES=User.Read,People.Read,GroupMember.Read.All,User.ReadBasic.All |
重要先决条件
- 您必须将 Azure Entra ID 配置为您的 OpenID 提供商 - 必须启用 OpenID 令牌重用 (
OPENID_REUSE_TOKENS=true) - 如果不启用此功能,该特性将无法工作 - 您的 Azure 应用注册必须具备相应的 Microsoft Graph API 权限 - 对于群组搜索功能,某些 Graph API 范围可能需要管理员同意
SharePoint 集成
LibreChat 支持与 SharePoint Online 和 OneDrive for Business 的直接集成,允许用户在对话中直接选择并附加来自其 SharePoint 库的文件。此企业级功能利用了现有的 Azure Entra ID 身份验证。
| Key | Type | Description | Example |
|---|---|---|---|
| ENABLE_SHAREPOINT_FILEPICKER | boolean | 在聊天和智能体面板中启用 SharePoint 文件选择器。启用后,文件附件菜单中将增加“从 SharePoint”选项。 | ENABLE_SHAREPOINT_FILEPICKER=true |
| SHAREPOINT_BASE_URL | string | SharePoint 租户基础 URL。启用 SharePoint 集成时必填。 | SHAREPOINT_BASE_URL=https://yourtenant.sharepoint.com |
| SHAREPOINT_PICKER_SHAREPOINT_SCOPE | string | 用于文件选择器的 SharePoint 特定 OAuth 范围。用于在打开 SharePoint 文件选择器界面时进行身份验证。 | SHAREPOINT_PICKER_SHAREPOINT_SCOPE=https://yourtenant.sharepoint.com/AllSites.Read |
| SHAREPOINT_PICKER_GRAPH_SCOPE | string | 用于文件下载的 Microsoft Graph API 范围。用于在选择后从 SharePoint 下载文件。 | SHAREPOINT_PICKER_GRAPH_SCOPE=Files.Read.All |
关键要求
必须配置以下所有内容,SharePoint 集成才能正常工作:
- 必须完全配置 Azure Entra ID 身份验证
OPENID_REUSE_TOKENS=true是强制性的(使用代表令牌流/on-behalf-of token flow)OPENID_SCOPE必须包含您的 LibreChat 应用 API 范围,例如api://<client-id>/access_as_user- 当使用 Azure Entra ID 的 app-audience 范围时,必须设置
OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true。 - 您的 Azure 应用注册必须具有 SharePoint 和 Graph API 权限
- 您的 Azure 应用注册必须公开
OPENID_SCOPE中使用的 LibreChat API 范围。 - 必须设置所有四个 SharePoint 环境变量
- 在生产环境中必须使用 HTTPS
功能特性
启用后,用户可以:
- 从 SharePoint 文档库和 OneDrive for Business 访问文件
- 一次选择多个文件(默认上限:10 个文件)
- 查看实时下载进度
- 文件会被下载并像常规上传一样附加到对话中
有关 SharePoint 配置的详细说明,请参阅:SharePoint 集成指南
SAML
更多信息:
OpenID 与 SAML 的互斥性
如果启用了 OpenID,SAML 身份验证将自动禁用。
同一时间只能启用一种身份验证方法。
| Key | Type | Description | Example |
|---|---|---|---|
| SAML_ENTRY_POINT | string | SAML 身份提供商 (IdP) 入口点 URL。 | SAML_ENTRY_POINT= |
| SAML_ISSUER | string | SAML 服务提供商 (SP) 实体 ID。 | SAML_ISSUER= |
| SAML_CERT | string | SAML 签名证书,以文件路径或单行 PEM 字符串形式提供。 | SAML_CERT= |
| SAML_CALLBACK_URL | string | SAML 身份验证的回调 URL。 | SAML_CALLBACK_URL=/oauth/saml/callback |
| SAML_SESSION_SECRET | string | 用于 SAML 会话存储的密钥。 | SAML_SESSION_SECRET= |
| SAML_EMAIL_CLAIM | string | <Optional>:SAML 断言中包含用户电子邮件的属性。(默认:email) | SAML_EMAIL_CLAIM= |
| SAML_USERNAME_CLAIM | string | <Optional>:SAML 断言中包含用户名的属性。(默认:username) | SAML_USERNAME_CLAIM= |
| SAML_GIVEN_NAME_CLAIM | string | <Optional>:SAML 断言中包含名字的属性。(默认值:given_name) | SAML_GIVEN_NAME_CLAIM= |
| SAML_FAMILY_NAME_CLAIM | string | <Optional>:SAML 断言中包含姓氏的属性。(默认:family_name) | SAML_FAMILY_NAME_CLAIM= |
| SAML_PICTURE_CLAIM | string | <Optional>:SAML 断言中包含头像 URL 的属性。(默认值:picture) | SAML_PICTURE_CLAIM= |
| SAML_NAME_CLAIM | string | <Optional>:SAML 断言中包含全名的属性。 | SAML_NAME_CLAIM= |
| SAML_BUTTON_LABEL | string | <Optional>:SAML 登录按钮的标签。 | SAML_BUTTON_LABEL= |
| SAML_IMAGE_URL | string | <Optional>:SAML 登录按钮图片的 URL。 | SAML_IMAGE_URL= |
| SAML_USE_AUTHN_RESPONSE_SIGNED | boolean | <Optional>:如果设为 "true",则对整个 SAML Response 进行签名。否则,仅对 Assertion 进行签名(默认)。 | SAML_USE_AUTHN_RESPONSE_SIGNED= |
LDAP/AD 身份验证
更多信息请参考:LDAP/AD Authentication
| Key | Type | Description | Example |
|---|---|---|---|
| LDAP_URL | string | LDAP 服务器 URL。 | LDAP_URL=ldap://localhost:389 |
| LDAP_BIND_DN | string | 绑定 DN | LDAP_BIND_DN=cn=root |
| LDAP_BIND_CREDENTIALS | string | bindDN 的密码 | LDAP_BIND_CREDENTIALS=password |
| LDAP_USER_SEARCH_BASE | string | LDAP 用户搜索基准 (search base) | LDAP_USER_SEARCH_BASE=o=users,o=example.com |
| LDAP_SEARCH_FILTER | string | LDAP 搜索过滤器 | LDAP_SEARCH_FILTER=mail={{username}} |
| LDAP_CA_CERT_PATH | string | CA 证书路径。 | LDAP_CA_CERT_PATH=/path/to/root_ca_cert.crt |
| LDAP_TLS_REJECT_UNAUTHORIZED | string | LDAP TLS 验证 | LDAP_TLS_REJECT_UNAUTHORIZED=true |
| LDAP_STARTTLS | string | 启用 LDAP StartTLS 以将连接升级为 TLS。设置为 true 以启用此功能。 | LDAP_STARTTLS=true |
| LDAP_LOGIN_USES_USERNAME | boolean | 使用用户名而非邮箱进行 LDAP 登录。 | # LDAP_LOGIN_USES_USERNAME=true |
| LDAP_ID | string | 用于唯一用户 ID 的 LDAP 属性。默认值:uid 或 sAMAccountName, mail。 | # LDAP_ID=uid |
| LDAP_USERNAME | string | 用于用户名的 LDAP 属性。默认值:givenName 或 mail。 | # LDAP_USERNAME=givenName |
| LDAP_EMAIL | string | 用于电子邮件的 LDAP 属性。默认值:mail。 | # LDAP_EMAIL=userPrincipalName |
| LDAP_FULL_NAME | string | 用于全名的 LDAP 属性。可以使用逗号分隔。默认值:givenName + surname。 | # LDAP_FULL_NAME=givenName,surname |
重置密码
电子邮件用于账户验证和密码重置。LibreChat 同时支持 Mailgun API 和传统的 SMTP 服务。请参阅:电子邮件设置
重要提示:您必须配置 Mailgun(推荐用于屏蔽 SMTP 的服务器)或 SMTP,以便电子邮件功能正常工作。
警告:如果未能为 Mailgun 或 SMTP 设置有效值,LibreChat 将使用不安全的密码重置方式!
Mailgun 配置(推荐)
对于在封锁 SMTP 端口的服务器上进行部署,Mailgun 特别有用。当同时设置了 MAILGUN_API_KEY 和 MAILGUN_DOMAIN 时,LibreChat 将使用 Mailgun 而非 SMTP。
| Key | Type | Description | Example |
|---|---|---|---|
| MAILGUN_API_KEY | string | 您的 Mailgun API 密钥(Mailgun 所必需)。 | MAILGUN_API_KEY= |
| MAILGUN_DOMAIN | string | 您的 Mailgun 域名(Mailgun 所必需)。 | MAILGUN_DOMAIN=mg.yourdomain.com |
| MAILGUN_HOST | string | Custom Mailgun API host (optional). Use https://api.eu.mailgun.net for EU region. | MAILGUN_HOST=https://api.mailgun.net |
| EMAIL_FROM | string | 发件人电子邮件地址。必填。 | [email protected] |
| EMAIL_FROM_NAME | string | 发件人名称(若未设置,则默认为 APP_TITLE)。 | EMAIL_FROM_NAME= |
SMTP 配置
如果未配置 Mailgun,LibreChat 将回退到 SMTP 设置。
警告:如果使用
EMAIL_SERVICE,请不要设置扩展连接参数: HOST, PORT, ENCRYPTION, ENCRYPTION_HOSTNAME, ALLOW_SELFSIGNED。
请参阅:nodemailer well-known-services
| Key | Type | Description | Example |
|---|---|---|---|
| EMAIL_SERVICE | string | 电子邮件服务(例如 Gmail、Outlook)。 | EMAIL_SERVICE= |
| EMAIL_HOST | string | 邮件服务器主机 | EMAIL_HOST= |
| EMAIL_PORT | number | 邮件服务器端口。 | EMAIL_PORT=25 |
| EMAIL_ENCRYPTION | string | 加密方法 (starttls, tls 等)。 | EMAIL_ENCRYPTION= |
| EMAIL_ENCRYPTION_HOSTNAME | string | 用于加密的主机名。 | EMAIL_ENCRYPTION_HOSTNAME= |
| EMAIL_ALLOW_SELFSIGNED | boolean | 允许自签名证书。 | EMAIL_ALLOW_SELFSIGNED= |
| EMAIL_USERNAME | string | 用于身份验证的用户名。 | EMAIL_USERNAME= |
| EMAIL_PASSWORD | string | 用于身份验证的密码。 | EMAIL_PASSWORD= |
| EMAIL_FROM_NAME | string | 发件人名称 | EMAIL_FROM_NAME= |
| EMAIL_FROM | string | 发件人电子邮件地址。必填。 | [email protected] |
Firebase CDN
请参阅:Firebase CDN 配置
重要
- 如果您正在使用 Firebase 作为您的文件存储策略,请在您的
librechat.yaml配置文件中将fileStrategy或fileStrategies设置为firebase。有关配置librechat.yaml文件的更多信息,请参阅 YAML 配置指南:自定义端点与配置
| Key | Type | Description | Example |
|---|---|---|---|
| FIREBASE_API_KEY | string | 您的 Firebase 项目的 API key。 | FIREBASE_API_KEY= |
| FIREBASE_AUTH_DOMAIN | string | 您项目的 Firebase Auth 域名。 | FIREBASE_AUTH_DOMAIN= |
| FIREBASE_PROJECT_ID | string | 您的 Firebase 项目 ID。 | FIREBASE_PROJECT_ID= |
| FIREBASE_STORAGE_BUCKET | string | 您项目的 Firebase Storage 存储桶。 | FIREBASE_STORAGE_BUCKET= |
| FIREBASE_MESSAGING_SENDER_ID | string | Firebase Cloud Messaging 发送者 ID。 | FIREBASE_MESSAGING_SENDER_ID= |
| FIREBASE_APP_ID | string | 您项目的 Firebase App ID。 | FIREBASE_APP_ID= |
Amazon S3 和 CloudFront
请参阅:Amazon S3 配置 和 CloudFront 配合 S3 使用
重要
如果您正在使用 S3 作为文件存储策略,请在您的 librechat.yaml 配置文件中设置 fileStrategy 或 fileStrategies。如果您使用 CloudFront,仍需要 S3 作为存储源。
| Key | Type | Description | Example |
|---|---|---|---|
| AWS_ACCESS_KEY_ID | string | 您的 IAM 用户访问密钥 ID。如果使用 IRSA,则为可选。 | AWS_ACCESS_KEY_ID=your_access_key_id |
| AWS_SECRET_ACCESS_KEY | string | 您的 IAM 用户私有访问密钥。如果使用 IRSA,则为可选。 | AWS_SECRET_ACCESS_KEY=your_secret_access_key |
| AWS_REGION | string | 您的 S3 存储桶所在的 AWS 区域。 | AWS_REGION=us-east-1 |
| AWS_BUCKET_NAME | string | 用于文件存储的 S3 存储桶名称。 | AWS_BUCKET_NAME=your_bucket_name |
| AWS_ENDPOINT_URL | string | Custom AWS endpoint URL (optional). For S3-compatible services. Include the URL scheme, such as https://a7g8.da.idrivee2-32.com. | # AWS_ENDPOINT_URL=https://your_endpoint_url |
| AWS_FORCE_PATH_STYLE | boolean | 对于需要路径样式 URL 的 S3 兼容提供商(例如 MinIO、Hetzner、Backblaze B2),请设置为 true。AWS S3 不需要此项。默认值:false。 | # AWS_FORCE_PATH_STYLE=false |
| CLOUDFRONT_KEY_PAIR_ID | string | CloudFront 公钥对 ID。用于签名 Cookie 和签名的 CloudFront 下载 URL,此项为必填。 | # CLOUDFRONT_KEY_PAIR_ID=K1234567890ABC |
| CLOUDFRONT_PRIVATE_KEY | string | CloudFront 私钥 PEM。用于签名 Cookie 和签名 CloudFront 下载 URL。注入此密钥时请保留 PEM 中的换行符。 | # CLOUDFRONT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----" |
注意: 对于 Kubernetes 部署(例如在 EKS 上),您可以使用 IRSA(IAM Roles for Service Accounts)来代替提供显式凭证。在这种情况下,仅需要
AWS_REGION和AWS_BUCKET_NAME。
Azure Blob Storage CDN
请参阅:Azure Blob Storage CDN Configuration
重要
如果您正在使用 Azure Blob Storage 作为文件存储策略,请在您的 librechat.yaml 配置文件中将 fileStrategy 或 fileStrategies 设置为 azure_blob。
| Key | Type | Description | Example |
|---|---|---|---|
| AZURE_STORAGE_CONNECTION_STRING | string | Azure Blob Storage 连接字符串。使用此项或 AZURE_STORAGE_ACCOUNT_NAME 以进行托管身份验证 (Managed Identity)。 | AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=... |
| AZURE_STORAGE_ACCOUNT_NAME | string | Azure 存储账户名称。用于托管标识身份验证(请勿设置连接字符串)。 | # AZURE_STORAGE_ACCOUNT_NAME=yourAccountName |
| AZURE_STORAGE_PUBLIC_ACCESS | boolean | 启用 blob 的公共访问权限。默认值:false。 | AZURE_STORAGE_PUBLIC_ACCESS=false |
| AZURE_CONTAINER_NAME | string | 用于文件存储的容器名称。默认值:files。 | AZURE_CONTAINER_NAME=files |
注意: 请使用
AZURE_STORAGE_CONNECTION_STRING(选项 A)或结合托管标识(Managed Identity)的AZURE_STORAGE_ACCOUNT_NAME(选项 B),二者选其一,请勿同时使用。
UI
帮助与常见问题按钮
| Key | Type | Description | Example |
|---|---|---|---|
| HELP_AND_FAQ_URL | string | 帮助与常见问题解答 URL。如果为空或被注释,该按钮将启用。若要禁用“帮助与常见问题解答”按钮,请将其设置为 "/"。 | HELP_AND_FAQ_URL=https://librechat.ai |
行为:
为静态文件设置 Cache-Control 响应头。这些配置仅在 NODE_ENV 设置为 production 时生效。
正确设置缓存头对于优化 Web 应用程序的性能和效率至关重要。通过控制浏览器和 CDN 存储静态文件副本的时长,您可以显著降低服务器负载、缩短页面加载时间并改善整体用户体验。
- 取消注释
STATIC_CACHE_MAX_AGE以更改静态文件的max-age。默认设置为 4 周。 - 取消注释
STATIC_CACHE_S_MAX_AGE以更改静态文件的s-maxage。默认情况下,此值设置为 1 周。- 这是针对 shared cache(共享缓存)的,它被 CDN 和代理服务器所使用。
应用标题与页脚
| Key | Type | Description | Example |
|---|---|---|---|
| APP_TITLE | string | 应用标题 | APP_TITLE=LibreChat |
| CUSTOM_FOOTER | string | 自定义页脚 | # CUSTOM_FOOTER="My custom footer" |
| TEMP_CHAT_RETENTION_HOURS | number | **已弃用:** 请改用 librechat.yaml 中的 `interface.temporaryChatRetention`。保留临时对话的小时数。默认值:720(30 天)。 | # TEMP_CHAT_RETENTION_HOURS=168 |
行为:
- 取消注释
CUSTOM_FOOTER以添加自定义页脚。 - 取消注释并将
CUSTOM_FOOTER留空以移除页脚。 - 现在,您可以在 CUSTOM_FOOTER 的值中使用以下格式添加一个或多个链接:
[Anchor text](URL)。每个链接应使用竖线 (|) 进行分隔。
Markdown example:
CUSTOM_FOOTER=[Link 1](http://example1.com) | [Link 2](http://example2.com)
生日帽
| Key | Type | Description | Example |
|---|---|---|---|
| SHOW_BIRTHDAY_ICON | boolean | 显示生日帽图标。 | # SHOW_BIRTHDAY_ICON=true |
行为:
- 生日帽图标会在 2月11日(LibreChat 的生日)自动显示。
- 将
SHOW_BIRTHDAY_ICON设置为false以禁用生日帽图标。 - 将
SHOW_BIRTHDAY_ICON设置为true以始终启用生日帽图标。
分析
Google Tag Manager
LibreChat 支持使用 Google Tag Manager 进行分析。你需要在 LibreChat 中启用它,为此你需要一个 Google Tag Manager ID。请按照此指南生成 Google Tag Manager ID 并配置 Google Analytics。然后,将 ANALYTICS_GTM_ID 环境变量设置为你的 Google Tag Manager ID。
注意: 如果未设置 ANALYTICS_GTM_ID,则不会启用 Google Tag Manager。如果设置不正确,您将看到对 gtm.js 的请求失败。
| Key | Type | Description | Example |
|---|---|---|---|
| ANALYTICS_GTM_ID | string | Google Tag Manager ID | ANALYTICS_GTM_ID= |
会话导入
配置对话文件导入的限制,以防止内存问题。
| Key | Type | Description | Example |
|---|---|---|---|
| CONVERSATION_IMPORT_MAX_FILE_SIZE_BYTES | number | 对话导入的最大文件大小(以字节为单位)。默认值:0(不强制限制)。示例:262144000(250 MiB)。 | # CONVERSATION_IMPORT_MAX_FILE_SIZE_BYTES=262144000 |
内联文件预览
控制生成文件在跳过内联预览提取并仅保留为下载模式之前的大小限制。
| Key | Type | Description | Example |
|---|---|---|---|
| FILE_PREVIEW_MAX_EXTRACT_BYTES | number | 代码执行工件内联预览的最大源文件大小(以字节为单位)。默认值:2097152 (2 MiB)。渲染后的 HTML 预览仍有单独的上限,因此即使文件大小低于此值,内容非常丰富的文件也可能跳过预览。 | # FILE_PREVIEW_MAX_EXTRACT_BYTES=2097152 |
MCP (Model Context Protocol)
配置 Model Context Protocol 设置以实现增强的服务器管理和 OAuth 支持。
MCP Server Configuration
| Key | Type | Description | Example |
|---|---|---|---|
| MCP_OAUTH_ON_AUTH_ERROR | boolean | 当未找到 OAuth 元数据时,将 401/403 响应视为 OAuth 要求。 | MCP_OAUTH_ON_AUTH_ERROR=true |
| MCP_OAUTH_DETECTION_TIMEOUT | number | OAuth 检测请求的超时时间(以毫秒为单位)。 | MCP_OAUTH_DETECTION_TIMEOUT=5000 |
| MCP_OAUTH_HANDLING_TIMEOUT | number | LibreChat 等待用户完成 MCP OAuth 流程的超时时长。默认值:600000 毫秒(10 分钟)。 | MCP_OAUTH_HANDLING_TIMEOUT=600000 |
| MCP_OAUTH_FLOW_TTL | number | MCP OAuth 流程状态的保留时长。LibreChat 会将其限制在 MCP_OAUTH_HANDLING_TIMEOUT 以上,以便接近截止时间的回调仍能完成。默认值:900000 毫秒(15 分钟)。 | MCP_OAUTH_FLOW_TTL=900000 |
| MCP_CONNECTION_CHECK_TTL | number | 缓存连接状态检查的毫秒数,以避免昂贵的验证操作。 | MCP_CONNECTION_CHECK_TTL=30000 |
| MCP_TOOLS_LIST_MAX_PAGES | number | 当 MCP 服务器分页其工具列表(游标分页)时,请求的最大工具/列表页数。限制分页循环以防止行为异常的服务器导致工具发现过程停滞。最小值为 1。默认值:50。 | MCP_TOOLS_LIST_MAX_PAGES=50 |
| MCP_SKIP_CODE_CHALLENGE_CHECK | boolean | 跳过代码质询方法验证。设置为 true 时,即使未在 .well-known/openid-configuration 中声明,也会强制使用 S256 代码质询。 | MCP_SKIP_CODE_CHALLENGE_CHECK=false |
| MCP_STREAMABLE_HTTP_MAX_RESPONSE_BYTES | number | 在拒绝非 GET 可流式 HTTP MCP 响应之前允许的最大字节数。设置为 0 以禁用。默认值:16777216 (16 MiB)。 | # MCP_STREAMABLE_HTTP_MAX_RESPONSE_BYTES=16777216 |
| MCP_STREAMABLE_HTTP_MAX_LINE_BYTES | number | 非 GET 可流式传输 HTTP MCP 响应中单行 SSE 允许的最大字节数。设置为 0 则禁用。默认值:5242880 (5 MiB)。 | # MCP_STREAMABLE_HTTP_MAX_LINE_BYTES=5242880 |
其他
Redis
Redis 为 LibreChat 提供了显著的性能提升,并实现了水平扩展能力。
注意: Redis 支持目前处于实验阶段,使用时可能会遇到一些问题。
重要提示: 如果使用 Redis,在更改任何 LibreChat 设置后,您应该清除缓存。
有关详细配置和示例,请参阅:Redis 配置指南
| Key | Type | Description | Example |
|---|---|---|---|
| USE_REDIS | boolean | 启用 Redis 以进行缓存和会话存储。当设置为 true 时,必须提供 REDIS_URI。 | USE_REDIS=true |
| USE_REDIS_STREAMS | boolean | 启用 Redis 以实现可恢复的 LLM 流。如果未设置,则默认为 USE_REDIS 的值。设置为 false 可将内存存储用于流。 | # USE_REDIS_STREAMS=true |
| REDIS_URI | string | Redis 连接 URI。单实例格式:`redis://host:port`。集群格式:以逗号分隔的 URI。 | REDIS_URI=redis://127.0.0.1:6379 |
| USE_REDIS_CLUSTER | boolean | 在使用单个 URI 时启用 Redis 集群模式 | # USE_REDIS_CLUSTER="true" |
| REDIS_CLUSTER_SAFE_DELETE | boolean | 逐个删除 Redis 缓存键,以避免在内部对键进行分片的单端点托管 Redis 服务上出现 CROSSSLOT 错误。 | # REDIS_CLUSTER_SAFE_DELETE=true |
| REDIS_USERNAME | string | 用于身份验证的 Redis 用户名。如果同时提供了 URI 中的用户名,此项将覆盖它。 | # REDIS_USERNAME=your_redis_username |
| REDIS_PASSWORD | string | 用于身份验证的 Redis 密码。如果同时提供,此项将覆盖 URI 中的密码。 | # REDIS_PASSWORD=your_redis_password |
| REDIS_CA | string | 使用 rediss:// 协议时用于 TLS 验证的 CA 证书路径。 | # REDIS_CA=/path/to/ca-cert.pem |
| REDIS_KEY_PREFIX | string | 所有 Redis 键的静态前缀,用于防止跨部署污染。 | # REDIS_KEY_PREFIX=librechat-prod-v2 |
| REDIS_KEY_PREFIX_VAR | string | 包含动态前缀的环境变量名称(例如 Cloud Run 的 K_REVISION)。不能与 REDIS_KEY_PREFIX 同时使用。 | # REDIS_KEY_PREFIX_VAR=K_REVISION |
| REDIS_MAX_LISTENERS | number | 每个 Redis 客户端的最大事件监听器数量。防止内存泄漏。默认值:40。 | # REDIS_MAX_LISTENERS=40 |
| REDIS_PING_INTERVAL | number | 用于维持连接的 Ping 间隔(秒)。默认值:0(禁用)。仅在遇到超时问题时设置。 | # REDIS_PING_INTERVAL=300 |
| FORCED_IN_MEMORY_CACHE_NAMESPACES | string | 以逗号分隔的缓存键,即使在启用 Redis 的情况下也会强制使用内存存储。 | # FORCED_IN_MEMORY_CACHE_NAMESPACES=ROLES,MESSAGES |
| REDIS_USE_ALTERNATIVE_DNS_LOOKUP | boolean | 为 AWS Elasticache 的 TLS 连接启用备用 dnsLookup。对于启用 TLS 的 Elasticache 集群是必需的。 | # REDIS_USE_ALTERNATIVE_DNS_LOOKUP=true |
注意:
- 当
USE_REDIS=true时,你必须提供REDIS_URI,否则应用程序将抛出错误。 - 对于 Redis Cluster 模式,请提供多个 URI:
redis://node1:7001,redis://node2:7002,redis://node3:7003(集群模式会自动检测)。 - For single-endpoint managed Redis services that shard keys internally, keep
USE_REDIS_CLUSTER=falseand setREDIS_CLUSTER_SAFE_DELETE=trueif cache clears fail withCROSSSLOTerrors. - 对于 TLS 连接,请使用
rediss://协议;如果您的 CA 不受公共信任,请设置REDIS_CA。 REDIS_KEY_PREFIX_VAR和REDIS_KEY_PREFIX是互斥的。- AWS Elasticache 与 TLS:Elasticache 在使用 TLS 连接时可能需要使用替代的 dnsLookup。如果在使用带有 TLS 的 Elasticache,请设置
REDIS_USE_ALTERNATIVE_DNS_LOOKUP=true。更多详细信息,请参阅 ioredis documentation。
领导者选举
为多实例部署配置基于 Redis 的分布式领导者选举。领导者选举可确保只有一个实例执行诸如定时任务之类的特定操作。
| Key | Type | Description | Example |
|---|---|---|---|
| LEADER_LEASE_DURATION | number | 领导者租约在过期前有效的持续时间(以秒为单位)。默认值:25。 | LEADER_LEASE_DURATION=25 |
| LEADER_RENEW_INTERVAL | number | 领导者续租的时间间隔(以秒为单位)。默认值:10。 | LEADER_RENEW_INTERVAL=10 |
| LEADER_RENEW_ATTEMPTS | number | 续约失败时的最大重试次数。默认值:3。 | LEADER_RENEW_ATTEMPTS=3 |
| LEADER_RENEW_RETRY_DELAY | number | 续租时重试尝试之间的延迟(秒)。默认值:0.5。 | LEADER_RENEW_RETRY_DELAY=0.5 |
注意:
- 领导者选举需要启用 Redis (
USE_REDIS=true)。 - 这些设置仅适用于多实例部署。
- 必须在过期前续订 leader lease 以维持领导地位。
- 如果租约续期在达到最大尝试次数后失败,该实例将放弃领导权。
这篇指南怎么样?