先说结论:我们把高考志愿 AI 工具「拘灵遣将」暂停了。
这不是一个轻松的决定。过去两天,我们在这个项目上跑了大量 token,也投入了很多精力。它一开始是公益性质,想免费开放一段时间,帮考生和家长少一点信息差,少一点来回翻表的痛苦。
但最后我们还是停了。
很遗憾,也很抱歉。
不是因为这个工具完全不能跑。恰恰相反,它已经跑起来了:页面有了,后端有了,本地库有了,流式回答有了,留言和反馈也接上了。我们甚至做了很多后来回看都不算敷衍的加固。
真正让我们停下来的,是另一个问题:
高考志愿这件事太重了。
如果一个 AI 工具推荐错了一部电影,最多浪费两个小时。推荐错一个软件,最多卸载。可志愿填报不是这样。一个专业组、一个位次、一个备注条件、一个体检限制、一个调剂规则出错,都可能让一个学生滑档、退档,或者走向一个根本不适合自己的选择。
这时候,不能只问“技术上能不能做”。
要问:我们有没有资格让一个家庭把它当成重要参考?
一开始,我们是真想把它做好
这个项目最早的想法很简单:博客里开一个高考志愿栏目,免费给大家试用。
我们不是从一个空白聊天框开始的。底座来自一个已有的高考志愿项目包,里面有志愿咨询的提示词、方法论知识库、本地录取数据和候选学校筛选逻辑。我们做的第一件事,是把它迁移到博客的服务端,让它不只是本地玩具,而是能在网页上被普通用户打开。
第一版的思路是:用户输入省份、选科、分数、位次、专业偏好、城市偏好、家庭资源和目标,后端先查本地录取库,再让 AI 基于候选学校和方法论解释冲、稳、保。
严格说,它不是常见的向量库 RAG。它更像结构化检索增强生成:先查结构化数据库,再把学校、专业、年份、分数、位次这些硬信息交给模型解释。
对高考志愿这种场景,这个方向本身是对的。
因为分数、位次、省份、年份这些东西不能靠语义相似度猜。它们必须先落在结构化数据里。
所以我们最开始的判断是:本地库负责把底牌亮出来,AI 负责把取舍讲成人话。
后来,我们一路在补洞
项目上线之后,问题不是一次冒出来的,是一层一层冒出来的。
先是数据覆盖。
最开始真实能用的省份很少,远没有看起来那么完整。后来我们不断补库、审计、同步页面口径,数据规模从二十多万行一路扩到五十多万行。最后一轮完成态审计里,主库做到 507,122 行,覆盖 2024-2025 年,23 个有数据省市,badRows 0,sourceRefs 154。
这不是简单把表格丢进去。
我们做过很多具体工作:找各省教育考试院来源,处理 XLS、XLSX、PDF、HTML,做 OCR,拆普通本科、普通专科、高职专科,标记 complete、partial、missing,区分官方原始表和旧包数据。北京旧包里混了提前批、公安司法男女分项、艺术和其他特殊规则,我们替换成北京教育考试院官方 HTML 的普通批数据。河南、山西、天津、云南这类缺口,也写清楚为什么不能硬补。
这期间还修了很多产品问题。
用户说不能接着前面聊,我们就修上下文追问。用户补一句“接受省外大学”,系统不能重头分析,我们就让它沿用上一轮条件。
用户反馈“单条问题太长”,后来发现不是用户的问题,是上一轮 AI 长回答被带回后端,触发了历史消息长度限制。我们把历史消息压缩,只限制最新输入。
模型上游 503,我们加错误日志、熔断和本地库兜底。后面又切到更低成本、更稳的 Mini 模型,避免公开流量一上来就打爆。
手机端体验不好,我们做移动端专项:压缩导航、聊天头、工具按钮和输入区,让它更像一个能连续使用的移动端聊天工具。
担心滥用,我们讨论过邮箱门槛、假邮箱、手机号。最后选择不收手机号,因为手机号太敏感;后来又把邮箱门槛恢复成“首问可用,后续留常用邮箱”,并且拦截测试邮箱和临时邮箱。
用户想反馈,我们加留言窗口,只有留过邮箱的人可以提交。留言里如果出现 11 位手机号,直接拒绝,避免用户把敏感信息发进来。
我们还不断加边界声明。
页面上写,弹窗里写,右侧说明里写,AI 回答结尾也写:它只是参考,不保证完全准确,不能代替考生和家庭做最终填报决定。后来我担心这还不够,又加了强制确认,不勾选“仅供参考、最终家庭拍板、后果自担”,不能发送问题。
再后来,我们甚至把“稳上、必录、包录、放心填、一定能走、肯定不会滑档”这类表达从系统提示里禁掉。
你看,这不是一个“随手套壳上线”的项目。
但这也是问题所在:我们越认真做,越会发现这件事不是普通 AI 工具的难度。
真正改变判断的,是专业人士的提醒
项目跑到后面,我们和做升学规划的专业人士交流了一轮。
他的提醒很直接:高考志愿这种东西,不能只看行数,也不能只看分数大部分对不对。你要看每一条专业、位次、备注、限制条件是不是能支撑真实填报。
他说,缺 10 条、20 条,在这种场景里都可能是重大事故。
这个话很刺耳,但对。
我们后来拿一份浙江 2025 普通类志愿填报数据和自己的库做交叉对比。结果不是那种“大面积全错”的崩盘,但已经足够说明:它不能当成专业填报决策级数据库。
总体数字是这样的:
他的表有 24,247 行,我们库里的浙江 2025 普通类数据有 24,986 行。
按“院校代码 + 专业代码”做主键,两边共同代码是 23,531 个。他表里有、我们库没有的唯一代码是 93 个。
另外,有 22,853 行可以做到同代码、同分数、同位次。这部分交叉验证是通过的。
问题主要集中在两类。
第一类,是边界位次口径差异。
有 1,394 行不能做到“同代码、同分数、同位次”。这些差异集中在两个值:
490 / 184372:148 行268 / 290790:1,246 行
我们查到浙江考试院官方原始 XLS 里,这些边界分数的位次为空。我们的库按官方原表保留成 rank=0。而专业人士那边的表,把它们补成了一分一段参考位次。
从“官方原始投档线”角度,我们不算乱填。
但从“志愿填报实战”角度,用户不是来欣赏官方空值的。用户需要判断风险,位次为空会影响 AI 对冲、稳、保的判断。
第二类,是那 93 个外部独有的院校专业代码。
按普通数据工程比例看,93 个在两万多条里不算大。
但高考志愿不是普通数据工程。一个专业漏掉,就可能影响某个学生的保底项、可选项和滑档风险判断。尤其这些项集中在低分边界、未招满或专科段附近,这恰恰是更容易出事的地方。
这时候再说“整体准确率还可以”,意义就不大了。
因为出事的人不会是“整体”。
出事的是某一个学生。
我们之前的数据结构太薄
这次复核还有一个更大的问题:我们原来的主库结构偏薄。
它能存学校、专业、分数、位次、年份、省份这些基础字段,但真正志愿填报不只看这些。
一个专业能不能报,还要看:
- 选科要求
- 专业组
- 招生计划
- 专业备注
- 学费
- 校区
- 中外合作
- 体检限制
- 单科要求
- 调剂规则
- 招生章程
- 是否未招满
- 是否二段剩余计划
- 批次和段次是否能直接比较
这些字段如果不完整,AI 就很容易把一个“基础投档线库”讲成“填报建议库”。
这就是最危险的地方。
基础库可以支撑初步分析,但不能直接承接最终决策。
如果只是我自己内部研究,或者做一个“看看历史分数”的演示,它还能继续跑。但一旦免费开放给考生和家长,用户就可能把它当成一个可以依赖的志愿填报工具。
免责声明拦不住这种误用。
尤其当 AI 说话很像那么回事的时候,风险会更大。它越流畅,用户越容易信。
为什么最后选择暂停
一开始,我们还试图把它降成“保守参考模式”。
比如加确认框、禁绝对表达、提示回官方核对、遇到未覆盖省份不编数据、把没有本地库的省份只做方法盘点。
这些都应该做。
但问题是:它们只能降低风险,不能改变工具在用户心里的位置。
只要页面还允许用户提问,只要 AI 还会给具体学校、专业和冲稳保建议,就会有人把它当成“我可以照着填”的答案。
而高考志愿不是可以赌用户理解力的地方。
所以最后我们做了软下线:
/gaokao/页面改成暂停和复核说明- 输入框禁用,不再生成具体志愿建议
- 后端接口默认返回暂停说明
- 首页入口同步改成复核维护中
- 保留留言入口,方便继续收集反馈
后面又把公开说明改得更直接:我们和专业人士交流、复核后,确认当前数据库不够完善、不够严谨。为了避免误导大家,也为了避免耽误大家人生里很重要的一次选择,先暂停使用。
这不是一句“维护升级中”能糊弄过去的事。
它应该被说清楚。
公益动机不能抵消责任
我最难受的地方也在这里。
这个项目一开始确实是想帮人。
不是收费课,不是卖咨询,不是引流到什么私域服务。就是觉得 AI 和数据结合起来,也许能让普通家庭少一点信息差,少一点来回翻表的痛苦。
但公益动机不能抵消责任。
你免费,不代表用户的损失也免费。
你没收钱,不代表建议错了就没有代价。
这也是这次最大的教训:AI 工具不是“我没有恶意”就够了。
尤其是高风险场景,判断标准不能是“我已经尽力了”,而应该是“用户如果按这个结果做,会不会被伤到”。
如果答案是会,那就不能继续用“参考”两个字撑着。
这次留下了什么
项目暂停,不代表这两天全白干。
它至少留下了几个判断。
第一,AI 做高考志愿,不能从聊天框开始。
必须先从数据来源、字段结构、批次边界、官方核对链路开始。没有这些,提示词越强,越可能把薄数据包装成强结论。
第二,本地库有价值,但它不是最终裁判。
本地库能让 AI 不乱编,能帮助用户快速看到历史范围。但只要它不是专业填报决策级数据库,就必须明确说:它只能做初步参考。
第三,公开工具的边界不能只写在角落。
边界要写进页面、接口、AI 口径、按钮状态、反馈系统和默认流程里。用户不应该专门去找免责声明,才能知道这个工具不能承担什么。
第四,专业人士的实战标准必须提前进入复核。
工程师很容易看 badRows、行数、重复率、构建是否通过。可填报师看的是另一套东西:缺一条会不会影响一个学生,位次口径会不会改变风险判断,专业备注会不会导致退档。
这两套标准都重要。
但在高考志愿这件事上,后者更接近真实代价。
第五,停掉也是一种交付。
这句话不好听,但是真的。
一个系统能上线,不代表它应该继续开放。发现风险以后,把入口关掉、把原因讲清楚、提醒已经用过的人回到官方来源核对,也是对用户负责的一部分。
给已经用过的同学和家长
如果你之前用过这个工具,或者用过任何类似的 AI 志愿工具,请不要把 AI 的建议当成最终答案。
正式填报前,请回到这几个地方:
- 本省教育考试院
- 当年招生计划
- 一分一段表
- 高校招生章程
- 学校招生网
- 专业组和专业代码
- 选科要求、学费、校区、体检限制、调剂规则
如果条件允许,也建议咨询真正做升学规划的人。
AI 可以帮你把问题问完整,帮你整理取舍,帮你发现自己没想到的风险。
但最终选择,不能交给 AI。
这次我们本来想帮大家。
最后弄成这样,我很遗憾,也很抱歉。
但比起让一个不够严谨的工具继续跑,我宁可现在把它停下来。
高考志愿不是一次内容实验。
它是很多家庭的一次人生选择。
这条线,不能拿来赌。