← 研究

案例研究

Kairos 如何给虚构引用盖章——探针,不是承诺

2026 年 9 月 27 日

大模型研究工具会编造引用。Kairos 在每条 [PMID:/DOI:/KG:] 标记到达页面前,先用一道确定性闸门逐条裁决——并用一个常驻探针在每次改动时把虚构引用喂给它。探针从未放行过任何虚构。这里是机制、战绩与边界。

失效模式:模型先写引用,再祈祷

先检索证据、再综合回答的研究助手,可能输出一个证据池里从未出现过的 [PMID:12345678]。模型先写标记,后查证据池——或者根本不查。在我们自己的审计里,虚构标记是一类反复出现的失败:它们长得像溯源,其实是溯源的反面。

闸门:每条标记在渲染前被裁决

自 v0.20.0 起,自由文本推理中的每条引用标记都要在渲染前通过确定性裁决:证据池内的标记保留;池外但经 NCBI 核验真实存在的标记保留并标注 external;幻觉或无法解析的标记从正文剔除,句意保留。闸门只删虚假标记——永不破坏报告,也绝不悄悄改写你的文献。它在生产环境开着,报告里能看到清理结果。

探针:我们故意喂它虚构

闸门只是一句声明,直到有什么东西去打破它。我们的常驻对抗探针构造一份故意投毒的文档——五条虚构引用与一个虚构的 12 g/L 滴度——让它通过审查层。健康的定义:每一条虚构都被判 WARN 或 FAIL,从未 PASS。探针在审查层每次改动时随 CI 运行,并把判定与退出码打印进构建日志:虚构论断一旦 PASS,构建即失败——那个失败就是告警。

战绩

2026-07-27 的两次探针均被抓获——会话判定 FAIL,虚构论断被标记。2026-09-20 进入 CI 的常驻探针首次运行即健康:五条虚构引用与虚构的 12 g/L 滴度全部被判 unverified,从未 PASS。本页是一张快照;探针随每次改动重跑,构建日志才是滚动记录。

它不覆盖什么

闸门裁决的是引用标记,不是正文:没有引用的句子仍然可能出错。审查层检查的是所引来源是否真的支撑该论断——同一宿主、同一目标、蕴含还是矛盾——而不是论断在世界中是否为真。任何干实验工具都不能替代湿实验验证。我们在每一页都写明这些,因为听起来像保证的探针,本身就是另一种虚构。

} }; var lang = 'zh'; applyLang(); function applyLang(){ document.querySelectorAll('[data-i18n]').forEach(function(el){ var k = el.getAttribute('data-i18n'); if (I18N[lang][k]) el.innerHTML = I18N[lang][k]; }); document.querySelectorAll('[data-i18nsrc]').forEach(function(el){ var k = el.getAttribute('data-i18nsrc'); if (I18N[lang][k]) el.src = I18N[lang][k]; }); document.querySelectorAll('[data-i18nalt]').forEach(function(el){ var k = el.getAttribute('data-i18nalt'); if (I18N[lang][k]) el.alt = I18N[lang][k]; }); // 语言切换时同步更新导航/页脚链接的语言前缀(否则切中文后点导航仍跳英文页) document.querySelectorAll('a[href^="https://evolrix.bio/"]').forEach(function(a){ var h = a.getAttribute('href') || ''; if (lang === 'zh') { if (h.indexOf('https://evolrix.bio/') === 0 && h.indexOf('/zh/') === -1) a.setAttribute('href', h.replace('https://evolrix.bio/', 'https://evolrix.bio/zh/')); } else { if (h.indexOf('https://evolrix.bio/zh/') === 0) a.setAttribute('href', h.replace('https://evolrix.bio/zh/', 'https://evolrix.bio/')); } }); document.documentElement.lang = lang === 'zh' ? 'zh-CN' : 'en'; document.getElementById('segEn').classList.toggle('active', lang === 'en'); document.getElementById('segZh').classList.toggle('active', lang === 'zh'); } document.getElementById('segEn').addEventListener('click', function(){ if (lang !== 'en') { lang = 'en'; applyLang(); } }); document.getElementById('segZh').addEventListener('click', function(){ if (lang !== 'zh') { lang = 'zh'; applyLang(); } }); var els = document.querySelectorAll('.reveal'); if ('IntersectionObserver' in window) { var io = new IntersectionObserver(function(es){ es.forEach(function(e){ if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } }); }, {threshold:.15}); els.forEach(function(el){ io.observe(el); }); } else { els.forEach(function(el){ el.classList.add('in'); }); } var navbar = document.querySelector('.navbar'); function syncNav(){ navbar.classList.toggle('scrolled', window.scrollY > 8); } window.addEventListener('scroll', syncNav, {passive:true}); syncNav(); })();