地铁出行小助手

六座城市 · 一个网页 · 只查资料,不乱说

— — 数据 2025-06
偏好 同一对起终点,换权重会得到不同的走法

选好城市,填两个站名,就能看到多条走法

没有思路的话,先点下面任意一条试试。

说明我是地铁出行小助手
我只回答资料里有的内容:六个城市的地铁线路与车站、票价与换乘常识,以及 Token / 上下文 / Prompt / RAG 这些概念。 资料里没有的(比如今天的末班车时刻、临时封站),我会直接说不知道——这不是偷懒,是这条小助手的底线。

知识库

这就是“喂给助手的那份资料”。点开任意一张卡片可以看全文。

拆字:文本 → token

模型看的不是字,是 token。这里用一个小型演示分词器,把切分过程摊开给你看。

这不是真的 Tokenizer。真正的分词器背后是几十万条的词表,靠 BPE 一类算法把高频片段合并成 token; 不同模型的词表不同,同一句话切出来的块数也不同。所以这里的数字只能用来“看见过程”,不能用来算钱。

三个常被问住的问题

“我爱学习”和“I love learning”,哪个 token 多?
不一定,要看词表。中文常见字大多一个字就是一个 token,英文单词常被拆成词根 + 词缀(learning → learn + ing), 所以同样意思的一句话,两边块数常常差不多,但计费不能只看字数。
一个 emoji 算几个 token?
看模型。有的模型把它当 1 个 token,有的按 UTF-8 字节拆成好几个。演示器里只把它当 1 块,这是简化。
生僻字“龘”会被拆成几个?
如果它不在词表里,就会退回到更小的单位(字符甚至字节),可能变成 2–3 个 token。生僻字更贵,这不是错觉。

概念地图

十一个概念,按“输入 → 记忆 → 控制 → 知识 → 模型”串成一条线。点卡片展开。

关于这个小助手

一句话介绍、喂了什么资料、规矩是怎么定的。

一句话介绍

我喂给它的资料

System Prompt(人设与规矩)

这段文字决定了它“是谁、能说什么、不能说什么”。纯静态版没有调用大模型, 但它以同样的方式起作用:把规矩写死,程序照着执行。


      

User Prompt 模板(提问时喂给模型的格式)

路线区的每一次提问,都可以拼成这样一个“资料 + 问题 + 要求”的包。


      

它的三条底线

  1. 只在资料范围内回答。检索分数低于阈值就直接说“资料里没有”,不让程序编。
  2. 区分估算与官方。时间、票价都标“约”,并说明是按什么规则估的。
  3. 不碰实时信息。首末班车、封站、拥挤度一律不给,只给核实渠道。

怎么运行

  • 双击 public/index.html 就能用:不联网、不装环境、不监听端口。
  • 部署:npm install → npm start,服务只负责把这份静态文件发出去,监听 PORT(默认 3000)与 0.0.0.0。
  • 不需要数据库、Redis、Docker、Nginx,也不需要任何 API Key。

数据边界

隐私:这个页面不发任何网络请求,最近的查询只存在你自己浏览器的 localStorage 里,最多 8 条,可以随时清空。