我用 AI 跟踪 420 个预测来源。以下是开源框架。
Source: Dev.to
请提供您想要翻译的具体文本内容,我将为您翻译成简体中文。
问题
没有用于预测跟踪的标准基础设施。
| 现有生态系统 | 功能 |
|---|---|
| LangChain | Agents |
| HuggingFace | Models |
| Supabase | Back‑ends |
但没有任何东西能回答以下问题:
“谁预测了什么,他们何时说的,以及他们是否正确?”
Signal Tracker 解决了这个问题。
Install
pip install signal-tracker
零依赖 – 仅使用标准库。
Python 3.10+.
5分钟快速演练
跟踪来源和声明
from signal_tracker import SignalTracker
from datetime import date
tracker = SignalTracker()
# Add sources
elon = tracker.add_source("Elon Musk", source_type="person", category="tech")
cramer = tracker.add_source("Jim Cramer", source_type="person", category="finance")
imf = tracker.add_source("IMF", source_type="institution", category="economics")
# Add predictions
tracker.add_claim(
source=elon,
text="Tesla will achieve full self‑driving by end of 2025",
target_date=date(2025, 12, 31),
)
tracker.add_claim(
source=cramer,
text="Netflix will hit $800 by Q2 2025",
target_date=date(2025, 6, 30),
)
tracker.add_claim(
source=imf,
text="Global GDP growth will reach 3.2 % in 2025",
target_date=date(2025, 12, 31),
)
验证结果
tracker.verify(claim1, outcome="wrong", reasoning="FSD not achieved by deadline")
tracker.verify(claim2, outcome="correct", reasoning="Netflix reached $820 in May")
tracker.verify(claim3, outcome="partial", reasoning="GDP grew 2.9 %, close but below target")
构建排行榜
board = tracker.leaderboard(min_claims=3)
for entry in board.top_accurate:
print(f"{entry.rank}. {entry.source.name}: {entry.score.accuracy_score}%")
其他有用视图:
board.worst_accurate– 表现最差者board.biggest_risers– 快速提升者board.biggest_fallers– 表现恶化者board.notable_wrongs– 高调失误
评分系统
准确度评分
- 简单的基于百分比的准确度,带有细微差别:
- 部分正确性加权 – 可配置(默认 0.5,即部分命中计为一半)
- 最小声明阈值 – 来源至少需要 3 条已解决的声明才能得到有意义的分数
- 时间窗口评分 – 分别计算 30 天、90 天、12 个月以及全部时间的准确度
windows = tracker.accuracy_scorer.score_windowed(claims, source_id=source.id)
for period, snapshot in windows.items():
print(f" {period}: {snapshot.accuracy_score}%")
最近度加权评分
更近期的预测更重要。使用可配置半衰期的指数衰减:
from signal_tracker.scoring import AccuracyConfig
config = AccuracyConfig(recency_half_life_days=90)
tracker = SignalTracker(accuracy_config=config)
上周的预测影响力约为一年前的 8 倍。这可以突出那些历史上表现良好但最近表现下降的来源。
声明质量评分
并非所有预测都等同。“事情最终会好转”与“比特币将在 2025 年第四季度达到 $150k”并不相同。
质量评分器根据下表对每个声明进行 0‑100 评分。
| 因素 | 权重 | 检查内容 |
|---|---|---|
| 时间限制 | 30 % | 是否有具体截止日期? |
| 可衡量 | 30 % | 是否有数值目标? |
| 可证伪 | 20 % | 是否有明确的成功/失败标准? |
| 最近度 | 20 % | 声明有多近期? |
from signal_tracker import QualityScorer
scorer = QualityScorer()
score = scorer.score(claim) # e.g., 87.5 — highly trackable
high_quality = [c for c in claims if scorer.is_high_quality(c)]
评分器使用正则表达式模式来检测预测语言、美元金额、百分比、日期引用以及模糊词。模糊语言(如 “might”、 “could”、 “eventually”)会受到惩罚。
从文本中提取预测
基于规则(快速,无 API 调用)
text = """
In his latest interview, the CEO predicted that revenue would
exceed $10 billion by Q2 2025. He also forecast that the company
would reach 100 million users within 18 months.
"""
claims = tracker.extract_claims(text, source=ceo)
for claim in claims:
print(f" {claim.text}")
print(f" Target: {claim.target_date}")
print(f" Category: {claim.category}")
print(f" Quality: {claim.quality_score}")
基于 LLM(更准确)
使用您自己的 LLM 函数(任何 str → str 可调用对象均可)。
import anthropic
client = anthropic.Anthropic()
def my_llm(prompt: str) -> str:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1000,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
tracker = SignalTracker(llm_fn=my_llm)
claims = tracker.extract_claims(transcript, source=analyst, use_llm=True)
该集成是 模型无关 的——OpenAI、Anthropic、Gemini、本地模型等。
多模型共识验证
在 Crene 的生产环境中,我们不只信任单一模型。我们会运行多个模型并进行加权投票。
tracker.verify_with_consensus(
claim,
[
{"outcome": "correct", "verifier": "ai:claude", "confidence": 0.90},
{"outcome": "correct", "verifier": "ai:gpt-4", "confidence": 0.85},
{"outcome": "wrong", "verifier": "ai:gemini","confidence": 0.60},
],
)
结果: "correct" – 加权共识获胜。
结果会根据置信度得分加权;大多数高置信度的一致意见会覆盖低置信度的异议。
篡改检测
每个声明在创建时都会生成一个 SHA‑256 哈希:
claim = tracker.add_claim(source, "Bitcoin to $200k by 2025")
print(claim.content_hash) # a1b2c3d4...
随后,验证内容是否未被更改:
claim.verify_integrity() # True
如果有人修改了文本…
claim.text = "I never said that"
claim.verify_integrity() # False — hash mismatch
持久化
JSON(简易)
tracker.save("my_tracker.json")
tracker = SignalTracker.load("my_tracker.json")
SQLite(适用于更大的数据集)
from signal_tracker.storage import SQLiteBackend
backend = SQLiteBackend("tracker.db")
backend.save_source(source)
backend.save_claim(claim)
查询
all_claims = backend.list_claims(source_id="elon-musk")
架构
signal-tracker/
├── tracker.py # SignalTracker — main interface
├── models.py # Source, Claim, Verification, ScoreSnapshot
├── scoring.py # AccuracyScorer, QualityScorer
├── extractors.py # ClaimExtractor (rules + LLM)
├── leaderboard.py # Leaderboard engine
└── storage.py # SQLiteBackend
设计原则
- 零依赖 – 仅使用标准库作为核心
- 自带 LLM – 任意提供商均可
- 可插拔存储 – 支持 JSON、SQLite,或自行实现
- 普通数据类 – 完全不依赖 ORM
接下来
路线图取决于社区的需求:
| 版本 | 功能 |
|---|---|
| v0.2 | REST API 服务器(FastAPI) |
| v0.3 | 自动从 RSS、Twitter、YouTube 转录稿获取 |
| v0.4 | 仪表盘 UI(React) |
| v0.5 | 预测市场集成(Polymarket、Kalshi) |
| v0.6 | 区块链锚定,实现防篡改记录 |
Try It
pip install signal-tracker
- GitHub: https://github.com/Creneinc/signal-tracker
- PyPI: https://pypi.org/project/signal-tracker
- Production version: https://crene.com (see the Signals tab)
40 项测试通过。MIT 许可证。欢迎贡献。
该框架是免费的。数据是护城河。