AI 导航 · dsh-ai-nav
一个类早期网址之家的 AI 站点导航页:侧边栏多一个图标,点开是一整页瓷砖墙——搜索框在上, 八类入口在下。目的很朴素:别再把同一批 AI 站点存在浏览器书签栏里翻。
这是「入口索引」,不是「服务承诺」。 目录里的 95 个链接都是公开发布的官方入口, 但能不能打开取决于你本机的网络——Google、Perplexity、HuggingChat 等境外站点在 中国大陆通常不可直连,这属于网络可达性问题,不是链接失效。图标同理:取不到就画字母方块。
同时,这份目录也作为工具交给模型:问"有没有能做知识库的"时,模型查到的是真实、可点击的网址, 而不是凭记忆编出来的链接。
页面提供什么
| 区域 | 作用 |
|---|---|
| 搜索框 | 边打字边给出本地候选(名称 / 别名 / 拼音缩写 / 域名都能命中),回车走搜索引擎;候选项右侧有"站内搜",用该站点自己的搜索参数查 |
| 不知道用哪个 | 用一句话说需求("给团队搭个内部文档问答的知识库"),按场景推荐一套互补的组合,每条都写清为什么 |
| 置顶 / 最近访问 | 鼠标移到瓷砖上出现星标,点一下置顶或取消;最近访问自动记最近 8 个,重复点同一块瓷砖只留一条 |
| 分类瓷砖墙 | 对话助手、AI 搜索与深研、知识库与笔记、编程与 Agent、图像与音视频、办公与文档、模型与社区、学习与资料,共 95 个条目 |
| 添加站点 / 导入书签 | 手工加一条;或选浏览器导出的书签 HTML(也支持拖进来),已知站点自动归类 |
站点图标走宿主的同源代理(/plugins/ai-nav/favicon),页面本身不直连第三方;
拿不到图标时画一个按域名取色的字母方块——比 16 像素的旧图标更清楚。
图标解析分三步,任一步成功即停:先试站点自己的常规地址(/favicon.ico、/apple-touch-icon.png、
/favicon.png),再试根域名(chat.deepseek.com → deepseek.com),最后读页面 <head> 里声明的
<link rel="icon">——很多应用外壳在任何路径都返回自己的 HTML,但会在页面里指向 CDN 上的真图标。
回包按首字节判定是不是图片:现代站点常用 application/octet-stream 返回图标,而缺图标时又常
返回 200 text/html,只看响应头两头都会错。结果按域名缓存 24 小时,无图标的域名 20 分钟内不重试。
给模型的工具
| 工具 | 用途 |
|---|---|
ai_nav_search |
按关键词 / 别名 / 域名查目录,返回真实 URL、类目、标签、是否可自部署 |
ai_nav_recommend |
按一句需求推荐组合,可限定国内直连、只要可自部署、优先免费 |
ai_nav_browse |
不带关键词地浏览类目与条目 |
ai_nav_sites |
管理自定义站点与置顶(list / add / remove / pin) |
ai_nav_import |
导入书签文件(给内容或本机路径) |
ai_nav_open |
把一句话解析成该打开的地址:像网址就打开,命中目录就开站点,否则去搜 |
目录质量上的两条规矩
- 每个
url都是验证过能打开的官方入口。 导航页的链接 404 比少收录更糟。 - 只有站点真的支持查询参数时才给
q(站内搜模板)。 猜一个模板会得到一个坏掉的结果页—— 这正是老式导航站最烦人的毛病;没有模板的站点只提供"打开",搜索仍可用选中的引擎。
配置
cordis.patch.yml:
- insert:
- id: ai-nav
name: 'dsh-ai-nav'
config:
engine: metaso # 默认搜索引擎 id(metaso / baidu / bing / google / perplexity …)
showSelfHost: true # 是否显示"可自部署"的条目
favicons: true # 是否启用图标代理(关掉就全用字母方块)
页面里选的引擎会存进用户数据,优先于这里的默认值。
数据位置
自定义站点、置顶、最近访问、引擎选择存在
$DSH_PROFILE_DIR/ai-nav/data.json(回退到 $DSH_HOME/ai-nav,再回退到 ~/.dsh/ai-nav)。
写入走"临时文件 + rename",坏文件按"没有数据"处理,不会让页面打不开。
所有存储的链接在写入和读出时都过一遍 safeUrl():只接受 http(s)://,
javascript:、data:、file: 一律拒绝。
自检
node scripts/selfcheck.mjs
138 项纯函数检查(目录完整性、别名词汇、排序、URL 猜测、书签解析、推荐、存储 URL 闸门、 图标候选顺序与首字节嗅探),不联网、不开浏览器。
文件
| 文件 | 内容 |
|---|---|
index.js |
宿主半边:目录组装、同源路由、六个工具、图标代理的网络部分 |
icon.js |
图标策略(纯函数):候选顺序、首字节嗅探、<link rel="icon"> 解析、缓存与并发闸门 |
catalog.js |
八类目、十二个搜索引擎、全部内置条目(纯数据) |
search.js |
归一化、分词、排序、URL 猜测、书签解析、归类 |
recommend.js |
场景规则与推荐(长词优先的特异性权重) |
store.js |
可写状态:自定义站点、置顶、最近、设置 |
client.js |
浏览器半边:sidebar.panellist 图标 + main 面板 |
scripts/selfcheck.mjs |
离线自检 |
已知边界
- 目录是人工维护的真实入口,不是抓取来的;站点改版后个别链接可能需要更新,改
catalog.js即可。 - 站内搜只覆盖少数确实支持查询参数的站点;其余站点回车走搜索引擎。
- 推荐是规则引擎,不是模型调用:可解释、可离线测试,但不会理解超出关键词表的表达。
- 推荐里「同一类最多两条」是降权而非过滤:第三名之后的同类条目按与首名的差距打折, 所以「写文档 / 做 PPT / 整理会议纪要」能给出 WPS AI、WorkBuddy、飞书、腾讯文档、 通义听悟,而不是让 17 分的对话助手挤掉 83 分的办公工具。
- 图标代理每个域名最多 4 秒、96 KiB,最多跟一次跳转,且拒绝内网地址;并发取 5 个域名、同域名 合并成一次请求。取不到就回退到字母方块——能取到的比例取决于本机网络,被墙的站点一律是方块。
No comments yet. Be the first to write one.