天问(Tianwen)是一个完全跑在本地的东方式自我反思应用。一个 1B 参数的模型,把三千年的中国术数语言,变成今天就能做到的一小步。它是 Build Small Hackathon 的参赛作品,名字取自屈原的《天问》:最值得问的问题,是问自己的问题。
- 演示视频:8 分钟讲解
- 社区帖子:r/huggingface
- 模型:
build-small-hackathon/tianwen-minicpm5-1b - 数据集:
build-small-hackathon/tianwen-distill
这是什么
天问挑了一个很玄的领域,中国的八字命理和六爻占卜,把它做成温和、带点游戏感的自我反思工具。它不算命,只把古老的符号换成日常的心理学语言,每次结尾都落到一个具体行动上。
四种解读,从最宽的视角收到最近的当下:
- 命盘:一生的画像(八字四柱)
- 年运:今年的基调,加上逐月展开的十二个月
- 日盘:今天的能量、每日符印壁纸、30 天心情趋势
- 请事:心里有问题时,掷三枚硬币六次,得到一次六爻解读
语言支持简体中文、繁体中文和英文。主题有“汝窑白”和“玄武黑”两种,可以装成 PWA。
思路与技术
这届黑客松的主旨是“AI 的未来不必住在别人的数据中心里”。天问是一个完整应用,关键部分全在你自己的设备上跑:
| 层 | 做法 |
|---|---|
| 排盘 | 确定性计算:lunar-python 在本地算出八字、流年、流月和卦象,日期不靠模型猜。 |
| 解读 | 微调后的 MiniCPM5-1B(1B 参数),经 llama.cpp 以 OpenAI 兼容接口提供服务。项目从教师模型蒸馏出自己的语气:平实、第二人称、不渲染厄运。 |
| 安全 | 确定性护栏(safety/intercept):危机词立刻熔断,转向求助热线;不祥的符号会重映射成成长性的说法。这一层从不交给 1B 模型的概率。 |
| 兜底 | 大模型不可用时,规则引擎照样能生成完整解读,所以离线也能用。 |
作者强调,这种语气不是靠提示词“调”出来的,是教出来的。完整的蒸馏 → LoRA → GGUF → 部署过程,以及踩过的每一个坑,都 记在 Fine-Tuning Field Notes(docs/FINETUNE_REPORT.md)里。
技术栈:MiniCPM5-1B · LLaMA-Factory(LoRA,bf16)· Modal(A100 训练)· llama.cpp(GGUF Q4_K_M)· HF ZeroGPU(推理)· FastAPI + Gradio(后端)· React + shadcn/ui + Tailwind(前端)· lunar-python。
亮点
- 完全本地:零外部网络请求,可离线安装的 PWA。
- 微调:自建蒸馏数据集,对 MiniCPM5-1B 做 LoRA 微调,loss 曲线健康。
- 开放共享:数据集、训练和蒸馏脚本都开放,构建日志也写得很细。
- 小模型也能干:用 1B 模型完成通常要 4B 以上模型才做的事;蒸馏和训练流水线跑在 Modal A100 上。
本地运行
# 1) Build the React frontend (the backend serves this build)
cd frontend && pnpm install && pnpm build && cd ..
# 2) Start the backend
python app.py # → http://127.0.0.1:7860/
# 3) (optional) Serve the fine-tuned model for real LLM readings
llama-server -m finetune/data/tianwen-minicpm1b-q4_k_m.gguf --port 8888 -c 4096
即使没跑大模型,天问也能靠确定性的规则引擎正常工作。
仓库结构
app.py FastAPI + Gradio backend (serves frontend/dist, SSE streaming readings)
bazi/ divination/ Deterministic charting & I-Ching engines (lunar-python)
prompts/ System prompts, templates, OpenAI-compatible LLM client
safety/ Crisis circuit-breaker + symbol re-mapping
finetune/ Distillation (gen_distill.py) + Modal training (train_modal.py) + deploy
frontend/ React + shadcn UI (build → frontend/dist)
docs/FINETUNE_REPORT.md The build log (Field Notes)
说明
排盘基于 lunar-python,城市数据来自 GeoNames(CC BY 4.0)。本应用仅供自我反思和娱乐,不能替代专业的医疗、心理或财务建议。
相关链接
- Hugging Face Space:build-small-hackathon/Tianwen
- 演示视频:8 分钟讲解
