"History doesn't repeat itself, but it rhymes." — Mark Twain
Rhyme 是一个事件结构推演引擎。 将历史重大事件编码为可计算的结构样本,对当前事件做结构匹配,输出分支概率和监控信号。
不是预测系统,不是报告生成器。是分析系统和 AI Agent 缺失的结构计算中间层。
输入一个当前事件的结构编码,40ms 内输出:
=== 历史匹配 ===
#1 赎罪日战争: 0.372 (F=0.32 M=0.56 T=0.78)
#2 俄格战争: 0.355 (F=0.37 M=0.54 T=0.80)
#3 俄乌战争: 0.329 (F=0.32 M=0.63 T=0.73)
=== 危险类比(看着像但结构不同,套用会误导) ===
伊拉克入侵科威特: 0.471 breaks=[nuclear_constraint_asymmetry]
珍珠港事件: 0.452 breaks=[nuclear_constraint_asymmetry]
=== 历史盲区(当前事件超出历史覆盖的维度) ===
energy_crisis: 当前 1.0 vs 历史均值 0.0 (+0.80)
nuclear_actors: 当前 1.0 vs 历史均值 0.31 (+0.69)
trade_route: 当前 1.0 vs 历史均值 0.0 (+0.94)
=== 主类比群(按机制侧面聚类) ===
trigger: 苏莱曼尼刺杀(assassination → leadership)
retaliation: 赎罪日战争(symmetric_response)
constraint: 俄乌战争(nuclear_escalation_risk)
56 个事件全量比较,38ms,0 LLM 调用。
LLM 平台已经能做历史类比分析。但它们做不到:
| Rhyme | LLM 平台 |
|---|---|
| 相同输入 → 相同分数(可复现) | 每次结果不同 |
| F=0.32 M=0.56 T=0.78(可拆解) | "我觉得像" |
| SB-02 扣了 0.06 分(可审计) | 黑盒判断 |
| 调权重 → 结果可预测变化(可校准) | 改 prompt → 不可控 |
| 180 事件 40ms 全量比较 | 凭记忆联想 5-10 个 |
| 规则化拦截危险类比 | 靠模型临场自觉 |
| 量化历史盲区维度 | 不会告诉你"历史在哪里不够用" |
from rhyme import RhymeEngine
engine = RhymeEngine(domain="geopolitical") # 加载 81 个历史事件
result = engine.match(event_card, top_k=10) # 纯计算,~40msresult.ranking # 匹配排序(带 F/M/T 三层分解)
result.dangerous # 危险类比(break rules 标记)
result.blind_spots # 历史盲区(当前 >> 历史均值)
result.cluster # 主类比群(按机制侧面聚类)
result.shared_mechanisms # 共性机制统计
result.break_frequency # break rule 触发频率python examples/quickstart.pypip install fastapi uvicorn
PYTHONPATH=. python -m uvicorn web.api:app --host 0.0.0.0 --port 8080| 领域 | 事件 | Tags | 覆盖 |
|---|---|---|---|
geopolitical |
81 | 61 | 战争、危机、领土争端、代理人冲突 |
trade_sanctions |
55 | 34 | 贸易战、制裁、科技脱钩、供应链武器化 |
asset_bubbles |
44 | 44 | 股票、房产、加密、商品泡沫 |
新增领域只需添加 domains/<name>/ 目录,引擎代码零改动。
编码层(1 次 LLM) 引擎层(0 LLM,纯计算) 消费层(按需)
自然语言 → 三层结构对象 → 全库匹配 + break rules → Web UI / 对话 / API
+ 统计聚合 + 盲区检测
- Layer 1: Tag Vector — 结构特征指纹(20-44 tags,权重 0/0.3/0.7/1.0)
- Layer 2: Mechanism Skeleton — 因果骨架(5 槽位:trigger → driver → retaliation → constraint → transmission)
- Layer 3: Trajectory State — 轨迹位置(阶段、烈度、不可逆性、降级通道、升级轴)
rhymeness = 0.50 × feature + 0.30 × mechanism + 0.20 × trajectory − penalty
独立于评分的规则系统:
- Hard Break — 一票否决(如阶段严重错位)
- Soft Break — 削弱评分(如核约束程度差异)
规则从 domains/*/break_rules.yaml 加载,领域可配置。
rhyme/
├── rhyme/ # 引擎核心(领域无关,0 LLM)
│ ├── core.py # RhymeEngine 入口
│ ├── models/ # EventCard, EngineResult
│ ├── pipeline/ # match, filter, reason, encode
│ └── knowledge/ # TagSchema, EventStore
├── domains/ # 领域配置(3 领域,180 事件)
│ ├── geopolitical/
│ ├── trade_sanctions/
│ └── asset_bubbles/
├── web/ # Web UI(可选)
├── examples/ # quickstart + 预编码测试
└── docs/ # 设计文档
- 创建
domains/<name>/ - 定义
tags.yaml、mechanism_enums.yaml、trajectory_enums.yaml、break_rules.yaml、models.py - 填充
events/(30-50 个种子事件) RhymeEngine(domain="<name>")即可使用
| 文档 | 内容 |
|---|---|
| 技术概览 | 架构、API、数据 |
| 设计哲学 | 核心假设与原则 |
| 引擎边界 | 三层架构边界定义 |
| 三层结构 | Tag / Mechanism / Trajectory 规格 |
| 评分算法 | IDF-Jaccard + 槽位匹配 |
| 伪类比规则 | Hard/Soft break 规则 |
| 领域规格 | 领域配置与扩展 |
| 项目 | 关系 |
|---|---|
| Historical-Analogy-of-LLMs (ACL 2025) | 658 事件数据集 |
| EvCBR (WWW 2023) | 知识图谱案例推理 |
| PLOVER/POLECAT | 事件编码本体 |
历史事件数据由 LLM 辅助生成并经人工审核,仅用于结构化分析研究。事件描述可能存在不准确或偏差,不代表开发者立场。本项目不提供投资建议、政治分析或军事评估。
如发现事实错误或不当表述,欢迎提交 Issue 或 PR。
AGPL-3.0