登录了 Nous 账号,免费的快速搜索为什么还是打不开?

你照文档做了最省事的那一步:登录 Nous 账号,不填任何第三方 API Key,期望搜索开箱可用。结果一搜就报错,大意是「这个身份没有权限」。你没配错,也不是账号有问题——请求其实根本没发出去,它在本地就被三道门禁里的某一档拦了下来,而其中只有一档真正和「你有没有额度」有关。
这篇讲清楚那条免费快搜通道到底怎么判资格、为什么它会误伤注册用户、以及修好之后你该怎么确认自己拿到的是哪一档。
免费路由和计费路由,尺子不是同一把
托管网关上有两类东西:
- 按用量计费的厂商集成(提取、浏览器、图片等),走这条路要先判定「你有权限」——付费 Portal 访问,或者一个还活着的免费工具池;
search_type: "fast"这条快速搜索,网关在服务它的时候不做计费检查,所以它的资格判定天然是「你是谁」,而不是「你付了多少」。
以前这两类共用同一个解析函数,于是第二类的判定被第一类的尺子量了一遍。这就是整件事的根源。
三道门禁,一道一道看
修复说明里把它们按执行顺序列出来了,值得完整读一遍,因为任何一道没过,你看到的都是同一句「没权限」:
resolve_managed_tool_gateway()对每个厂商都套了一层managed_nous_tools_enabled()(付费访问,或者一个有活的工具池的账号),Perplexity 也在「每个厂商」里面。_managed_web_search()只在自动探测落在 Firecrawl、并且那道带门禁的「网关是否就绪」探测通过时,才会报告「本次搜索走托管路由」。所以一个没有付费权限的身份,根本不会被解析成 Perplexity 搜索。- Perplexity provider 自己又调了一次同一个带门禁的解析函数。这意味着即使你手写
web.backend: nous,也会撞上同一句「没权限」。
三道叠在一起,效果就是:注册账号 → 免费快搜路线存在 → 但你永远走不到它。
修好之后:判定身份,不判定额度
PR #130660 的做法不是放宽那道付费门禁,而是给免费路由单独开一把尺子:
- 新增
resolve_free_search_gateway():只判定身份,不碰付费权限; - 新的资格判定
fast_search_entitled():任意 tier 的已注册 Portal 身份即可,不要求额度,也不要求工具池; - 计费厂商继续走原来的
resolve_managed_tool_gateway(),一点没松。
那游客呢?明确排除。 免费的 fast 路由是按身份发放的,而匿名游客身后没有 Portal 账号——它拿到的东西和以前逐字节相同,继续走 keyless ring。这不是对新用户关门,而是「能证明自己是谁的走托管,证明不了的走公开轮换」。
还有两个细节值得单独拎出来:
- 出错时关闭,而不是猜。 账号查询失败时判定为「不可用」。这里有个反直觉的地方:一次失败的查询仍然会被标记成已登录,只有
error字段能把它和真实账号区分开——所以这个字段是承重的,不是双保险。 - tier 判定不再区分大小写和空白。 这个 claim 是从 JWT 或账号信息里原样带过来的,以前是逐字符比较,一个多余空格就能让判定走偏。
打不开的时候,提示会告诉你是哪一种
修复顺带把「为什么没成功」写成了三种具体说法(英文界面下的原文):
| 你的情况 | 看到的提示大意 |
|---|---|
| 你是匿名游客 | 需要一个 Nous 账号,用 /login 登录 |
| 没有可用身份(没登录 / 查询出错) | 找不到可用的 Nous 身份,用 /login 登录 |
| 网关连不上 | Nous 工具网关不可达 |
这三句是分开的,因为它们对应三种完全不同的处理动作:前两种去登录,第三种是网络或服务侧的问题,登录多少次都没用。
自己怎么确认
- 先确认搜索后端没有被你显式指定成别家。
web.backend和web.search_backend一旦写了具体厂商,就是「我说了算」——不会被自动改道到托管路由,这是设计上的取舍。相关键位见 hermes config 命令参考。 - 分清搜索和提取。 在
web.backend: nous下,搜索由 Perplexity 的托管网关服务,提取仍然走 Firecrawl;那条免付费通道是搜索专用的,其他厂商路由该要权限还是要权限。 - 不想登录也有路。 游客身份仍然能用公开的免密钥轮换,见 五条免费搜索渠道与完全不要 API Key 的免费层指南;想自己带 Perplexity Key 的做法见 Perplexity 搜索后端。
- 看清楚你装的是哪个版本。 这个修复在 2026-10-01 合并进
main,而最新标签 v0.21.5 的日期是 9-24,所以标签里还没有它;跟着main走的 git 安装已经在修复里了。
小结
这次的 bug 不属于「功能没做」,而属于资格判定用错了维度:一条不查账的免费路由,被一套查账的逻辑挡在门外,而三层门禁报出来的还是同一句话,于是你只能看到「没权限」,看不到「你其实从来不需要权限」。
对使用者的结论很朴素:登录之后搜不动,先别去查自己的额度——先看你有没有把 web.backend 明确写成别家,再看提示说的到底是哪一种身份问题。身份对了,免费快搜就是免费快搜。