LibreChat 深度评测:4.7 万 Star 的自托管 AI 对话前台,技能库测试比实现多 25%,中文文件名却过不了校验

LibreChat 深度评测:4.7 万 Star 的自托管 AI 对话前台,技能库测试比实现多 25%,中文文件名却过不了校验

同事群里每隔一阵就有人问:有没有一个能自己改的 ChatGPT?市面上的答案里,LibreChat 是被提名最多的一类——一个可以装在自己服务器上的对话客户端,接哪家的模型都行,不用把记录交给别人。

它现在的体量是 46,862 星、9,656 个分叉、MIT 许可,11 月 8 日当天还在提交代码。我把整个仓库拉下来数了一遍:7,250 个文件、226 万行代码。数字之外,真正让我停下来的是它的技能库——一个给 AI 装「操作手册」的模块。这个模块的测试代码比实现代码还多 25%,可它的文件名校验规则,会把中文名的技能文件一律拒之门外。

它到底是什么

一句话:一个自托管的 AI 对话前台。你可以用它同时接 OpenAI、Anthropic、DeepSeek 这类模型服务,挂上自己的工具和知识库,再给不同同事分配不同的助手。

它的代码分三块,体量差别很大:

目录 文件数 行数 是什么
前端界面 2,363 535,680 聊天界面,React 写的
共享包 3,355 1,240,949 模型接入层、数据结构、Agent 逻辑
旧服务端 673 272,786 Express 路由与数据库读写

测试文件 2,883 个、125 万行,占全仓一半以上。对一个要装进别人服务器、还要接各家模型接口的项目来说,这个比例不算夸张——模型接口一变就全线报错,没有测试根本不敢发版。

实测:技能库是全场最较真的模块

技能(skill)是这类客户端的新玩法:一个文件夹里放一份说明文件和若干参考资料,AI 需要时按需读取。LibreChat 在这块投入的力气,从文件数就能看出来。

第一条证据,测试比实现多。 技能子系统的实现有 28 个文件、9,133 行;配套测试 23 个文件、11,399 行,多出 25%。其中最狠的是一个同步模块的测试文件,单个就 4,281 行;路由层还有一个 1,596 行、58 个用例的测试。

第二条证据,路径校验真的挡得住。 我把它校验文件名的那段函数单独拎出来,喂了 13 个输入,结果如下:

输入的文件名 判为合法?
SKILL.md 是
references/guide.md 是
../etc/passwd 否
/etc/passwd 否
a/../../b 否
a//b、./x 否
references/%2e%2e/x(编码过的穿越) 否

穿越、绝对路径、编码绕过,一个都没漏。但同一张表里还有两行:中文.md 判否,a b.md 也判否。

这不是漏洞,是设计:规则只放行英文字母、数字和少数几个符号。对英文项目没影响,对中文用户却意味着——你自己写的中文技能说明,只要文件名带一个汉字,就没法通过接口写进去。技能正文本身可以是中文,文件名不行。

第三条证据,白名单写了两遍。 GitHub 同步模块里另有一份几乎一样的校验逻辑,专门过滤从仓库拉下来的技能文件;被挡掉的文件会进「跳过清单」,最多记 20 条。也就是说,你从 GitHub 同步一个带中文文件名的技能,它会安静地少几个文件,只在状态里留一条记录。

另一面:豁免表暴露了规模代价

这个仓库还有一份 ESLint 豁免表(也就是允许某些文件暂时不遵守设计规则的清单):258 个文件、合计 1,176 处豁免,其中光「禁止改样式」这一条就占了 962 处。它的注释写得很坦诚——测试文件里的示意标记不算设计界面,所以整片关掉。

配套的部署门槛同样不小:示例配置文件 1,850 行,环境变量 203 个,一键起多个服务的配置文件里列了 5 个服务(应用、管理后台、数据库、搜索、向量库),CI 流水线 33 条。自托管不是一条命令的事,是半天到一天的事。

放进坐标系里看

和站内评过的几篇比:nature-skills 走的是「把科研流程装进技能库」,SkillSpector 走的是「给别人的技能做安全扫描」,deepagents 走的是「教 Agent 怎么拆任务」。LibreChat 的定位不同——它是那个把技能、模型、工具放在一起给你自己托管的外壳。

适合谁:需要把对话记录留在自己服务器上的团队;要接多家模型做对比的人;愿意为一个 226 万行的工程配环境的人。

不适合谁:只想开箱即用、不打算碰配置的人;只用一家模型服务的个人;以及技能文件名里必须带中文的团队——这一条目前得自己改代码。

我的判断

值得放进观察清单,但别把它当成「装上就能用的 ChatGPT 替代品」。它的工程质量高于同类平均水平(测试比实现多、路径校验经得起试探),真正的门槛在部署和本地化。中文用户的第一个坑,很可能是想上传一份叫「报告模板」的技能文件,然后被一条只认英文字母的规则拦下来。

关注 AI商业快讯,每天一篇 AI 热点深度解读。想先看技能库怎么做审计的,可以翻我们评过的 SkillSpector 和 nature-skills。