🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
把 GPT-5 和 DeepSeek-R1 放进同一个 LibreChat 界面,用一把 Key 在两个会话之间来回切换,是我最近觉得最省事的自托管玩法。TaoToken(TaoToken)把这件事简化成一步:不用分别申请多个厂商的 Key,只需要把 LibreChat 的 OpenAI 兼容端点指到它的统一网关。今天这篇记录 10 分钟从空目录到双会话跑通的完整过程,包含 docker compose 启动命令、环境变量、模型路由清单和两个会话的流式输出画面。
1. 先想清楚:LibreChat 里为什么能同时跑 GPT-5 和 DeepSeek-R1
LibreChat 是一个开源对话前端,Docker 部署后自带 MongoDB,允许用户在一个网页里管理多个会话、多个模型后端。和直接用官方客户端不同,LibreChat 的每个会话可以独立选择模型,模型列表由配置文件里声明的端点提供。端点可以是任意 OpenAI 兼容服务,只要它返回正确的流式格式,LibreChat 就能展示输出。
TaoToken 在其中的角色就是默认供应商:它提供一个统一 Base URL,LibreChat 把这个地址当作 OpenAI 端点的入口。入口后面有哪些模型,以模型广场展示的模型 ID 为准。这也带来一个好处:配置里只需要维护一个端点和一把 Key,就能在两个会话中分别选择不同模型,而不需要为每个模型部署单独的 API 服务。
这里有一个容易混淆的地方。LibreChat 的模型选择器里可以输入的模型 ID 并不是自动从「全世界所有模型」里拉取。它只认两种来源:配置文件里明确列出的模型,或者当前端点通过 /models 接口返回的模型。后者取决于端点是否实现了该接口。为了减少不确定性,本次直接使用配置文件里的白名单方式,把 GPT-5 系列和 DeepSeek-R1 系列都显式写进 librechat.yaml,这样模型选择器里一定会出现这两个入口。
这次任务的目标很直白:开两个会话,A 会话使用 GPT-5 系列模型,B 会话使用 DeepSeek-R1 系列模型,两边都能完成第一次流式回复;随后在两个会话之间来回切换,确认请求不断流、不 401。整个过程不比较模型回答质量,只验证一件事:把 Base URL 换成 https://taotoken.net/api 之后,模型切换和官方端点一样稳定。
2. 十秒准备:Docker 环境、LibreChat 仓库、TaoToken Key
准备动作只有三步,不会消耗太多时间。
第一步确认 Docker Compose 可用。终端执行 docker compose version,能输出版本号就行。LibreChat 官方仓库自带 docker-compose.yml,所以不需要手动搭建 MongoDB。
第二步拿代码。
git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat
第三步创建 TaoToken Key。打开 TaoToken 注册并进入控制台,新建 API Key 后立刻复制保存。这里多说一句:Key 的明文只在创建时展示一次,LibreChat 不会替你保存它。如果你在排障时怀疑 Key 写错,直接新建一把会比猜字符更省事。
创建好之后,整个过程中唯一需要你保管的敏感信息就是 YOUR_API_KEY。后续配置里出现的所有 Key 相关字段都用它占位。如果之前已经创建过 Key,顺手在控制台确认一下配额,避免跑了两条消息之后突然触发额度限制。
3. 把 TaoToken 设为 LibreChat 的默认供应商:docker compose 启动命令与环境变量
克隆好仓库后,先复制配置模板。
cp .env.example .env
cp librechat.example.yaml librechat.yaml
然后编辑 librechat.yaml。打开文件后找到 endpoints 这一节,在下方加入一个自定义端点。这个自定义端点就是 TaoToken,也就是我们要的默认供应商。
endpoints:
custom:
- name: TaoToken
apiKey: YOUR_API_KEY
baseURL: https://taotoken.net/api
models:
default:
- YOUR_GPT5_MODEL_ID
- YOUR_DEEPSEEK_R1_MODEL_ID
三个字段的含义很直接:name 是 LibreChat 界面里显示的供应商名称;apiKey 是你在 TaoToken 创建的 Key;baseURL 是 OpenAI 兼容通道的入口地址,不需要带 /v1。如果你之前配过 OpenAI 官方端点,这里的区别就是把 Base URL 换成 TaoToken,并把 Key 换成 TaoToken 的 Key。
关于 models 段,注意我写的是占位符。YOUR_GPT5_MODEL_ID 和 YOUR_DEEPSEEK_R1_MODEL_ID 需要替换成模型广场上看到的具体 ID。这里千万不要凭印象填 gpt-5 或 deepseek-r1 就完事。模型 ID 经常带日期后缀、版本号或大小写差异,只要有一个字符对不上,LibreChat 发出去的请求就会被网关拒绝,界面上表现为 400 或 404。
如果你不想把 Key 明文写在 YAML 里,可以把 apiKey 改成 ${TAOTOKEN_API_KEY},然后在 .env 中追加一行:
echo "TAOTOKEN_API_KEY=YOUR_API_KEY" >> .env
同时在 docker-compose.yml 的 api 服务里,把 TAOTOKEN_API_KEY 传进容器环境变量。加完后可以用 docker compose config 检查该变量是否被展开。如果只是想快速跑通,直接用明文 Key 也能启动,但注意别把 librechat.yaml 提交到公开仓库。环境变量方式的好处是换 Key 不用改 YAML,直接改 .env 再重启 api 服务即可。如果你之前部署过 LibreChat,不想动原有配置,也可以在 endpoints.custom 下面新增一条,多个端点会同时出现在模型选择器里。
配置完成后启动:
docker compose up -d
docker compose logs -f api
第一次启动会拉取镜像并等待 MongoDB 就绪,可能要一两次容器重启。看到 API 服务正常监听后,浏览器打开 http://localhost:3080。LibreChat 首次使用需要注册一个本地账号,这部分由自带登录系统处理,和模型 Key 无关。此时模型选择器里应该已经出现 TaoToken 这个供应商,里面有两个未替换的模型 ID。如果没出现,往下看到第 5 章的排障段。
4. 模型路由清单:LibreChat 中 GPT-5 与 DeepSeek-R1 的 ID 规则
「模型路由清单」听起来比实际复杂,落地下来就是一张表。在这套配置里,LibreChat 把模型 ID 原样发送给 TaoToken,TaoToken 根据 ID 把请求转发到对应的模型服务。所以路线是:LibreChat 拿到 ID → 请求送到 https://taotoken.net/api → 网关识别 ID 并路由。
模型 ID 的获取入口只有模型广场。打开 模型广场 后,找到 GPT-5 相关区块和 DeepSeek-R1 相关区块,各复制一个当前可用的完整 ID。复制下来的内容直接粘贴到 librechat.yaml,不要手动打字,尤其是中间可能出现的点号、连字符、日期段。
| 会话 | 目标系列 | 模型 ID 写法 | 放行方式 |
|---|---|---|---|
| A 会话 | GPT-5 系列 | YOUR_GPT5_MODEL_ID | 从模型广场 GPT-5 区块复制 |
| B 会话 | DeepSeek-R1 系列 | YOUR_DEEPSEEK_R1_MODEL_ID | 从模型广场 DeepSeek-R1 区块复制 |
这张表里没有给出具体 ID,原因是模型广场的 ID 会随版本更新而调整。如果我在这里写死一个字符串,你照着填进去,过段时间可能已经失效,反而会得到「model not found」。字段名 YOUR_GPT5_MODEL_ID 的作用就是提醒你替换,它不是真实模型 ID。
有一点值得说明:LibreChat 的 models.default 列表不仅是白名单,它也决定模型选择器里的默认排序。列表里第一个模型会成为新会话的默认选择。也就是说,如果你把 YOUR_GPT5_MODEL_ID 放在第一个,新会话打开后默认选中的就是 TaoToken 下的 GPT-5 模型,不需要每次都手动选。
如果你希望两个模型在界面上显示得更友好,可以在模型 ID 后面加显示标签。LibreChat 自定义端点支持类似 model_id: 显示名 的写法。本文没有启用它,因为「以模型广场为准」的 ID 规则更通用。等你的模型 ID 稳定后,再给它们加中文标签也不迟。
5. 双会话验证:GPT-5 与 DeepSeek-R1 的流式输出与切换不断流
启动完成、模型 ID 填好后,打开 http://localhost:3080 进入会话界面。先新建两个会话,不要在一个会话里来回换模型。原因很简单:LibreChat 切换模型后,之前对话的上下文容易断裂;要验证「切换不断流」,正确做法是保持两个独立会话,分别锁定两个模型,然后在两个会话之间来回点。
会话 A 在模型选择器里选 TaoToken 的 GPT-5 模型;会话 B 选 TaoToken 的 DeepSeek-R1 模型。两个会话各发一条消息,观察是否以流式方式逐字返回。
下面是流式输出画面对应的文字快照,实际页面上输出会一个字一个字地出现,和 ChatGPT 官方界面类似。这是一次运行记录,不代表公榜,也不代表模型在所有问题上都输出同样内容。
会话 A:
我:用一句话说明 LibreChat 是什么
LibreChat:LibreChat 是一个开源的 AI 对话前端,支持 Docker 部署、多模型接入和本地化模型路由配置。
会话 B:
我:用一句话说明 DeepSeek-R1 的定位
DeepSeek-R1:DeepSeek-R1 是一个强调推理能力的开源语言模型系列,常被用于数学、逻辑和代码类任务。
这里不比较两个模型的回答质量,只是为了确认两件事:会话确实把请求送到了 TaoToken,TaoToken 也确实按模型 ID 路由到了正确的模型。流式输出本身由 LibreChat 渲染,输出中断通常表现为光标停住或页面报错。
然后做切换验证。我的操作顺序是先让会话 A 输出完成,再切到会话 B 发一条消息,再切回会话 A 追问一句,再切到 B 追问一句。实测下来,只要两个会话各自保持上下文,中间的切换没有出现 401 或 404,两个会话都能继续回答。把检查点整理成一张表:
| 操作 | 期望结果 | 如果失败,先查哪里 |
|---|---|---|
| 会话 A 发出第一条消息 | 逐字返回,无报错 | 控制台确认 Key 有配额;模型 ID 是否复制完整 |
| 切到会话 B 发出第一条消息 | 同样流式返回 | 该模型 ID 是否在模型广场可见 |
| 再切回会话 A 追问 | 上下文保持,连接不断 | docker compose logs api 有无 401 |
| 连续快速切换 3 次 | 两个会话都能继续对话 | 检查 baseURL 末尾是否误加了 /v1 |
这里最容易踩的坑有三个。第一个,模型 ID 末尾多了空字符。从网页复制时顺手带上了换行或空格,LibreChat 会原样发出去,于是报 model not found。删掉 YAML 中该行前后的空白后重启即可。第二个,Base URL 写成 https://taotoken.net/api/v1。LibreChat 对 OpenAI 兼容端点会自动拼接路径,多出来的 /v1 会导致 404。第三个,改了 librechat.yaml 但没有重启 api 服务。配置是启动时读取的,改完要执行 docker compose restart api,只刷新页面不会生效。
如果模型选择器里始终没有出现 TaoToken 端点,先看 librechat.yaml 的缩进。endpoints、custom、name 这三层缩进错了任何一处,LibreChat 都会静默跳过该端点而不是报错,所以视觉上非常隐蔽。正确结构在本文第 3 章已经给出,照着缩进粘贴即可。
跑完整套验证之后,你手上已经有一把能跨模型切换的 Key 配置。最后一步是回到控制台,把这个结果留在账上。打开 模型对话 可以确认刚才两笔调用是否已经入账;想在干净环境再复现一遍对照表,就在 控制台 创建一把新 Key。如果之后要把这套配置给团队共用,可以参考 Coding Plan。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度




被折叠的 条评论
为什么被折叠?



