缘起
过年回家翻到家里那本族谱:竖排、手抄,有几页已经受潮糊了。我想查一个人名下有几房,得用手指顺着世系里的线走一遍。长辈们说得清自己往上三代,第四代开始就得翻书。
那天惦记的是一句很普通的话——这东西要是能问,会省多少事。
背景
族谱的难点在结构而不在文字。世系是一棵树,可记录方式是散的:同一代人名字相邻,字号与别名并存,配偶和「几房所出」挂在版面的不同位置,还有过继、入赘这类会打断树形的例外。纸上是手绘的连线,电子化之后多半也只是一篇篇散文式的记录,机器读不懂,人查一次也得会读。要做的是把文档里的世系解析成可查询的结构,在结构之上支持「某人是谁的后代」「某人名下几房」这类问法,并且每条回答都能落回原文那句。
方案
构建了一套完整的 RAG(检索增强生成)流水线,从文档上传到智能问答形成闭环:
- 文档解析:支持 PDF/TXT 族谱文档上传,自动分块、向量化
- 结构化提取:异步任务机制自动提取祖先概览、人物档案、关系网络、历史事件
- 智能问答:多轮对话支持问题改写,基于向量检索的精准回答
- 可视化:家谱树形图、关系网络图、时间线三种展示方式
技术架构
| 模块 | 技术选型 |
|---|---|
| 前端 | Vue3 + Vite + Element Plus + ECharts |
| 后端 | Python + FastAPI + SQLAlchemy + SQLite |
| AI/RAG | ChromaDB 向量库 + 智谱 GLM-4 + LangChain |
| 认证 | JWT + bcrypt |
系统采用 merge/overwrite 两种模式处理文档解析结果,支持增量更新和全量覆盖。
成果
实现了垂直领域的 RAG 应用,用户上传族谱文档后,系统自动完成从文本到结构化知识的转换。多轮对话支持上下文理解和问题改写,可视化模块直观呈现家族脉络。