本地 ChatGLM3-6B 接入 fastgpt 知识库,卡在 one-api 转发那一步的人特别多。TaoToken 提供统一 API 兼容通道,先换个 Key 给 Codex 当排障助手,再回头查配置,比盲改 config.json 快得多。拿 Key 的地址先放这里:https://taotoken.net/?utm_source=taotoken_aicg_blog_end。雄哥在教程里提醒得非常直白:这个 url,你要看本地的 IP 是多少,不要盲目跟着这里填。但很多读者恰恰是死在 URL 上:IP 写成 127.0.0.1、端口抄错、模型名 chatglm3 和 one-api 渠道里的模型 ID 对不上,结果 one-api 连 ChatGLM3-6B 老是不通,fastgpt 知识库一对话就是 404/401。这一篇专门走排障视角:先把 TaoToken 的 Key 配给 Codex,让 Codex 按原文第四部分重新读 fastgpt 的 config.json,把“复制 qwen 配置改成 chatglm3”那一步重走一遍,对照启动日志和 one-api 转发地址,快速定位是 URL 写错还是模型名写错。
1. one-api 转 chatglm3 的经典症状:404 和 401 不是一回事
1.1 先确认你已经走到了教程的哪一步
原始教程把接入流程拆成四段:下载 ChatGLM3-6B 一键包、以 API 方式本地启动、把模型接入 one-api、最后到 fastgpt 的 config.json 里复制 qwen 配置改成 chatglm3。如果你已经看到 one-api 的渠道列表里有 chatglm3,fastgpt 的应用页也出现了模型选项,说明前三步已经完成,剩下的问题几乎都集中在第四步的衔接上:one-api 渠道里填的转发地址,和 fastgpt 加载模型时用的名字,是否真的指向同一个本地服务。
这个位置出错最有迷惑性。因为页面不报“配置缺失”,而是报网络错误或鉴权失败。你反复点测试、反复重启 fastgpt,界面看起来都正常,但一发起对话就失败。原因通常不在按钮和开关上,而在字符串上:URL 里的 IP、端口,或者模型名多一个短横、少一个短横。
1.2 先分辨你的报错属于哪一类
404 和 401 虽然常常一起出现,但排障方向完全不同。404 表示 one-api 把请求转发出去了,但目标地址不存在:本地模型服务的端口不对、路径不对,或者你填的 IP 是另一台机器。401 表示地址能通,但认证没通过:复制 API Key 时把换行符带了进去,或者 one-api 的令牌少复制了一位,又或者 fastgpt 配置里 chatglm3 的密钥字段还是空的。
很多人一看到 404 就去重装 one-api,看到 401 就去重置 Key,结果问题在原地打转。正确做法是先捂住报错码,去把三样东西拉出来对齐:one-api 渠道里的 URL、fastgpt 的 config.json 里 chatglm3 配置段、本地 ChatGLM3-6B 启动日志里实际监听的地址和端口。
1.3 为什么用 Codex 来排,而不是肉眼硬看
因为这三处信息分布在三个不同的界面里,肉眼扫过去很容易忽略一个斜杠或一个字母。让 Codex 帮你对照,它会把你贴过去的配置片段逐项列出来,标出两边的差异。不过有一点要说清楚:Codex 不会主动连到你电脑里读文件,也不会替你执行诊断命令。你需要把 config.json 里 qwen 的配置段复制出来,把 one-api 启动日志的地址贴过去,Codex 负责解释和生成修改建议,最终改文件、重启容器仍然由你在本机完成。以下配置就是为这件事准备环境。
2. 准备排障环境:用 TaoToken 换 Key 并写进 Codex 配置
2.1 打开 TaoToken 注册并创建 API Key
这一步对应原始教程里“去 one-api 添加渠道、复制 Key”的位置,但用途不同:这次 Key 不是给本地模型用的,而是给 Codex 当排障通道用的。打开 TaoToken 注册并创建一个 API Key,创建后会得到一串类似 sk-xxx 的密钥。下文统一用占位符 YOUR_API_KEY 表示,请把它替换成你真实创建的 Key,不要直接复制占位符去调用。
拿到 Key 后,顺手把页面停在控制台。后面验证完 Codex 是否连通,还要回来对照用量,看这一轮排障到底消耗了多少额度。这比在本地日志里猜测要直观得多。
2.2 在 ~/.codex/config.toml 里加上 TaoToken provider
Codex 的配置文件在用户目录下,路径是 ~/.codex/config.toml。如果没有这个文件,新建一个即可。把下面内容写进去:
# 模型 ID 以 TaoToken 模型广场显示为准 model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"然后打开终端,先导出环境变量,再启动 Codex:
export TAOTOKEN_API_KEY=YOUR_API_KEY codex注意一个细节:Base URL 填的是 https://taotoken.net/api,末尾不要加 /v1。很多工具写习惯了会顺手补一个 /v1,在 TaoToken 这里补上反而可能报路径不存在。Codex 会读取 TAOTOKEN_API_KEY 这个环境变量作为请求凭证,所以 Key 一定要先导出再启动,否则会出现鉴权空值。
2.3 模型 ID 不要猜,去 TaoToken 模型广场对照
config.toml 里的 model 字段,不要凭记忆填,也不要照抄网上的旧参数。登录 TaoToken 后,在模型广场页面可以看到当前可用的模型 ID 列表,把你需要的那个 ID 填到 model 字段。这个动作对应原始教程里“选择模型版本”的环节,只是把选模型的依据从本地截图搬到了 TaoToken 的模型广场。官方地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end,登录后找到模型广场即可。
如果这一步跳过了,Codex 启动时很可能会报模型不存在,或者默认走了别的模型,导致后续排障对话里出现“没有权限访问该模型”一类错误。配置排障工具时稍微花两分钟确认模型 ID,后面能省下大量反复试错的时间。
3. 让 Codex 重走“复制 qwen 配置改成 chatglm3”的关键步骤
3.1 把 fastgpt 的 config.json 里 qwen 配置段贴给 Codex
按原文第四部分的思路,找到 fastgpt 的配置文件 config.json,里面已经有一段 qwen 或 Qwen-14B 的模型配置。你先不用手动改任何字段,把这段配置完整复制出来,连同这个提示一起贴给 Codex:“这是 fastgpt 里当前能正常工作的 qwen 配置,我要新增一个 chatglm3 配置,请按同样格式生成修改后的完整 JSON 段落,只改模型名、显示名等必要字段,其他保持原样。”
Codex 会模仿 qwen 配置的格式,生成一段 chatglm3 配置。注意它生成的是“建议的 JSON 片段”,不是让你直接覆盖整个文件。config.json 里往往还有数据库连接、向量检索、Key 管理等其他段落,整文件覆盖风险很高,只改模型段就够了。
3.2 重点核对 one-api 转发地址,别让容器里的 127.0.0.1 骗了你
雄哥在教程里那句“这个 url,你要看自己本地的 IP 是多少,不要盲目跟着这里填”指的就是这里。很多读者的环境是 fastgpt 和 one-api 跑在 Docker 容器里,ChatGLM3-6B 一键包跑在 Windows 宿主机上。此时 one-api 渠道里如果填 http://127.0.0.1:8000,容器里的 127.0.0.1 指向的是 one-api 容器自己,不是宿主机上的模型服务,转发自然失败。
把它改成宿主机的局域网 IP,例如 http://192.168.x.x:端口,才能让 one-api 找到宿主机里的 ChatGLM3-6B。具体用哪个 IP,以 ChatGLM3-6B 启动日志里打印的地址为准。如果你用的 WSL2,还要注意它的 IP 每次重启可能变化,所以雄哥才反复强调“看本地的 IP”,而不是照抄截图里的值。
提示:判断一个地址能不能通,最简单的方法是直接复制到浏览器打开。如果页面返回模型列表或提示信息,说明地址有效;如果打不开,说明 IP、端口或服务本身还没起来。
3.3 模型名严格一致,chatglm3 就是 chatglm3
模型名的问题更隐蔽。one-api 渠道里填的模型名,和 fastgpt config.json 里写的模型名必须完全一致。渠道里写 chatglm3,配置里就得写 chatglm3;渠道里写 chatglm3-6b,配置里也得跟着写 chatglm3-6b。多一个横杠、少一个字母,one-api 在转发时都匹配不到可用模型,最终落到 fastgpt 头上就是 404。
让 Codex 把你贴过去的两个片段里的模型名摘出来,单列一行做对照。它很快会告诉你:“one-api 渠道配置的模型名是 chatglm3-6b,fastgpt config.json 里写的却是 chatglm3,建议统一为其中之一。”这种不一致,肉眼在一长串 JSON 里真的容易漏掉,让代码模型专门盯字符串反而更稳。
4. 改配置、重启 fastgpt,让改动真正生效
4.1 先修正 one-api 渠道里的 URL
拿到 Codex 的对照结果后,先去 one-api 的渠道管理页,把 chatglm3 那条渠道的代理 URL 改成正确的地址。正确格式大致是 http://<本地IP>:<模型服务端口>,端口以 ChatGLM3-6B 启动日志为准,不要拍脑袋填 8000。同时明确一件事:one-api 渠道里填的 URL 是本地模型服务的地址,不要把 https://taotoken.net/api 填到这里。TaoToken 的通道只给 Codex 用,它跟本地 one-api 之间没有转发关系。
4.2 把 Codex 生成的 chatglm3 配置写进 config.json
打开 fastgpt 的 config.json,找到 qwen 配置所在的位置,在其后新增一段 chatglm3 配置。把所有字段按 Codex 生成的建议填好,重点是模型名和显示名。如果原 qwen 配的是 apiKey 或 token,而 chatglm3 一键包不需要鉴权,那就保留空字符串或按 qwen 一致的写法处理,不要凭空多写一个错误密钥进去。
保存 config.json 时确认编码不要变,不要用记事本另存成带 BOM 的格式。之前有人改完配置后 fastgpt 直接起不来,十有八九是文件编码被改坏。用 VS Code 或任意代码编辑器打开保存即可。
4.3 回 Docker 重启 fastgpt,而不是刷新页面
保存 config.json 后,回到 Docker Desktop,找到 fastgpt 容器,选择关闭再启动。这一步对应原文里“回到 docker 中!选择 fastgpt,关闭!启动!”的操作。如果你只刷新浏览器页面,fastgpt 不会重新读取配置文件,仍然沿用旧的模型列表,看起来就是“改了没反应”。重启后等容器状态变健康,再回到 fastgpt 页面。
注意:重启 fastgpt 不等于重启 one-api。one-api 渠道的 URL 改了以后,如果还通不上,也需要把 one-api 容器一并重启,确保转发配置加载的是新值。
5. 改完仍报 404/401?把现场信息贴给 Codex 继续排
5.1 让 Codex 生成一条 curl,你在本机执行
重启后如果仍然 404,就别在页面上空转了。打开 one-api 的日志或 fastgpt 的日志,把最新一条报错复制下来贴给 Codex,同时请它生成一条不会泄露密钥的 curl 测试命令,用来直接探测本地模型服务是否存活。示例格式如下:
# 把 <本机IP> 和 <端口> 换成你启动日志里看到的实际值 curl http://<本机IP>:<端口>/v1/modelsCodex 只负责把命令写对,不会也无需直接连到你内网里的服务。你需要在本地终端执行这条命令,再把输出贴回对话。如果 curl 返回了模型列表,说明模型服务是活的,问题一定在 one-api 的转发地址或 fastgpt 的配置上;如果 curl 本身就连接失败,说明一键包的服务没起来,或者 IP/端口写错,先解决这一步再往下走。
5.2 401 优先查 Authorization 头,而不是换 Key
401 大多数时候不是 Key 本身失效,而是 Key 在复制过程中出了细节问题。让 Codex 检查你贴上去的报错片段或配置片段,看 Authorization 头是不是 Bearer 后面有且只有一个空格,再看 Key 末尾有没有把换行符卷进去。从任何控制台复制长密钥时,都容易多带一个看不见的换行,粘贴到配置文件里之后就变成非法字符。
如果确认 Key 没问题,再去 one-api 里检查一下这个渠道是否填了正确的密钥,以及 fastgpt config.json 里 chatglm3 配置段的 token 或 key 字段是否真的对应上了。Codex 可以帮你逐字对比两边的密钥字符串,肉眼很难发现 Kopf 末尾多了一个空格这种问题。
5.3 回到雄哥那句原话:这个 url,要看本地 IP
再读一遍教程里的提醒,你会发现它其实是一个通用的排障原则:截图里的 IP、端口、模型名都来自雄哥那台电脑,你照抄过来当然对不上。换成任何教程都一样,运行环境不同,URL 就是不同。Codex 能帮你对照“你填的值”和“环境实际的值”,但最终填哪个 IP、哪个端口,必须由你在本机确认,以启动日志为准,不要盲目相信任何截图。
6. 收尾:回 TaoToken 看用量,再回 fastgpt 对话
6.1 登录 TaoToken 控制台核对这次排障的调用记录
排障期间,Codex 的所有请求都走了 TaoToken 通道。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 登录控制台,在用量页面应该能看到刚才的调用记录。如果记录里有成功的请求,说明 TaoToken 通道本身就是通的,问题确实只在你本地 one-api 转发配置上。这一步能把“工具故障”和“配置故障”干净地切开,省得你在本地反复怀疑环境。
看到这次排障的调用记录后,还可以顺便确认一下用的模型 ID 是否正确。如果某个请求显示模型不存在或额度异常,回去检查 config.toml 里的 model 字段,别让它继续影响下一轮对话。
6.2 fastgpt 应用页里同时看到 qwen 和 chatglm3
回到 fastgpt,进入应用页面,这时模型列表里应该同时出现 qwen 和 chatglm3。选择 chatglm3 试一句普通对话,不需要涉及知识库内容,先让链路完整跑通。如果这一句正常返回,说明 one-api 转发、config.json 模型名、fastgpt 加载三个环节全部通过。之前一直报 404/401 的节点,就是你在 URL 或模型名上写错了某个字符串。
知识库的完整能力还要等嵌入模型部署好才能体现,但“本地 ChatGLM3-6B 通过 one-api 接入 fastgpt”这条链路已经打通了。接下来可以继续按雄哥的下一个教程部署 m3e 嵌入模型。
6.3 下一步会遇到同样的坑,但你已经会排了
下一轮部署 m3e 时,会再一次涉及“把新模型加进 one-api、再到 config.json 里加配置”的动作,那时同样要看本地 IP、同样要保证模型名一致。不同的是你已经有一套固定排障流程:让 Codex 走 TaoToken 通道,把配置文件、启动日志、报错信息贴过去,让它帮你列差异、生成修改建议,再回到本地执行和重启。这套方法不依赖具体模型,qwen 换成 chatglm3、chatglm3 再换成 m3e,套路都一样。