这是一个用于网络事实核查的工作流程,配合 free-search MCP 服务器使用,适用于查询结果会被他人依赖的场景,例如日期、截止时间、价格、奖品、费用、规则、资格条件等。
用途 搜索结果只用于定位页面,事实必须完全来自页面本身。搜索摘要只是引擎在抓取时对页面的概括,可能丢失限定条件、合并不同版本,而且常常是数年前的旧内容。当答案会被他人依赖时,应使用本流程。
使用方式 文中工具名是搜索 MCP 服务器上的裸名,宿主环境可能会加前缀显示。
第 0 步:确定今天的日期。在判断任何内容是否“当前”之前,先从系统上下文获取今天日期;若无法获取,则用一次未被缓存的新搜索结果上的检索时间戳作为服务器时钟。“最新”“今年”“即将”都相对于它而言,不要从搜索结果或记忆中推断当前年份。
第 1 步:定位,搜索只用于获得 URL。search(query) 找出候选页面;涉及时效性时加 freshness="month"(也可用 "day"/"week"/"year");确定官方域名后可用 include_domains=[...];category 可用于论文、申报文件、新闻、数据集。某些事实有登记源,当问题明确点出对象时搜索会自行查询,例如软件包("latest fastapi version")、CVE 编号、两种货币("100 usd to cny")、地点加天气词、国家加指标("china gdp")、城市加时间词、域名、代币、iOS 应用等;记录会作为第一条结果返回并带发布者日期,标注 "Record sources",可直接引用。category("software"、"security"、"weather"、"finance.fx"、"stats"、"calendar"、"reference")可显式询问同一批来源。应选择一手来源:主办方、供应商、监管机构或作者自己的页面、申报文件、论文、代码仓库;聚合站、榜单、转载、论坛和 AI 撰写的摘要只用于找到一手来源。绝不要从摘要或 Lead 行复制日期、金额、名称、规则或数字到答案中。用来源的语言搜索;中文查询会自动路由到中文索引,要强制更多中文引擎可用 engines=["so360", "baidu"]。
第 2 步:阅读来源本身。单个页面用 fetch(url),多个候选页面用 fetch_batch(urls),一次往返完成查找与阅读用 research(question, depth=3, include_domains=[...]),长 PDF 或 DOCX(规则、通知)用 read_doc(source, start, length) 且下一页从 start 加返回字符数开始,需要日期、价格、活动元数据等字段用 extract_structured(url) 取 JSON-LD 中的 startDate、price、datePublished、dateModified,跨 2 到 5 个页面回答同一问题用 compare(question, urls),准备引用的论文用 paper_graph(paper) 查撤稿和更正通知。分组、地区、费用表、奖项明细和截止日期通常位于子页面或链接的 PDF(规则、FAQ、章程、通知)中;若落地页缺少这些内容,应先用 fetch 或 read_doc 跟进其链接,再回到搜索。若 fetch 返回接近空白的正文,用 render="browser" 重试。
第 3 步:确认内容是最新的。对每份依赖的来源确认三件事:发布或最后更新时间(查找 fetch 头中的 published 日期、extract_structured 的 datePublished/dateModified,或正文中的日期;若显示 no publication date found 说明该页无日期,应说明这一点,不要假设它新);本副本的检索时间(页面和搜索最多缓存 7 天,输出中的 cached N days ago 表示读的是存储副本;对于会变化的内容如截止日期、价格、可用性、排名、版本、突发新闻,用 fetch(url, force_refresh=True) 或搜索/研究时 max_age_hours=0 重新拉取);它描述的是哪个版本(页面上的年份、赛季、版本或轮次必须与所问的一致;用去年年度活动的页面回答今年问题是最常见的错误,因为它官方、详尽,看起来正确;若只发布了较早版本,应报告为那个版本并说明当前版本尚未公布)。freshness= 只是尽力而为且会保留无日期结果,因此通过 freshness="month" 的结果仍可能很旧;搜索会说明有多少结果能标日期(dated: 3/10)并逐一标记。
第 4 步:交叉印证。用户会据以行动的事实需要一个一手来源,或两个独立来源。独立指来源不同:两家媒体转载同一份新闻稿或通讯社报道只算一个来源;措辞相同通常意味着同源。优先一手而非二手,两个一手页面中优先较新的。来源冲突时不要取平均也不要默默择一,应报告两个值、各自出处、日期,以及你为何把某个视为权威。
第 5 步:阅读警告信息。结果上 dated <date> 表示日期来自 feed 或 API 字段;<date> (from snippet text) 表示日期是从行文中抽出的,可能是页面提到的日期,与页面自身日期不同;undated 表示年龄未知,应视为可能很旧。"Undated results" 表示尽管要求了时效性,多数结果仍无日期,应在页面上确认日期。"Gated engines"、"Silent engines"、"Rate-limited engines"、"Benched engines"、rescued via、requested but contributed nothing 都意味着覆盖不完整,空结果不能证明不存在,应先改表述或换引擎再下结论。引擎若"answered with results that match only the first word of the query",这些结果已被丢弃,无需处理,但覆盖范围更窄。结果上显示的 kind(government、academic、news、paper、forum、code)描述的是站点类型,与质量无关。引擎报缺少 API key 的错误可忽略,继续使用无需密钥的引擎,绝不向用户索取密钥。
第 6 步:报告。每条事实都给出来源和日期,例如“注册于 2026-10-15 截止(主办方页面,2026-09-02 更新,今日检索)”,并附 URL。要把在一手页面读到的内容与只有二手来源支持的内容分开。结尾给出“无法核实”清单:所有你未在实际读过的页面上找到的请求细节,以及所有未解决的冲突。绝不要用摘要、记忆或从更早版本推断来填补空白。若无法访问任何权威来源,应如实说明,不要悄悄退回到基于摘要的答案。
成本 一次正常核实是:一次搜索、对一手页面的 1 到 2 次 fetch 调用,以及一个交叉印证来源。可用 research(question, fetch=False) 选择要读的内容,depth 保持 2 到 3,并用 cache_search 查找本会话已读过的页面。
限制 本文不涉及具体收费、价格或平台承诺;摘要与缓存有时效性限制(最多 7 天);freshness 参数为尽力而为;引擎覆盖可能不完整;无日期页面需人工判断。