Install
openclaw skills install true-seeing审核 AI 生成文章中的可验证事实,通过 web search 逐条校验,输出差异报告并支持用户审批替换。当用户需要事实核查、验证文章准确性、检查数据日期金额是否正确、去除 AI 幻觉内容、或 fact-check 一篇文章时使用。触发于"事实核查"、"验一下这些数据"、"检查事实"、"去幻觉"、"fact check"、"核实文章"、"核实这段话"、"帮我对一下数据"、"这篇文章里的数字对不对"。不适用于语法纠错、翻译校对、纯观点验证、文风调整。
openclaw skills install true-seeing识别文章中的可验证事实性陈述,通过 web search 逐条校验,输出差异报告供用户审批后替换。适用于 AI 生成内容的去幻觉化处理。
[article] → Stage 1: extract → fact_list → Stage 2: verify → report → 🛑 用户审批 → Stage 3: replace → corrected article
三个阶段支持独立调用(stage 参数)或全流程顺序执行(默认)。
stage=full 模式的执行流程:
Stage 2 完成后必须暂停等待用户审批,不得自动进入 Stage 3。
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| article | string | 是 | 待核查的文章全文或文件路径 |
| stage | enum | 否 | extract / verify / replace / full(默认 full) |
| fact_list | JSON | 条件必需 | stage=verify 时必需;Stage 1 的输出 |
| verification_report | JSON | 条件必需 | stage=replace 时必需;Stage 2 的输出 |
| user_selections | list[int] | 条件必需 | stage=replace 时必需;用户选择替换的有分歧事实编号 |
{
"article_summary": "文章主题一句话概括",
"total_facts": 5,
"facts": [
{
"id": 1,
"category": "funding",
"original_text": "XXX公司于2025年3月完成B轮融资5亿元",
"position": "第2段第3句",
"search_query": "XXX公司 B轮融资 2025年3月 金额"
}
]
}
{
"summary": { "total": 5, "verified": 3, "corrected": 1, "remain": 1 },
"verified": [
{
"id": 1,
"original_text": "原文描述",
"source_url": "https://...",
"source_snippet": "网页上的对应描述"
}
],
"corrected": [
{
"id": 2,
"original_text": "原文描述",
"actual_fact": "实际查找到的信息",
"source_url": "https://...",
"source_snippet": "网页上的对应描述",
"divergence_type": "number_mismatch | date_mismatch | event_nonexistent | entity_mismatch"
}
],
"remain": [
{
"id": 3,
"original_text": "原文描述",
"search_queries_tried": ["query1", "query2"],
"note": "未找到可验证的搜索结果"
}
]
}
article:文章全文通读全文,逐段扫描。
按 references/fact-extraction-rules.md 中的分类规则,标记每一条可验证的事实性陈述。
对每条标记事实,记录:
id:自增编号,从 1 开始category:分类标签(funding / pricing / date / event / statistic / personnel / product / other)original_text:原文中的完整句子或分句position:段落+句子位置描述search_query:转化为适合 web search 的关键词查询(去掉虚词,保留实体+关键信息)批量上限检查:如果标记事实数量超过 30 条,仅保留前 30 条,在输出中附注"发现 N 条事实,已截取前 30 条。如需继续,请将剩余部分作为新输入。"。
输出 fact_list JSON。
质量自检:
| 分隔)fact_list:Stage 1 输出的 JSON每条事实在处理过程中有以下状态:
| 状态 | 含义 |
|---|---|
Unverified | 初始状态,待处理 |
keywords-generated | 已生成检索词,待搜索 |
fact-fetch | 已获取搜索结果,待比对 |
Verified | 终态:内容无误 |
Corrected | 终态:内容已修正 |
Remain | 终态:保持不变(无法验证或用户选择保留) |
状态转换规则:
Unverified ──(生成检索词成功)──→ keywords-generated
Unverified ──(生成检索词失败)──→ 留在 Unverified,回到大池子
keywords-generated ──(搜索成功)──→ fact-fetch
keywords-generated ──(搜索失败)──→ 留在 keywords-generated,等当前批次步骤 5 重试
fact-fetch ──(比对:内容无误)──→ Verified
fact-fetch ──(比对:内容有差异)──→ Corrected
fact-fetch ──(比对:结果模糊/无法判定)──→ Remain
前置检查:执行一次 web_search,查询 "test",确认 Brave Search 可用。
初始化:将 fact_list 中所有事实放入 unverified_pool(大池子),创建空的 done_pool(已完成池)。
进入循环(最多 5 轮):
3a. 从 unverified_pool 中捞出最多 5 条 Unverified 事实,形成当前批次的 batch_pool(小池子)。如果 unverified_pool 为空,跳到步骤 4。
3b. 对 batch_pool 中的每条事实,按 references/search-query-templates.md 生成检索词:
keywords-generated。Unverified,移出 batch_pool,放回 unverified_pool(大池子)。3c. 对 batch_pool 中所有 keywords-generated 的事实,使用 sessions_spawn 启动 sub-agent 并行搜索:
web_search,取前 3 条结果用 web_fetch 抓取内容。fact-fetch。keywords-generated,留在 batch_pool。3d. 对 batch_pool 中所有 fact-fetch 的事实,按 references/verification-criteria.md 逐要素比对:
Verified。Corrected,记录 actual_fact + source_url + divergence_type。Remain,附注原因。3e. 对 batch_pool 中仍然停留在 keywords-generated 的事实(搜索失败的),换策略重搜一次:
references/search-query-templates.md 重试策略)。Remain,附注"搜索重试失败"。3f. 当前批次处理完毕:
batch_pool 中已达终态(Verified / Corrected / Remain)的事实 → 移入 done_pool。batch_pool 中仍有未达终态的事实 → 放回 unverified_pool。3g. 检查 unverified_pool 是否为空。空 → 跳到步骤 4。非空 → 回到 3a 开始下一轮。
循环结束:
unverified_pool 中仍有 Unverified 事实 → 全部标记为 Remain,附注"超过最大轮次(5轮)仍未验证",移入 done_pool。done_pool 中所有事实,输出 verification_report JSON。质量自检:
keywords-generated 的事实同时启动 sub-agent 搜索,不逐条等待。keywords-generated,等步骤 3e 重试。article:原文verification_report:Stage 2 输出的 JSONuser_selections:用户选择替换的有分歧事实编号列表# 事实核查报告
## 有分歧的事实(Corrected)
| 编号 | 原文事实 | 实际查找到的事实 | 出处 |
|------|---------|----------------|------|
| {id} | "{original_text}" | "{actual_fact}" | [来源]({source_url}) |
## 无分歧的事实(Verified)
| 编号 | 原文事实 | 佐证出处 |
|------|---------|----------|
| {id} | "{original_text}" | [来源]({source_url}) |
## 未能验证的事实(Remain)
| 编号 | 原文事实 | 备注 |
|------|---------|------|
| {id} | "{original_text}" | {note} |
等待用户回复,格式为:用户给出「有分歧的事实」表格中的编号(如 2, 5)。空回复或不修改 → 输出原文不变,流程结束。
根据 user_selections 执行替换:
original_textactual_fact[^fc-{id}](如 [^fc-2]),使用 fc- 前缀避免与原文已有脚注编号冲突输出修正后的文章,文末附:
---
## 参考来源
- [^fc-1] {source_url} — {source_snippet 摘要}
- [^fc-2] {source_url} — {source_snippet 摘要}
...
[^fc-{id}] 与参考来源一一对应。| 故障场景 | 行为 |
|---|---|
| 文章为空 | 输出错误信息:"文章内容为空,无法执行事实核查" |
| fact_list 为空 | 输出:"未发现可验证事实",流程结束 |
| web_search 不可用 | abort,输出错误信息:“web_search (Brave) 当前不可用,无法执行事实校验。建议过一段时间再试。” |
| 搜索结果全部 429 | 输出已完成部分,标记中断位置 |
| 原文找不到对应位置 | 跳过该条替换,在输出中标注"原文未找到匹配位置" |
| 用户选择的编号不存在 | 提示"编号 X 不在差异列表中",忽略无效编号 |
执行完成后自检:
做: 校验文章中的可验证事实性陈述(数据、日期、金额、事件等)。 不做: 语法纠错、观点验证、逻辑推理验证、翻译质量检查。 移交: 如果文章需要专业领域事实核查(法律条文、医学数据),提示用户建议由领域专家复核。