# \[RFC\] Discourse 的原生数据来源与事实映射

**URL:** https://meta.discourse.org/t/rfc-native-data-provenance-fact-mapping-for-discourse/392842
**Category:** Community Building
**Tags:** rfc
**Created:** [2026年一月7日 04:34 UTC](https://meta.discourse.org/t/rfc-native-data-provenance-fact-mapping-for-discourse/392842 "2026-01-07T04:34:06Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![Thefacto](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thefacto/32/537948_2.png) [@Thefacto](https://meta.discourse.org/u/Thefacto)
#### Post date: [2026年一月7日 04:34 UTC](https://meta.discourse.org/t/rfc-native-data-provenance-fact-mapping-for-discourse/392842/1 "2026-01-07T04:34:06Z")

</div>

Hello Discourse Community,

我希望向大家介绍一下我自己——我是一名系统设计师，目前正在探索 Discourse 生态系统。我承认我还没有成为 Discourse 内部架构的专家，但我选择这个平台来开展我即将到来的项目，是因为它强大的数据管理能力和稳固的社区结构。

我目前正在准备一份提案，将提交给我的主管以获得开发批准。我在这里分享此内容的目的是希望从最了解该平台的人那里收集反馈、见解或建设性的批评。您的输入对于帮助我完善这个概念、确保它符合 Discourse 的最佳实践，并最终提高项目的批准几率将是无价的。

> **注意：** 以下内容相当详细。提前感谢您提供的任何建议。  
> 我可能无法立即回复，但我会尽快阅读并回复每一条评论。

* * *

# 技术规范

**项目名称：** Discourse OriginGraph & Facto-Mapper  
**副标题：** 原生数据溯源追踪与可靠性分析系统  
**版本：** 1.0.0 (提案)

* * *

## 1. 执行摘要

在信息快速传播的时代，像 Discourse 这样的讨论平台在结构化论证方面表现出色，但在 **数据溯源分析** 和 **结构演变可视化** 方面缺乏原生工具。

**Discourse OriginGraph & Facto-Mapper** 是一个插件，旨在将 Discourse 从一个标准的讨论论坛转变为一个 **系统化的事实核查与情报层** 。它利用图论来追踪信息来源、可视化关系并计算可靠性指标，而不会干扰核心用户体验。

* * *

## 2. 技术目标

- **可追溯性：** 用于 来源 → 扩展 → 验证 的有向无环图 (DAG)
- **可视化：** Discourse 用户界面中的交互式事实图 (Facto Maps)
- **启发式分析：** 基于置信度的加权评分（非二元真/假）
- **性能：** 通过 Sidekiq 进行异步处理
- **集成：** 严格遵守 Discourse 插件架构

* * *

## 3. 工作范围

### 3.1 范围内工作

- 主题内关系图谱（回复、引用、提及）
- 从已烹饪的 HTML 中提取信号
- 可配置的溯源/稳定性评分
- 通过 Discourse 信任等级进行治理

### 3.2 范围外工作

- 自然语言处理/大型语言模型语义分析（第一阶段）
- 全局搜索替换
- 跨实例联邦

* * *

## 4. 系统架构

### 4.1 技术栈

- 后端：Ruby on Rails (Discourse 核心), Sidekiq
- 前端：Ember.js, D3.js 或 Cytoscape.js
- 数据库：PostgreSQL 13+, Redis
- 数据交换：内部 JSON API

### 4.2 概念架构图

```plaintext
[客户端: Ember.js] <-- JSON --> [控制器: Rails]
       | |
(交互式图表) (请求验证)
       | |
       v v
[可视化库] [Sidekiq 工作池]
                                          |
                                 +--------+--------+
                                 | |
                          [图谱引擎] [评分引擎]
                                 | |
                                 +--------+--------+
                                          |
                                    [PostgreSQL]
                           (边/快照/日志)

```

* * *

## 5. 数据模型（Schema 设计）

### 5.1 表：provenance\_edges

| 字段 | 类型 | 索引 | 描述 |
| --- | --- | --- | --- |
| id | BigInt | PK | 唯一边 ID |
| topic\_id | Integer | IDX | 主题引用 |
| source\_post\_id | Integer | IDX | 源节点 |
| target\_post\_id | Integer | IDX | 目标节点 |
| relation\_type | Enum | | reply, quote, ref, correction, contradiction (回复, 引用, 引用, 修正, 矛盾) |
| weight | Float | | 边强度 |
| metadata | JSONB | | 上下文数据 |

### 5.2 表：facto\_graph\_snapshots

| 字段 | 类型 | 索引 | 描述 |
| --- | --- | --- | --- |
| id | BigInt | PK | 快照 ID |
| topic\_id | Integer | UNIQUE | 相关主题 |
| version | Integer | | 图谱版本 |
| graph\_payload | JSONB | | 节点和边 |
| computed\_at | Datetime | | 生成时间 |
| is\_public | Boolean | | 可见性标志 |

### 5.3 Redis 键

- facto:quota:user:{id}:daily
- facto:job:topic:{id}:status

* * *

## 6. 内部 API 规范

### POST /facto/analyze

- 认证：TL1+
- 参数：topic\_id, force\_recalc (强制重新计算)
- 响应：job\_id, status = queued (排队中)

### GET /facto/graph/:topic\_id

```plaintext
version: 5
nodes:
  - id: 101
    group: source
    score: 0.8
edges:
  - source: 101
    target: 105
    type: verification

```

* * *

## 7. 算法与逻辑

### 7.1 信号提取逻辑

- 迭代主题中的所有帖子
- reply\_to\_post\_number → 回复边
- 解析已烹饪的 HTML → 引用边
- 正则表达式 @usernameusername → 提及边

### 7.2 评分算法

加权中心性（PageRank 风格）：

```plaintext
Score(P) = (1 - d) + d × Σ((Score(Pi) × Weight(Ei,P)) / OutDegree(Pi))

```

矛盾边应用惩罚乘数。

* * *

## 8. 用户体验 / 用户界面

- 入口点：主题地图中的“图表视图”按钮
- 全屏模态图表
- 悬停节点：帖子片段 + 作者
- 点击节点：滚动到帖子
- 过滤器：切换边类型

* * *

## 9. 安全与治理

- 通过 Discourse RateLimiter 进行速率限制
- JSONB 消毒以防止 XSS
- 私密主题继承 Discourse 访问控制列表 (ACL)

* * *

## 10. 开发路线图

- 第一阶段：最小可行产品 (MVP) 图谱提取 + 基本渲染
- 第二阶段：高级评分 + 快照治理
- 第三阶段：版主注释 + 外部 API

---

<div class="post-metadata">

### Author: ![Lief](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lief/32/554366_2.png) [@Lief](https://meta.discourse.org/u/Lief)
#### Post date: [2026年四月20日 18:46 UTC](https://meta.discourse.org/t/rfc-native-data-provenance-fact-mapping-for-discourse/392842/2 "2026-04-20T18:46:56Z")

</div>

你好 @Thefacto，你之前开始做这件事了吗？制作这个了吗？  
我搜索了“provenance”这个词，因为我想了解 Discourse 在 C2PA 或类似技术方面有哪些可用（支持/计划支持/正在实施）的功能。

> **[Explainer.pdf](https://spec.c2pa.org/specifications/specifications/2.2/explainer/_attachments/Explainer.pdf)**
>
> 210.49 KB

关键方面（你可能已经部分实现，尽管是面向你的事实图谱的）包括：

- 清单生成
- 随后的加密签名
- 某种形式的嵌入或水印
- 然后是与资产一起分发
- 最后是为验证而进行展示

---

<div class="post-metadata">

### Author: ![Lief](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lief/32/554366_2.png) [@Lief](https://meta.discourse.org/u/Lief)
#### Post date: [2026年五月21日 23:43 UTC](https://meta.discourse.org/t/rfc-native-data-provenance-fact-mapping-for-discourse/392842/3 "2026-05-21T23:43:32Z")

</div>

我可能仍无法完全理解你在这里试图构建的内容。但“内容来源”这一话题确实是我当前最关心的。

好奇楼主是否愿意看看这篇论文并分享一些想法？

[https://www.sciencedirect.com/science/article/pii/S0749597825000172](https://www.sciencedirect.com/science/article/pii/S0749597825000172)

如果你觉得这个话题与你的原帖关联不大——我会将其移至新帖。  
祝好。
