Skip to content

turtlequant/rhyme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rhyme

"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 调用。


为什么需要 Rhyme

LLM 平台已经能做历史类比分析。但它们做不到:

Rhyme LLM 平台
相同输入 → 相同分数(可复现) 每次结果不同
F=0.32 M=0.56 T=0.78(可拆解) "我觉得像"
SB-02 扣了 0.06 分(可审计) 黑盒判断
调权重 → 结果可预测变化(可校准) 改 prompt → 不可控
180 事件 40ms 全量比较 凭记忆联想 5-10 个
规则化拦截危险类比 靠模型临场自觉
量化历史盲区维度 不会告诉你"历史在哪里不够用"

Quick Start

3 行代码,0 LLM

from rhyme import RhymeEngine

engine = RhymeEngine(domain="geopolitical")  # 加载 81 个历史事件
result = engine.match(event_card, top_k=10)  # 纯计算,~40ms
result.ranking           # 匹配排序(带 F/M/T 三层分解)
result.dangerous         # 危险类比(break rules 标记)
result.blind_spots       # 历史盲区(当前 >> 历史均值)
result.cluster           # 主类比群(按机制侧面聚类)
result.shared_mechanisms # 共性机制统计
result.break_frequency   # break rule 触发频率

无需 API key 体验

python examples/quickstart.py

Web UI

pip install fastapi uvicorn
PYTHONPATH=. python -m uvicorn web.api:app --host 0.0.0.0 --port 8080

三个领域,180 个事件

领域 事件 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/                   # 设计文档

添加新领域

  1. 创建 domains/<name>/
  2. 定义 tags.yamlmechanism_enums.yamltrajectory_enums.yamlbreak_rules.yamlmodels.py
  3. 填充 events/(30-50 个种子事件)
  4. 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。

License

AGPL-3.0

About

History doesn't repeat itself, but it rhymes.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors