这次我们不看工具,看一篇论文。Google 在 Co-Scientist 里加了一个“可靠性模块”,给出的结果非常直接:论文结果幻觉率从 46% 落到 4%。这个数字不只是少了 9 倍的问题,它说明了另一件事——大模型不是不能做科研辅助,而是缺一套把“生成”和“可信”绑在一起的工程机制。
很多人做大模型应用,最头疼的就是模型一本正经地编造。普通聊天场景里幻觉顶多让你尴尬,科研场景里幻觉会让人做出错误判断:编参考文献、编实验数据、给出看似严谨但站不住脚的机制解释,这些风险完全不可接受。Co-Scientist 的这条路,本质上是把所有生成内容都放到“可验证性”框架里去约束。这篇论文里的可靠性设计,对做 AI Agent、RAG、知识库问答、自动报告生成的人都值得拆开来看。
下面我会按这个顺序展开:Co-Scientist 是什么、科研场景为什么是幻觉重灾区、可靠性模块可能由哪些机制组成、46% 到 4% 靠什么拉下来、这套思路如何迁移到自己的 Agent 里、以及评估幻觉率和工程落地的常见坑。文章会给出可执行的管道伪代码、评估配置和排查清单,你可以直接拿去对照自己的方案。
1. Co-Scientist 是什么:先搞清楚这篇论文的对象
Co-Scientist 是 Google 在 AI 辅助科学研究方向上的一个多智能体系统,底层使用 Gemini 系列大模型。从公开资料和论文标题来看,它不是一个简单的对话机器人,而是一个面向科研任务的 Agent 系统:能接收研究问题,组织多个模型智能体分别完成假设生成、方案设计、结果分析、批判审阅等工作,最终输出带论证材料的研究建议。
它最值得关注的不是“又有一个 AI 能聊天”,而是它系统性地把“科学可靠性”做成了产品级流程。普通软件写错了可以改 bug,论文结果写错了会浪费科研人员几周甚至几个月时间。Co-Scientist 的可靠性模块针对的就是这类错误:模型生成的每一个所谓结果,都要有可以被验证、被溯源、被质疑的通道。
| 能力项 | 说明 |
|---|---|
| 系统定位 | AI 驱动的科研合作系统,辅助提出假设、设计方案、批判分析结果 |
| 底层技术 | Gemini 系列大模型,多智能体协作 |
| 核心成果 | 引入可靠性模块后,论文结果幻觉率从 46% 降至 4% |
| 关键设计 | 生成与验证分离、结果可溯源、不确定性主动暴露 |
| 适用对象 | 科研人员、AI Agent 开发者、知识密集型应用团队 |
| 部署门槛 | 具体以论文版本和发布渠道为准,普通开发者更应关注机制可迁移性 |
| 开源状态 | 需查阅论文对应版本说明,不影响方案学习 |
这段要提醒一句:论文的 4% 是一个评估集内的结果,不是“所有场景绝对只有 4%”。我们关注的重点不是这个数字被复制到所有领域,而是它背后那套降低幻觉的机制能不能迁移到我们的 Agent 上。
2. 科研场景为什么是幻觉重灾区
先给幻觉一个可操作的判定:神经网络生成了一段与可验证事实不一致、或没有任何证据支撑的内容,并且在表达上没有暴露不确定性。科研内容的特殊性在于,它天然使用“确定性语言”:结论要明确、引用要精准、公式要能推导、实验数据要能被复现。这就导致模型在科研场景里会过度自信地表达本应带概率判断的内容。
科研 Agent 里的幻觉通常表现为以下几类。
| 幻觉类型 | 示例 | 危害 |
|---|---|---|
| 虚假参考文献 | 生成一篇看起来像真的论文标题、作者、期刊,但实际不存在 | 误导文献调研方向 |
| 编造实验数值 | 声称某个方法在某数据集上准确率提升 12%,但没有任何实验过程 | 影响方案取舍决策 |
| 错误机制解释 | 用因果关系解释两个变量,但实际只是相关性 | 形成错误的科研假设 |
| 多跳推理断裂 | 结合 A 文献与 B 文献推出 C 结论,但 A 和 B 的关联是模型自己脑补的 | 污染整个逻辑链 |
46% 这个基线的存在并不意外。如果没有外部知识校验和判定机制,大模型面对开放式科研问题,很容易在“不存在的文献”和“想当然的结论”上翻车。科研任务越开放、候选答案空间越大,幻觉率就会越高。
关键结论是:一个模型自己生成的答案,不能只靠它自己来判断是否可靠。必须有独立于生成路径的验证通道。
3. Co-Scientist 里 Agent 流程与可靠性模块的位置
结合 Google 公开的多智能体科研系统介绍,Co-Scientist 大体遵循一个“产生想法 -> 内部批判 -> 筛选排序 -> 进化迭代”的流程。这里需要注意,不同论文版本对 Agent 的命名和分工可能不一样,以下是基于公开机制的工程化理解。
| 阶段 | 典型智能体角色 | 在做什么 | 可靠性问题在哪 |
|---|---|---|---|
| 发散阶段 | 生成 Agent | 根据研究问题提出多个候选假设、研究框架 | 候选越多,幻觉越多 |
| 审阅阶段 | 批判 Agent | 对候选方案挑毛病,找逻辑漏洞和证据缺口 | 批判不严格会放过错误 |
| 排序阶段 | 评估 Agent | 对多个方案进行可验证性和价值排序 | 单点打分容易被表面严谨误导 |
| 进化阶段 | 迭代 Agent | 基于批评意见优化方案,组合出新想法 | 优化过程可能进一步放大原幻觉 |
| 出稿阶段 | 输出 Agent | 把最终研究建议整理成论文结果形式 | 结果需要逐条附带证据链 |
可靠性模块不是某个单独 Agent 的名字,而是一套横跨各个环节的约束机制。它的关键动作是让“批判”和“验证”不再是流程里可有可无的调味品,而是结果是否能进入下一轮的唯一门槛。
更简单地说,没有可靠性模块之前,一个错误结论被识别出来的概率很低;有了可靠性模块之后,错误结论在多个交叉校验节点都会暴露。这种“错误在过程中被拦截”的设计,远好过最后让用户自己人工识别幻觉。
4. 可靠性模块的机制拆解:46% 到 4% 靠什么拉下来
这是全文最核心的部分。可靠性模块的机制,可以拆成几种工程粒度来理解。需要先声明,论文内部具体实现权重和模块组合,需要去看原文;下面的机制拆分更接近“能解释 46% 到 4% 这个量级变化的通用可靠 Agent 设计路径”,也是迁移价值最高的部分。
4.1 事实核查 Agent:每一个关键断言都要过验证闸门
首先,模型生成的论文结果,不能直接进入输出流程。系统会把生成内容拆解成一句一句的“可验证断言”,也就是 claim-level splitting。每一句包含事实性的内容——例如“XX 算法在 XX 数据集上 F1 达到 XX”——都会进入事实核查流程。
事实核查 Agent 的任务不是再写一段类似的文本,而是对一个断言做三件事:该断言是否有明确出处;出处是否真实存在;该断言从出处推导过来是否成立。如果三件事里任何一件不通过,断言就需要被标记为“未验证”,不得以肯定语气输出。这一层是幻觉率大幅下降的直接原因:大量模型想象的“论文结果”在出稿前就被拦截。
这里有一个工程细节值得强调。可靠性模块里的“事实核查”不是简单做一次向量相似度检索,而是把每一个断言转化为可判定的查询任务。检索到的内容要能覆盖该断言的证据缺口,而不是说“从文本风格上看起来像”。否则核查就变成了一种变相的续写。
4.2 检索交叉验证:打破模型单点生成的盲区
降低幻觉的第二个设计,是让模型的结果与外部知识源做交叉验证。单靠生成模型的内部参数,本质上是在用训练数据里的分布“猜”答案。当某个问题超出模型训练分布,或者模型记忆模糊时,它依然会输出一个“看起来合理”的回答。
交叉验证把这一步从内部判断迁移到外部比较:生成的断言去检索真实文献库、知识图谱、技术文档,看是否存在内容能支撑。如果外部知识源完全找不到支撑,这个断言的默认状态是存疑,而不是相信模型的自信表达。
这也是科研 Agent 与普通聊天助手的关键差异。普通助手里 RAG 的主要作用是补充知识;Co-Scientist 的可靠性模块里,检索的作用更像“审计接口”——模型自己说了不算,必须拿出外部证据。
4.3 置信度评分与不确定性路由:拿不准就承认拿不准
很多幻觉问题不是模型没有意识到不确定性,而是没有一条路径允许它表达不确定性。可靠性模块里工程价值最高的部分,很可能是引入了明确的置信度路由:
- 高置信度 + 证据充分 -> 正常输出;
- 中置信度 + 证据不足 -> 输出时额外标注“需要人工复核”;
- 低置信度 -> 不输出具体结论,而是返回“证据不足,给你生成可验证的实验方案”。
这个逻辑的目标不是让系统永远正确,而是保证系统不会用错误的确定性口吻误导研究者。科研场景里,“我不确定”本身就是一个合法答案。真正不可接受的是“明明不确定,却把话说死了”。
4.4 生成与批判分离:用多智能体对抗消除同源偏置
可靠性模块的另一层设计,是让“写方案”的 Agent 和“批方案”的 Agent 尽可能独立。如果生成模型和批判模型是同一个模型、同一套上下文,就会出现很明显的同源偏置:模型更倾向于维护自己刚刚生成的内容,批判 Agent 很难发现真正的问题。
多智能体对抗的价值就是制造“制度化的怀疑”。一个 Agent 负责构造乐观方案,另一个 Agent 被指令要求寻找方案里最薄弱的证据链。两个角色目标不一致,反而更容易暴露错误。
对于科研场景,这种对抗还应该引入外部信号——真实论文的审稿意见、实验日志、基准数据集指标——而不是只靠两个 LLM 之间互相辩论。纯 LLM 互辩可以提升逻辑自洽性,但解决不了事实性错误。Co-Scientist 的可靠性模块之所以能把幻觉率压到 4% 量级,应该不只是智能体互怼,而是对每一条结果都做了证据回填。
4.5 自洽性与多路采样:同一问题多次独立生成
科研结论要具备可复现性,Agent 的生成结果也一样。可靠性模块很容易引入 self-consistency 机制:对同一个研究问题做多次采样,观察模型是否稳定输出同一个结论。如果多次生成结果在关键论点上互相矛盾,那么该结论的可靠性就要被下调。
这个机制本质上是在利用随机采样做置信度校验。模型如果只是“偶尔一次”说出某个结果,可信度低;如果多次独立生成都指向同一个方向和结论,可信度显著增加。这个方法在推理任务里已经很成熟,迁移到科研 Agent 后,能有效压制“碰运气式”的幻觉。
4.6 人类反馈闭环:科学家把错误喂回系统
最后一部分是人工反馈回路。科学家在使用 Co-Scientist 时,如果发现某条输出是幻觉,这个反馈不会止于一次人工修正,而是进入可靠性模块的评价集,成为后续校验的负面样本。
这正是很多 Agent 项目容易忽略的部分。幻觉率指标要可持续下降,必须有一个“错误样本库”在持续扩容。否则系统只会在一开始优化几次,很快进入瓶颈。
5. 从论文到工程:把可靠性模块拆成分层设计
上面那些机制很多做过 Agent 的同学都听过,但落地时会发现很难全部做到。一个更工程化的拆法,是把可靠性模块当成 4 层管道来设计。
| 层级 | 核心目标 | 典型实现 | 出错后果 |
|---|---|---|---|
| Generation 生成层 | 在尽量大的假设空间内产生候选结果 | 多路采样、不同 prompt 策略、生成不同角度的方案 | 覆盖率不足,错过正确方向 |
| Verification 验证层 | 判断每一条断言是否有证据支撑 | 检索交叉验证、事实核查 Agent、主张拆分 | 幻觉漏网,错误结果流入决策层 |
| Decision 决策层 | 衡量置信度后决定输出、拒绝或转人工 | 置信度评分、不确定性路由、自洽性投票 | 正确结果被误杀,或错误结果以高置信度发出 |
| Feedback 反馈层 | 将人工纠错纳入系统记忆 | 错误样本库、评估集更新、规则回填 | 幻觉率下降空间有限,错误重复出现 |
四层当中,验证层是决定幻觉率上限的关卡。如果验证层只是摆设,后面的决策层再精细也拦不住错误内容。
实际开发中,你可以先只做两层:claims 拆分 + 置信度阈值路由。把这两层跑通,再逐步加入检索验证和对抗评审。一张图式理解就是:生成结果不是答案,只是“候选证据包”,系统真正输出的内容是“候选证据包经过验证和过滤后的剩余结论”。
6. 在自己的 Agent 中做一个简化版可靠性模块
如果你想在本地项目或 API 接入的场景里复刻这套思路,不需要完整复现 Co-Scientist。直接在一套 Agent 管道的生成结果之后接入一个 verify-and-route 模块,就能让幻觉率明显下降。
下面给出一套可用于流程验证的 Python 示例。注意:这只是工程演示骨架,模型名、接口路径和提示词模板需要替换为你实际接入的服务。
# 简化版可靠性管道:生成 -> 断言拆分 -> 核查 -> 路由 # 依赖:openai 或 google-generativeai 等 SDK,按实际项目接入 import json from typing import List, Dict def split_claims(text: str) -> List[str]: """ 把模型生成文本拆成一句句可验证断言。 实际项目里可以用 LLM 完成,也可以用规则先做粗拆。 """ # 示例规则:按句号拆,并丢弃过短和疑问句 sentences = [s.strip() for s in text.replace("\n", " ").split("。") if len(s.strip()) > 10] return sentences def check_claim_with_source(claim: str) -> Dict[str, object]: """ 对单条断言做证据核查。 这里应该调用外部检索接口、知识库或可信语料库。 """ # 伪代码:检索接口结果,具体需要换成自己的 Search/Retrieval API # evidence = retrieval_api.query(claim) evidence_score = 0.7 # 示例值,必须按你的检索链路计算 # 判定逻辑:检索不到证据时,默认标记为未验证 if evidence_score < 0.5: return { "claim": claim, "status": "unverified", "evidence_score": evidence_score, "action": "low_confidence_route" } return { "claim": claim, "status": "verified", "evidence_score": evidence_score, "action": "allow_output" } def route_by_confidence(claims: List[Dict[str, object]]) -> Dict[str, object]: """ 根据断言核查结果决定最终输出策略。 """ verified = [c for c in claims if c["status"] == "verified"] unverified = [c for c in claims if c["status"] == "unverified"] if not verified and unverified: return { "final_status": "not_confident", "message": "证据不足,建议仅输出实验验证方案,不直接给出结论。" } return { "final_status": "confident", "output_claims": verified, "needs_review": unverified } def generate_candidate_research_result(question: str) -> str: """ 示例函数:调用 LLM 生成候选结果。 具体调用方式取决于你使用的模型服务。 """ # client = OpenAI(api_key=..., base_url=...) # resp = client.chat.completions.create(...) # 这里返回模拟结果 return ("根据迁移学习理论,在生物医学文本摘要任务中,使用领域自适应预训练" "可以将 ROUGE-L 分数提升 4.2 个百分点。该结果在 PubMed 测试集上验证。") def reliability_pipeline(question: str) -> Dict[str, object]: # 1. 生成候选结果 raw_text = generate_candidate_research_result(question) # 2. 断言拆分 claims = split_claims(raw_text) print("拆分段数:", len(claims)) # 3. 逐条核查 checked_claims = [check_claim_with_source(c) for c in claims] # 4. 路由 result = route_by_confidence(checked_claims) # 5. 保留人工复核标记 return { "question": question, "raw_text": raw_text, "claims": checked_claims, "routing_result": result } if __name__ == "__main__": demo = reliability_pipeline("领域自适应预训练是否提升生物医学文本摘要质量?") print(json.dumps(demo, ensure_ascii=False, indent=2))上面的代码体现了三个最核心的工程模板:不是直接输出大模型原文,而是先拆成断言;每条断言都有状态字段;系统可以根据断言的状态确定能否以肯定语气输出。字段可以按实际项目改造成数据库记录。
下面再给一个“最少验证规则”的 JSON 配置示例。它把核查 Agent 的关键参数单独抽出来,方便做 AB 测试。
{ "claim_split_config": { "min_length": 10, "split_by_punctuation": true, "drop_question_sentence": true, "drop_subjective_sentence": true }, "evidence_checker": { "retrieval_top_k": 5, "min_evidence_score": 0.6, "require_source_id": true, "search_timeout_seconds": 10 }, "routing": { "high_confidence_threshold": 0.8, "low_confidence_threshold": 0.5, "unverified_action": "human_review_or_refuse", "allow_low_confidence_with_warning": true } }最后是一个通用外部检索调用的 curl 示意。具体接口、鉴权、参数需要按你实际接入的知识库或搜索 API 调整,不要把下面的 URL 当真实接口使用。
# 示意:把 claim 发给检索服务,返回可验证记录 # 实际使用时,需要替换为项目自己的检索 API 地址和鉴权 curl -X POST "http://127.0.0.1:8000/evidence_check" \ -H "Content-Type: application/json" \ -d '{ "claim": "领域自适应预训练在 PubMed 摘要任务上将 ROUGE-L 提升 4.2 个百分点", "top_k": 5, "need_source": true }'整套简化版管道的核心不是代码多复杂,而是流程上强制“结果必须经过验证”。一旦一个 Agent 的输出默认不是答案,而只是候选方案,幻觉率自然会下降。
7. 评估幻觉率:怎么得到 46% 到 4% 的可信对比
如果你在自己的 Agent 里做了可靠性模块,接下来一定是灵魂问题:幻觉率降到多少了?这需要先定义评估口径。幻觉率不是“模型偶尔胡说八道”,而是:在一定的测试任务样本中,模型输出中被判定为“与可验证事实不一致或缺乏证据支撑”的比例。
一个可落地的评估设计包括三个层面。
| 评估层面 | 检查内容 | 判定标准 |
|---|---|---|
| 引用层面 | 参考文献、来源链接、代码仓库是否存在 | 捏造即算幻觉 |
| 事实层面 | 数值、指标、时间、机构名是否与真实资料一致 | 与检索结果不一致即算幻觉 |
| 推理层面 | 结论是否能由上文证据推出,是否存在逻辑跳跃 | 多步推理无法回推即算幻觉 |
用公式表示就是:
幻觉率 = 幻觉断言数 / 总断言数 或 样本级幻觉率 = 出现至少一个幻觉断言的样本数 / 总样本数更重要的一点:Co-Scientier 论文里的 46% 到 4%,是在它自己的测试任务分布上得到的。不同任务、不同领域、不同证据库覆盖程度下,绝对数字会差非常多。比如在长尾科学问题上,检索库覆盖不足,幻觉率起点可能就低不了。因此更合理的做法是:在自己的测试集上先测基线,再测加模块后的效果,比较相对下降幅度。
除了绝对幻觉率,还需要记录一个反向指标——覆盖率。很多过滤方法会把正确结果一起误杀。如果为了把幻觉率从 40% 压到 4%,导致 60% 的正确结果被系统判定为“未验证”,那这个系统在真实场景不可用。
8. 工程落地时的常见误区和排查方法
很多团队看完这套方案后会直接抄作业,但实际跑起来会发现效果不稳定。下面按出现频率列出几类常见问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 加了核查 Agent 后幻觉率仍然高 | 核查 Agent 与生成 Agent 同源,标准过松 | 查看核查 Agent 对已确认幻觉样本的判定结果 | 更换不同模型做验证,引入更强的外部检索约束 |
| 可信结果被大量误杀 | 置信度阈值过高,或证据缺失被当成假内容 | 统计被拦截内容的正确率 | 区分“无证据”和“有反证”,无证据可以转人工而非直接拒绝 |
| 检索结果查不到,模型仍坚持输出 | prompt 里给了模型过高的自由裁量权 | 检查 system prompt 是否允许“编造来源” | 强制要求输出必须附带证据 ID,无 ID 不输出 |
| 幻觉率在测试集 A 降了,测试集 B 又上升 | 评估集与模型训练数据分布接近 | 构建更新、更冷门的评估子集 | 按领域拆分报告,不只看整体均值 |
| 多智能体互辩后错误反而增加 | 对抗评审缺少外部事实约束 | 复盘被批评意见“说服”的样本 | 让批评意见必须给出检索证据,不能只说观点 |
| 多路采样结果一致但依然错误 | 多条采样共享了同一个错误先验 | 分析错误模式是否来自 prompt 或检索库 | 更换提示词模板、引入外部反例检索 |
| 输出变保守,很多问题不敢回答 | 不确定性路由把太多问题转给人工 | 查看路由决策日志中的置信度分布 | 降低转人工阈值,允许带警告输出低置信度结果 |
最容易踩的坑是第一行:验证模块和生成模块用同一个模型、同一套温控参数。同源模型会共享系统性能,只是“自己查自己”,很难发现错误。建议至少在验证环节换一个不同规模的模型,或同模型不同角色提示词,来减弱自我一致性偏置。
9. 对 Agent 开发者的建议与合规边界
可靠性模块的价值不只属于科研 Agent。做知识库问答、法律文书辅助、技术报告生成、金融分析摘要的开发者,其实都面对同一个问题:模型输出不能直接作为决策依据。
给 Agent 开发者的落地建议包括:
- 把“输出控制”改为“结果认证”:不要只调 prompt 让模型别胡说,而是让结果必须携带来源与置信度。
- 优先处理“低置信度通道”:当系统不确定时,应输出可执行的验证流程,而不是继续写一个看似确定的答案。
- 建立错误样本库:每次用户纠错都应该进入回归测试,成为幻觉率指标体系的一部分。
- 分领域报告效果:不要在整体均值上自欺,科研、法律、金融等子域需要单独的幻觉率数据。
- 所有输出都要可溯源:尤其是涉及结论判断、结果引用、实验推荐的内容,API 层应返回证据 ID 列表或置信度标识。
合规边界也必须强调。AI 生成的科研假设或论文结果可以作为“辅助材料”,但不得直接替代研究者对数据和结论的最终判断。涉及文献引用时要注意版权和学术规范;处理内部研究数据、临床数据、个人隐私信息时,要遵守数据安全与隐私保护要求。任何自动化工具生成的内容要在发布或商用前做人工复核,并明确标注 AI 参与范围。
10. 总结与下一步
Co-Scientist 这篇论文最有价值的不是 Gemini 模型本身,而是它证明了:当生成能力已经足够强时,系统可靠性更多来自“流程治理”,而不是模型继续变大。拆断言、做检索交叉验证、分置信度路由、引入对抗批判,这些方法哪怕只做一半,也能明显改善 Agent 的输出可信度。
如果你现在正准备做一个科研辅助工具或知识密集型 Agent,我的建议是:不要急着复现完整多智能体架构,先把你现有输出的断言拆分和证据校验补上,跑一轮基线。这一步做扎实,幻觉率下降带来的产品体验提升,会比换更大参数模型更明显。
后面值得继续研究的方向包括:可靠性模块对多跳推理长链错误的抑制能力、不同检索库覆盖度对幻觉率上限的影响、以及如何用多智能体辩论降低错误先验带来的系统性幻觉。把这几个问题做清楚,AI Agent 在专业场景里的可用性会上一个大台阶。