DenisSergeevitch/ex-ussr-kinship-research · 上手攻略
- 仓库:DenisSergeevitch/ex-ussr-kinship-research
- 链接:https://github.com/DenisSergeevitch/ex-ussr-kinship-research
- 分类:agent / genealogy / skill
- 作者:spark
- 更新:2026-10-29
0. 自检清单(三证)
- [x] GitHub URL(已 fetch README + SKILL.md raw 正文)
- [x] README 子模块 anchor(
scripts/、references/、assets/、evals/、tests/五类目录结构已在 README 与 SKILL.md 中逐项核对) - [x] 论文/机构 anchor —— 本项目没有论文 venue;替代锚点为 SKILL.md front-matter 的
metadata.version: "1.18.0"、language: "ru"、region: "ex-USSR",以及 MIT 许可与作者署名(Denis Shiryaev / @DenisSergeevitch)。它不是论文仓库,不适用顶会 venue 字段。 - [x] 版本号浮动提示:README 未标注具体 release tag,SKILL.md 声明 version 1.18.0;
references/changelog.md是唯一权威版本源(本文写作时未逐条读取 ⚠️)
1. 是什么
这是一个给 AI Agent 用的"证据优先"家谱研究 Skill,不是软件包、不是 Web 服务,也不是数据集。它以 Agent Skill 的标准形态发布(一个 SKILL.md + references/ 参考手册 + scripts/ 脚本 + assets/ 模板),可直接装进 Codex、Claude Code 等 Agent Skills 运行时,也可通过 MCP 接入 Arca 家谱应用或 FamilySearch。
定位非常具体:把 Agent 变成一个谨慎的前苏联 / 苏联 / 俄罗斯帝国地区的家族史研究者。核心工作对象是教会簿(метрические книги)、民事登记(ЗАГС)、军人卡片、驱逐与镇压记录,以及大量未编目的档案扫描件。
作者是 Denis Shiryaev(GitHub: @DenisSergeevitch),约 1148 stars(仓库卡显示周增 +1713,典型的短期爆发式增长)。MIT 许可,语言主体为 Python(脚本)+ Markdown(指令)。
它和普通"家谱软件"的区别:它不产出结论,它产出证据链。每条关系都必须能追溯到一个具体的 artifact_id,而每条断言的状态由 audit_evidence.py 校验,不允许"声明式"地凭空升级。
2. 解决什么问题
做东欧/前苏联家谱研究的人,卡在四个具体的痛点上,而这个 Skill 就是逐个针对:
- 地名与管辖权错位。1937 年的某个村子属于哪个省、哪个县、哪个教区,今天看地图完全看不出来。Skill 强制"按事件发生日期解析历史管辖权",而不是用今天的国界去检索。
- 人名变体爆炸。改革前的俄语拼写、乌克兰语/波兰语/罗马尼亚语/德语/意第绪语写法、父名缩略形、女性婚前姓与婚后姓、各种俄化改名——同一个祖先在档案里有十几种拼法。Skill 用"姓名变体矩阵"系统化处理。
- 同名不同人。Skill 强制在出现区分证据(门牌号、父母、教父母、精确出生日期、部队番号)之前,把同名者记成不同的
person_id,不合并。 - 假独立证据。同一份记录的复印件、镜像站、索引条目被当成三个来源互相"印证",这是家谱研究里最常见的自欺。Skill 用
independence_group强制把同一记录的多个副本归为一组,脚本会检查"被引用的 artifact 是否真的属于该组"——也就是说互证不能被声明出来,只能被证明出来。
另一个容易被忽略但很关键的设计:证据状态是离散标签,不是置信度百分比。状态包括 hypothesis(假设)、single-source(单一来源)、corroborated(已互证)、strongly-corroborated(强互证)、contradicted(矛盾)、unresolved(未决)。这跟 LLM 常见的"我有 85% 的信心是张三"是相反的设计哲学。
3. 快速安装
方式 A:Skills CLI(推荐,需要 Node.js)
npx skills add https://github.com/DenisSergeevitch/ex-ussr-kinship-research
CLI 会让你选择目标 Agent,默认安装到当前项目;加 -g 则装到个人目录(跨项目可用)。Node.js 的具体版本要求请查 vercel-labs/skills 的官方文档(README 原文:"See its documentation for current Node.js requirements",未硬编码版本号 ⚠️)。
方式 B:手动 clone 到 Agent 的 skills 目录
# Codex
git clone https://github.com/DenisSergeevitch/ex-ussr-kinship-research ~/.codex/skills/ex-ussr-kinship-research
# Claude Code(个人级 skills)
git clone https://github.com/DenisSergeevitch/ex-ussr-kinship-research ~/.claude/skills/ex-ussr-kinship-research
单个项目用的话,把文件夹放进项目里的 .claude/skills/ 即可。
依赖要求
- 脚本只需要 Python 3 + 标准库,不需要 pip 装第三方包。
build_pdf.py额外需要一个 Chromium 内核浏览器(Chrome / Chromium / Edge),也可用CHROME_PATH环境变量指定路径。build_pdf.py的--png-dir参数还需要pypdfium2(可选)。
初始化一个案子
cd ~/.claude/skills/ex-ussr-kinship-research
python scripts/init_case.py \
--case-dir ~/kinship-cases/my-case \
--research-question "Who were Maria's parents?" \
--subject-label "Maria"
# 给每个保存下来的材料算校验和
python scripts/hash_artifact.py ~/kinship-cases/my-case/scans/marriage-1902.jpg
# 写结论前先审计证据链
python scripts/audit_evidence.py --case-dir ~/kinship-cases/my-case
# 生成可读 PDF 报告
python scripts/build_pdf.py \
--html ~/kinship-cases/my-case/pdf-source/report.html \
--out ~/kinship-cases/my-case/report.pdf
跑一遍自带单元测试:
python3 -m unittest discover -s tests
4. 核心用法
4.1 初始化后会生成什么
init_case.py 会铺出一整套"可复现登记表"(文件名来自 SKILL.md 步骤 2,与 README 的 assets/ 描述一致):
| 文件 | 内容 |
|---|---|
case-intake.yaml |
研究问题、已知事实、授权与边界、隐私约束 |
person-register.csv |
候选人物(同名者各自独立 person_id) |
artifact-register.csv |
每份文档/网页/扫描件,含出处、可读性、independence_group |
claims-register.csv |
可检验的断言及其来源、矛盾 |
relationship-register.csv |
人物之间的关系假设 |
search-log.csv |
完整检索日志:查询、筛选、失败、CAPTCHA、下一步 |
research-state.md |
剩余检查项与阻塞点(工作队列) |
final-report.md |
最终报告骨架 |
photos/ + README.md |
找到的历史照片及说明 |
这套 CSV + YAML 的组合是它的核心价值:研究过程本身就是可审计的产物,而不是一段对话记录。
4.2 怎么跟 Agent 提需求
不需要你会写检索式,直接用自然语言描述家族问题即可。README 给的三个例子:
"My great-grandfather was exiled to Kazakhstan in the 1930s. Help me find his parents in church records."
"Here are scans of a marriage certificate and a soldier card. Check whether they are the same person and build the evidence chain."
"Find the parish and the right FamilySearch film for a village in Podolia in the 1890s and read the births for the surname X."
Skill 的默认行为是长时自主研究:不会每个阶段都回来问"要继续吗",而是自己推进直到用例被覆盖、可访问路由耗尽、用户明确叫停或触及环境限额。
4.3 语言策略(一个容易被误解的设计)
Skill 指令本体是俄语写的,但 Agent 对你的回复语言跟随你最后一条消息的语言(英文、乌克兰语、俄语、波兰语、德语等)。同时:
- 来源引用保留原始拼写并附翻译;
- 检索式用来源的语言构建(俄语、乌克兰语、波兰语、罗马尼亚语、德语、意第绪语),不是用你对话的语言;
- CSV 的列名、ID 字段(
person_id/claim_id/artifact_id)和状态词(single-source/corroborated)不翻译。
这个设计对中文用户意味着:你用中文提问,它用中文回答,但去 FamilySearch 或档案目录检索时会自动切到俄语/波兰语等原始语言。
4.4 区域专门参考文档
references/ 下有若干专题手册,按需读即可(不需要一次全读):
habsburg-galicia-bukovina.md— 哈布斯堡统治下的加利西亚与布科维纳chechnya-deportation.md— 车臣家庭、1944 年驱逐、特别定居点、改名村庄germany-forced-labour.md— 1941–1945 德国强制劳工、Arolsen 档案、德国民事登记bessarabia-moldova.md— Bessarabia、摩尔多瓦、MASSR、第聂斯特河边境地带field-lessons.md— 真实案例实战经验(含"视觉读取核查"、女性姓氏断链的绕行路线)ex-ussr-locale-guide.md— 管辖权、姓名变体、历法、各时期记录类型ww1-search.md— GWAR 一战人员/地点检索familysearch-indexes.md/familysearch-mcp.md— FamilySearch 索引浏览 / MCP 连接photo-search.md— 照片的查找、鉴定、定年与存储
SKILL.md 里一条值得注意的执行纪律:只有在出现历史边界、语言/书写体系变更、歧义或失真的地名时,才去读 ex-ussr-locale-guide.md;并强调"目录文件的头几行不能代表它的完整覆盖范围",要通读整个目录再挑相关章节。
5. 典型适用场景
- 确认两人是否为同一人(同名消歧),并给出可复核的证据链;
- 追溯被驱逐者/被镇压者的父母,从教会簿与民事登记入手;
- 为家族分支建立证据化家谱树,每条边都标注状态;
- 给档案馆/图书馆写询证信(经授权可代发,避免重复发送,回信按证据处理);
- 批量整理未编目扫描件:图片落盘、算 SHA-256、登记为 artifact、抽成 claim;
- 与 Arca 协同:Arca 的树只当"线索"读入,研究确立的结果再带来源与证明标记写回,用户既有记录永不被覆盖。
6. 坑与注意
- 案件目录绝对不能放在 skill 仓库内部。
init_case.py会直接拒绝在 skill 目录下建案,即使加--force也不行;.gitignore还额外屏蔽了常见的旧式案卷文件夹名。迁移旧案卷时记得git status检查暂存区。 - 版本号会漂移,且更新检查是 Agent 的运行时行为。SKILL.md 要求 Agent 在研究开始时查一次上游仓库是否更新,询问用户后由用户 Agent 执行更新。你可能跑着跑着就被提示升级——遇到时先确认当前版本号(
metadata.version,写作时为 1.18.0)。 build_pdf.py的 HTML 沙箱是硬性的:只接受静态 HTML + 本地/内嵌图片,主动拒绝带活动脚本和网络图片源的 HTML(源链接仍可点击)。渲染失败时保留已有输出 PDF,不会破坏旧文件。这既是安全设计也会让某些自定义报告模板失效。- 首次 import 浏览器式工具会很慢:文档明确说某些场景首次启动可能耗时数分钟,只发生一次。
- CAPTCHA 只有一次机会,且必须走正常交互路径、用户自己登录。Skill 明确禁止:外部打码服务、绕过保护、绕付费墙、绕地域限制、绕速率限制、使用泄露数据库。遇到 CAPTCHA 应转交用户。
- 不要把"没搜到"当成"不存在"(SKILL.md 规则第 10 条)。空结果只说明当前路由没命中,不代表人没存在。
- 敏感信息有边界:拒绝查找在世者的现住址、电话、账号;对未成年人、DNA 意外发现、收养信息等中性报告且只报必要范围;未经明确同意不上传你的文档、DNA 数据或照片到第三方服务。
- Arca 与 FamilySearch 是"可选连接",不是必需。没连上时 Skill 依然通过浏览器 + 本地材料工作;连上 MCP 也不等于绕过访问控制,且 FamilySearch MCP 的实际浏览器、隐私与写入能力需要自己核实。
- 第三方数据源各有凭据要求:FamilySearch 需要合法登录会话与 DGS 编号知识;GWAR 是卡片索引而非人口普查;Arca 的历史连接在实现 MCP 前也依赖已有数据。这三条都不能自动建立身份或亲缘关系。
- 许可与授权的边界:用户授权发信 ≠ 授权发附件或付费服务;接入邮箱 ≠ 授权发送。凭据与私人通信必须留在 skill 仓库之外。
- ⚠️ 本文未逐一核验
references/changelog.md的逐条版本记录,也未运行python3 -m unittest discover -s tests实测;命令行参数以 SKILL.md 原文为准,最新参数以你本地的--help为准。
7. 与同类对比
| 维度 | 本 Skill | Arca(家谱应用 + MCP) | FamilySearch(外部) | 普通家谱网站/论坛 |
|---|---|---|---|---|
| 形态 | Agent 指令+脚本(MIT) | 桌面家谱应用 + MCP 端点 | 商业机构档案平台 | 网页应用 |
| 核心能力 | 证据协议 + 检索策略 + 审计脚本 | 树的存储与可视化 | 索引与扫描原件 | 社区互助 |
| 亲缘结论可信度 | 强制状态标签 + 脚本校验互证 | 依赖用户标注,树链接默认只是假设 | 提供原件,不做亲缘推断 | 依赖他人上传,质量参差 |
| 覆盖范围 | 前苏联 15 个加盟共和国 + 俄罗斯帝国,含驱逐/镇压 | 取决于用户数据 | 全球教会簿与民事登记 | 有限 |
- 对比 Arca:Arca 是"数据存储与展示层",本 Skill 是"研究方法层"。两者互补,Skill 专门写了
references/arca.md说明如何把 Arca 当作输入源与输出目标。 - 对比 FamilySearch:Skill 不替代 FamilySearch,只是更懂怎么在它上面检索(按地点/DGS 找对 film、按变体名匹配、区分索引检索与未索引扫描阅读两条路径)。
- 对比 WikiTree / Geneanet / 论坛:那些是"信息聚合 + 社区互助",缺少独立性与矛盾处理机制;
independence_group+audit_evidence.py在这类平台上无法落地。 - 对比传统纸质族谱方法论:Skill 本质是把资深族谱学者的作业纪律(原始件优先、管辖权建模、同名分离、证据分级)编码成 Agent 可执行的检查表。学习曲线在"研究方法"而非"软件操作"。
8. 一句话推荐结论
如果你(或你的 Agent)真的要做前苏联/东欧家族史这件需要跨档案、跨语言、跨几十年的事,这是目前少见地把"证据纪律"和"自动化"真正缝在一起的方案,值得装;但它治不了"找不到"——它只保证你找到的每一条都能被追溯,档案本身的缺失、加密与访问限制仍需你自己面对。
同时提醒一句:这个仓库 star 增长极快(仓库卡记录一周 +1713),但 SKILL.md 声明的 version 1.18.0 仍是 beta 性质的高频迭代项目,脚本接口与 references/ 内容都可能在小版本间变化;正式用于严肃家谱研究前,建议先固定一个 commit 或 release tag 再开工。