Codebase (2026-06-27): this engine now lives in meno-gaokao-counsellor (
core/…), extracted from reflection-game — see gaokao-standalone-plan. Module paths below use the newcore/layout.
这是什么 · What this is
中文:用来修「剧情太空泛」的方案。过去场景只由 5 个手工编写的原型 + 一个学校档次来播种,于是「被调剂到冷门专业」始终停留在抽象层面。Grounding 层给生成器灌入真实的、按专业划分的知识——具体的课程、职业、日常真实、踩坑点、转向——让它从无法编造的具体细节出发去演绎。除了在游戏里去感受这些专业事实,你也可以在这里亲自学到它们。
EN: The fix for “storylines too generic.” Scenes used to be seeded only by 5 hand-authored archetypes + a school tier, so “被调剂到冷门专业” stayed an abstraction. The grounding layer gives the generator real, per-major knowledge — concrete courses, careers, daily reality, failure modes, pivots — so it dramatizes from specifics it can’t fabricate. You can learn the major facts yourself here, on top of feeling them in-game.
怎么运作(每个场景)· How it works (per scene)
中文:
- 学生的选项标签(如 “普通一本 材料科学与工程”)按名称 / 别名 / 词干匹配到一张专业卡片(于是 中山大学材料 →
材料科学与工程)。 grounding.py::grounding_block()把那张卡片渲染成一个带「事实/观点」标注的块,build_gaokao_seed再把它连同一份具体性契约一起注入提示词。- 生成器必须从这些具体细节出发去演绎——任何数字、雇主、薪资、升学/就业统计都必须来自 grounding(或学校档次),否则一律略去。生动,但凡可核查的内容绝不凭空捏造。
EN:
- The student’s option label (e.g. “普通一本 材料科学与工程”) is matched to a
major card by name / alias / stem (so 中山大学材料 →
材料科学与工程). grounding.py::grounding_block()renders that card as a fact/opinion-labeled block andbuild_gaokao_seedinjects it into the prompt, alongside a concreteness contract.- The generator must dramatize from those specifics — and any number, employer, salary, or admission/employment statistic must come from the grounding (or the school tier) or be omitted. Vivid, but nothing checkable is invented.
修改前 → 修改后(材料科学与工程)· Before → after (材料科学与工程)
中文: 修改前: “你被调剂到一个冷门专业…”(哪个?没有任何细节)。 修改后: “你发现自己对『材料加工工艺』和『材料测试技术』这两门课的实验越来越乏味…身边 同学开始准备转专业或辅修计算机”——真实的课程、真实的转向、自洽的选项。
EN: Before: “你被调剂到一个冷门专业…” (which? no detail). After: “你发现自己对『材料加工工艺』和『材料测试技术』这两门课的实验越来越乏味…身边 同学开始准备转专业或辅修计算机” — real courses, real pivots, coherent options.
数据结构(每张专业卡片)· The schema (per major card)
中文:50 张卡片中的每一张都把事实(可被报告佐证)与亲历(观点)分开:
EN: Each of the 50 cards splits facts (report-corroborable) from lived (opinion):
| bucket | fields | label |
|---|---|---|
facts | core_courses · typical_paths (升学/就业/留学) · career_destinations · first_job_salary · employment_relatedness | 【事实 / 报告级】 |
lived | daily_reality · failure_modes · common_pivots · reputation_note | 【观点 / 经验】 |
| meta | confidence (high/med/low) · provenance | — |
怎么构建的 · How it’s built
中文:
core/build_grounding.py通过 DeepSeek-V3 为每个专业蒸馏出一张卡片,提示词要求给出具体的课程/职业/转向,并强制执行事实/观点的拆分。输出 →gaokao/real_data/major_grounding.json(859 张卡(856 个专业目录))。- 可重跑、可扩展: 编辑
MAJORS列表并重跑python -m gaokao.build_grounding即可新增/刷新专业。 - 覆盖范围: 横跨 12 个学科门类的完整本科专业目录 —— 859 张卡(856 个专业目录)(尽力而为的 LLM 枚举;有少量垃圾条目,无害)(工/理/医/经管/法/文/教育/艺术设计/农),包括 材料 · 设计类 · CS · 法学。
EN:
core/build_grounding.pydistils one card per major via DeepSeek-V3, with a prompt that demands concrete courses/roles/pivots and enforces the fact/opinion split. Output →gaokao/real_data/major_grounding.json(906 majors).- Re-runnable & extensible: edit the
MAJORSlist and re-runpython -m gaokao.build_groundingto add/refresh majors. - Coverage: the full 本科专业目录 — 906 majors across the 12 学科门类 (best-effort LLM-enumerated; a few junk entries, harmless) (工/理/医/经管/法/文/教育/艺术设计/农), including 材料 · 设计类 · CS · 法学.
数据从哪来 —— 以及它如实的现状 · Where the data comes from — and its honest status
中文:
- v1 是 LLM 蒸馏的(DeepSeek-V3),每张卡片都标注了事实 vs 观点,并带一个
provenance标记。模型被要求只陈述它有把握与 麦可思 / 高校就业质量报告 模式相一致的报告级事实,其余一律标为观点。 - 真实报告的交叉核对是后续工作(ZH 正在处理 就业质量报告 / 麦可思 / 阳光高考 的抓取)。在此之前,事实只是被 LLM 断言为与报告一致,而非已对照源 PDF 验证。标注与
confidence把这一点说得很明白。 - 实时 UGC 抓取(知乎/小红书)已证明不可行(反爬),未采用。
EN:
- v1 is LLM-distilled (DeepSeek-V3) with every card labeled fact vs opinion and a
provenanceflag. The model was instructed to state only report-level facts it’s confident are consistent with 麦可思 / 高校就业质量报告 patterns, and to mark the rest as opinion. - Real-report cross-check is a follow-up (ZH is handling scraping of 就业质量报告 /
麦可思 / 阳光高考). Until then, facts are LLM-asserted-as-report-consistent, not
verified against the source PDFs. The labels and
confidencemake this explicit. - Live UGC scraping (知乎/小红书) was proven infeasible (anti-bot) and is not used.
查看 / 扩展 · Inspect / extend it
中文:
- 知识库:
gaokao/real_data/major_grounding.json - 构建脚本:
core/build_grounding.py - 查找 + 块 + 契约:
core/grounding.py
EN:
- The KB:
gaokao/real_data/major_grounding.json - The builder:
core/build_grounding.py - The lookup + block + contract:
core/grounding.py
局限与下一步 · Limits & next steps
中文:
- Grounding 只在选项标签点名了某个专业时才触发;那 5 个不含专业的通用原型(好学校差专业…)仍会回退到一句如实的「别编造」提示——入口处应当采集真实的专业才能发挥完整效果(计划 §2)。
- 仍待完成(见 Quality Overhaul Plan):每一侧的身份锁定 + 一个选项有效性门控(§3)、真实报告验证、更丰富的入口采集(§2)、预生成(§5)。
EN:
- Grounding fires when the option label names a major; the 5 generic archetypes (好学校差专业…) without a major still fall back to an honest “don’t fabricate” note — intake should capture the actual major for full effect (plan §2).
- Still to come (see Quality Overhaul Plan): per-side identity lock + an option-validity gate (§3), real-report validation, richer intake (§2), pre-generation (§5).