我用 AI 跟踪 420 个预测来源。以下是开源框架。

发布: (2026年2月8日 GMT+8 12:51)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您想要翻译的具体文本内容,我将为您翻译成简体中文。

问题

没有用于预测跟踪的标准基础设施。

现有生态系统功能
LangChainAgents
HuggingFaceModels
SupabaseBack‑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.2REST API 服务器(FastAPI)
v0.3自动从 RSS、Twitter、YouTube 转录稿获取
v0.4仪表盘 UI(React)
v0.5预测市场集成(Polymarket、Kalshi)
v0.6区块链锚定,实现防篡改记录

Try It

pip install signal-tracker

40 项测试通过。MIT 许可证。欢迎贡献。

该框架是免费的。数据是护城河。

0 浏览
Back to Blog

相关文章

阅读更多 »