做科学假设生成的AI最容易被忽略的问题不是生成能力而是它生成的假设到底有没有“挂”在真实世界上。Abduction Loop溯因循环和Representational Grounding表征接地放在一起讨论就是在回答一个很实际的问题如果让AI在没有实验身体、没有真实感知的情况下做溯因推理它产出的科学假设能不能真的指导后续研究。这篇文章写给正在做自动化科研、AI Scientist、智能体系统或者科学数据产品的开发者。我的核心判断是生成假设不难难的是让假设“接地”而接地不是靠一次推理完成的必须靠一个可追溯、可反驳、可迭代的循环来保证。接下来我会先把这个题目的两个关键概念拆清楚再讲为什么不能在纯文本环境里做假设生成然后给一套工程上可行的最小系统设计最后聊评估方法和常见坑。1. 先弄清楚“Abduction”和“Body”分别指什么1.1 溯因推理不是猜谜而是找最佳解释推理方式一般分三种演绎、归纳、溯因。演绎是从一般规则推出具体事实归纳是从大量观察总结规律而溯因是面对一个观察结果反过来找最能解释它的原因。比如你看到桌面湿了可能的原因是杯子倒了、窗户没关、有人泼了水。溯因推理就是在这些候选原因里选一个最合理、最简洁、最能说明现象的解释。科学假设生成本质上就是这种推理观察数据出现异常AI需要提出一个机制来解释为什么数据会变成这样。很多人把溯因理解成“猜测”这是一个容易跑偏的地方。溯因推理虽然结果不确定但它对推理过程有要求解释要覆盖现象不能只解释一部分。解释要尽量简单不要引入一堆不必要的实体。解释要和已知科学知识一致不能为了自洽推翻已经验证过的约束。解释要能被检验至少要能推出一个和当前数据不同的观测。如果一次生成只输出一段看起来很合理的文字不检查它是否满足这些条件那只能叫“自由联想”不叫假设生成。1.2 这里的Body不是指聊天机器人有没有手标题里的“Without a Body”需要先解释清楚。它不只是在说物理身体而是在说一种“经验基底”。传统科学发现的参与者通常有一个完整的感知和行动回路。研究生看到实验现象、读取仪器数据、调整参数、观察到反应变化、再提出解释。这个回路里有大量来自真实世界的反馈信号。一个人说某个假设“看起来对”背后其实包含了他对仪器误差、材料状态、环境条件的大量隐性判断。AI的情况完全不同。一个大语言模型做假设生成时输入是文本输出也是文本。它对“铜片浸入硝酸银溶液会有银白色物质析出”这个说法有很强的文本关联但它没有亲眼看过溶液颜色变化也没有操作过实验器材。它知道的是“这种说法在语料中经常出现”不一定是“这个机制在真实条件下成立”。所以“Abduction Without a Body”可以翻译成一个更偏工程的问题如果AI没有任何感知和执行反馈只靠符号层面的统计关联做溯因推理生成的假设是否还能具备科学假设应有的解释力和可检验性。这个问题之所以值得专门讨论是因为现在很多自动化科研系统已经在这么做。它们用大模型生成假设用知识库过滤用文献匹配打分然后直接输出结论。问题是这条路少了哪一环少了的那一环能不能用别的方式补上。1.3 这个问题的核心不是“AI能不能发现新知识”严格来说AI当然可以发现新知识。搜索空间巨大的组合优化问题、预测蛋白质结构、筛选候选材料这些都是AI能做的科学发现。但这些任务有一个共同特点结果有明确评判标准或者可以从真实数据里获得反馈。而溯因假设生成的不一样之处在于它是在“输出一个还未经证实的故事”。故事可以有很多个而且每个故事都能解释当前数据。如果没有实验反馈、没有物理约束、没有可交互的环境系统就没有办法判断哪个故事更接近真实。因此这个题目真正在追问的是“假设生成系统如何避免变成只会编故事的幻觉机器”。而这个问题的答案显然不在模型参数里而是在系统架构里。2. 表征接地为什么AI生成的假设经常“看着对但不靠谱”2.1 符号接地问题从经典AI一直延续到大模型“接地”这个词来自认知科学和AI里的“符号接地问题”。最早人们发现一个纯符号系统可以在内部做大量规则运算但如果这些符号从未和外部世界建立联系那系统的所有知识都是空洞的。经典AI里这个问题表现为机器人可以推导出“红色”和“苹果”的关系但如果没有传感器它永远不知道真正的红色长什么样。大模型时代问题变得更隐蔽模型学会了“苹果是红色”的文本分布也学会了自动生成一句很自然的话但这个能力来自token之间的统计关系而不是来自对苹果这个实体的直接经验。所以在科学假设生成场景里表征接地要解决的问题不是“模型是否理解了文本”而是“模型生成的表征是否能够对应到真实世界可以观测、可以测量的内容”。如果中间缺了这一步系统再聪明也只是在做文字接龙。2.2 接地的四个层次我在实际评估一个假设生成系统时会先把“接地”拆成四个层次来看。语言接地。假设与已有科学文献、知识库在表述上一致不包含术语误用和概念混淆。这个层次最容易达到但最不可靠。因为语言一致不等于事实正确模型很擅长把错误内容用正确术语包装起来。感知接地。假设涉及的对象、状态、变化能够与图像、传感器数据、仪器读数对应起来。比如假设里说“反应溶液变蓝”那最好真的有颜色传感器能支持这个判断。感知接地比语言接地强因为它引入了外部观测信号。因果接地。假设可以转化为一个机制模型比如化学反应路径、动力学方程、结构图。机制模型能够被用于模拟和推演而不只是一句话。因果接地要求系统能够回答“为什么是这个变量导致那个变量变化”。实验接地。假设能被改写成具体实验方案并且在条件下产生可验证的预测。实验接地是科学假设的最强约束因为它把假设直接放进真实世界或者高保真模拟器里做检验。多数生成式假设系统只做到第一层少数做到第二层和第三层真正完整做到第四层的极少。而判断一个系统是不是“有身体的”核心就看它是否引入了第三层和第四层的反馈。2.3 怎么判断一个候选假设是否“接地”有一个很实用的检查方法把假设转换成“可观测预测”。如果假设为真那么系统应该能回答这样几个问题在相同条件下重复实验会观察到什么如果某个关键变量变化结果会发生什么变化有没有一个观测结果如果出现就能直接推翻这个假设如果一个假设无法转换成这类预测那说明它并没有真正落到可检验空间。它只是在文字上自洽在科学上无法被证实或证伪。另一个方法是交叉验证。用一个数据源得到假设换一个独立数据源或者独立知识源再检查一遍。如果假设在A知识库成立在B知识库就被另一条机制推翻那大概率是接地不够。真正接地的假设不会只依赖某一个数据源的支持。注意这里说的“接地”不是给模型接一个向量数据库就完了。向量检索只能提供文本相似不能代替物理约束也不能代替实验反馈。3. Abduction Loop到底是怎么转的3.1 单次溯因和溯因循环的区别单次溯因推理是这样的给定观察现象让模型输出一个解释。输出完了任务结束。这条路径非常快但问题也很明显没有验证没有修正没有排除最后得到的只是一个“未经检验的故事”。Abduction Loop把这个过程变成循环。系统生成候选假设之后不是直接输出而是进入检查、预测、验证、修正的闭环。每一轮循环都会产生两类关键信息这个假设通过哪些检查哪些检查没过。这个假设在验证中被接受、被拒绝还是需要修正。循环的价值在于它把“生成假设”这个开放问题拆成了多个可执行、可记录、可追溯的子问题。每一轮都有结果每个结果都可以回传系统不会在同一个错误方向上反复打转。我见过不少团队做自动化科研系统会生成一堆候选假设然后就没有然后了。原因就是只做了单次生成没有设计循环。生成器再强没有反馈闭环就没法知道自己错在哪里。这就像一个人只会提问题从来不验证答案是否正确。3.2 一个可落地的循环包含哪些环节可落地的Abduction Loop我认为至少要包含以下几个环节。现象定义。先把需要解释的观察结果明确下来。现象本身要尽量结构化是什么变量异常、在什么条件下异常、异常程度如何。现象定义不清楚后续所有环节都会跟着歪。候选假设生成。基于现象生成多个互不重复的解释。这个环节可以宽泛一些先把可能的机制都列出来包括一些看起来不那么常规的方向。注意这里不要只生成一个假设因为后面需要比较和排除。可行性过滤。把所有候选假设做第一轮筛选排除明显违反基本约束的项。比如化学式写错、单位不匹配、已有知识库里明确不成立的机制。这轮过滤不需要复杂推理主要是清掉低质量候选项。约束检查。把通过过滤的假设放到知识图谱、规则库、方程库里检查一致性。这一步的核心是“假设不能和已确认的科学规律冲突”。预测推导。从假设中推出一个或多个可以被观测检验的结果。如果推不出预测说明假设没有可检验性应该被淘汰。实验或模拟验证。把预测放到实际实验、历史数据、或者物理模拟器中检验。真实实验最可靠但成本高、周期长模拟器成本低但保真度需要自己评估。失败回传。如果预测和验证结果不符系统要把失败信息记录下来并作为下一轮生成时的约束避免生成同一个错误假设。没有失败回传的循环本质上只是一个生成器套壳。真正让循环有价值的是每一轮都在“减少候选空间”而且减少的原因是可追踪的。3.3 循环应该在什么粒度上运行不是循环次数越多越好。循环绕太多轮一方面成本上升另一方面会产生“过拟合现象”的风险。系统为了强行解释当前观察不断修正假设最后可能修出一个极其复杂、只在当前数据集上成立的解释。我一般建议按两种粒度来控制。第一种是“单现象多候选”。对同一个现象先生成5到10个候选假设然后并行做约束检查和预测推导最后排序。这个粒度一般循环1到3轮就够了目的是找出最可能的解释。第二种是“多现象迭代”。系统面向一个开放问题不断接收新实验数据不断调整已有假设。这种循环更接近科研过程但需要额外的记忆模块让系统能记住过去排除过的解释和对应的实验证据。这两种粒度不要混在一起。如果系统一边做候选比较一边又对同一现象反复生成新假设日志很快会乱掉最后无法判断哪些假设是基于证据哪些只是模型在语言空间里打转。4. 工程化设计给假设生成系统接一个“接地层”4.1 模块划分如果要从零搭一个能体现Abduction Loop和Representational Grounding的最小系统我不会把全部逻辑塞进一个大模型调用里。我更倾向于把系统拆成六个模块每个模块负责一个单一职责。Loop Controller编排整个推理循环记录每条假设的来源、检查结果、验证结果和状态。这个模块是整个系统的骨架。它决定什么时候生成、什么时候检查、什么时候终止。Hypothesis Generator负责产出候选假设。可以是LLM也可以是程序化生成器甚至可以是规则模板。它的任务不是判断对错而是提供多样化的候选。Grounding Layer这是最关键的模块。它对外接入结构化数据源、知识图谱、物理模拟器、单位换算库、约束规则库对内向其他模块提供“这个假设是否与已知世界一致”的判断。接地层越强假设越不会飘。Prediction Generator把一个假设转成具体的、可观测的预测。这个模块要求较高因为不是所有描述都能转成预测。如果转不出来说明假设本身不够具体。Experiment Planner基于预测设计判别性实验。设计实验时要考虑成本、可操作性和判别力。判别力的意思是这个实验能区分当前假设和竞争假设而不是只能验证某一个。Memory Store保存所有候选假设、检查结果、实验记录、失败原因和最终结论。这个模块决定系统能否从历史中学习也决定日志是否可审计。4.2 一个最小原型的分步实现下面这个代码结构展示的是核心循环的伪代码重点在流程不在具体实现。你落地时可以换成实际的数据源和模型。# 伪代码代表实现思路 def abduction_loop(observation, max_rounds3): rejected [] track [] best_hypothesis None for round_id in range(max_rounds): # 1. 生成候选避免重复 candidates generator.suggest( observation, rejectedrejected ) grounded [] for h in candidates: # 2. 接地层检查 if not grounding_layer.check(h): track.append((round_id, h, rejected_by_grounding)) continue # 3. 预测推导 predictions predictor.derive_observations(h, observation) if not predictions: track.append((round_id, h, rejected_unfalsifiable)) continue grounded.append((h, predictions)) if not grounded: break # 4. 排序选出最优假设 best_hypothesis, best_predictions rank(grounded) # 5. 设计判别性实验 experiment planner.design_discriminative_experiment( best_hypothesis, competitors[h for h, _ in grounded if h ! best_hypothesis] ) # 6. 运行实验或模拟 outcome lab.run(experiment) track.append((round_id, best_hypothesis, outcome)) # 7. 根据结果决定继续或终止 if outcome.supports(best_hypothesis): return best_hypothesis, track rejected.append(best_hypothesis) return best_hypothesis, track这段伪代码里最值得注意的参数是rejected。每一轮被验证否定的假设都会进入下一轮的生成约束这样循环才不会原地打转。很多系统的问题恰恰出在这里模型每一轮都生成同样的错误假设因为系统没有把上一轮的失败结果回传给生成器。Grounding Layer内部可以接很多东西。常见做法包括检查化学式是否合法、原子是否守恒。检查物理单位是否一致。查询知识图谱确认概念关系。调用物理模拟器跑一遍基本数值。对照历史实验数据库查看近似条件下是否曾出现矛盾结论。不要指望一个模块解决所有接地问题。接地层应该设计成可插拔的不同领域挂不同检查器。4.3 单任务验证和批量化落地时先跑单条任务不要一上来就批量。单条任务要确认的只有三件事循环能正常启动并结束。日志里每轮的状态清晰可读。接地层能正确返回“通过”或“拒绝”。确认这三件事之后再扩展到多条输入。批量时需要额外考虑这些点每条输入必须有独立ID日志按ID归档。输出目录要有统一命名建议用时间戳加输入ID。失败任务要有重试机制但重试不要无限次最多2到3次。如果一条任务跑挂不能影响整个批次。批量任务的坑往往不在模型而在文件命名、路径、并发和日志输出。不要小看这些工程细节它们在假设生成场景里同样重要。注意如果只是学习验证默认配置够用如果要支撑科研流程一定要把接地层的数据源版本和验证结果一并记录。没有版本记录的假设生成后面很难复盘。5. 如何判断一个假设“接地了”5.1 五条朴素判断标准假设有没有接地不能靠感觉要靠一组可操作的标准。我在项目里常用这五条可检验性。假设必须能推出一个或多个可以被观察、测量或实验的预测。如果一个假设无法推导出任何可区分的结果那它就不具备科学假设的基本资格。与已知约束一致。假设不能和已经验证过的科学规律冲突。比如你生成一个化学反应路径就不能违反质量守恒和能量守恒你生成一个物理模型就不能在低速近似下出现超光速信号。稳定性。对同一个现象多次运行循环后核心解释结构应该保持一致。如果每次运行都得到完全不同的解释说明候选生成太发散或者接地层的约束不够强。新颖性。假设不能只是对已有数据的重新描述。它应该提供一些超出当前数据的可检验内容。换句话说好假设会让你产生“那就照这个预测做个实验看看”的冲动。最小惊讶。在有多个候选解释时优先选择对已有知识改动最小的那个。这个原则有点像奥卡姆剃刀但它更强调“不要随意添加新的机制实体”。5.2 怎么把这些标准变成系统可计算的检查不能只把标准写成需求文档要把它变成检查函数。我建议用一张表来定义每类检查的自动实现方式和输出。判断标准自动检查方式输出常见误判可检验性Prediction Generator能否返回至少一个具体观测项布尔值或空列表把“可以想象实验”当成“能推出明确预测”与已知约束一致规则库、符号计算、知识图谱查询布尔值加冲突原因只做文本相似度匹配漏掉逻辑矛盾稳定性重复运行N次比较候选的核心结构结构相似度分数只看文字表面是否相似忽略机制差异新颖性与已有假设库、文献关键词对比新颖度分数把“没检索到”当成“真的新”最小惊讶统计候选假设中新增实体和新增关系数量数值排序用简洁性代替真实性把过于简单的假设排在前面这里的“接地”不是单向打分。一个假设可能在已知约束上通过但在可检验性上失败。这时系统应该明确记录失败原因而不是给出一个模糊的综合分。因为失败原因决定了下一轮生成器怎么修正。5.3 不要让接地检查变成“文本相似度匹配”这是我在实际项目里反复踩到的坑。很多人把“接地”理解成“给模型加一个知识库生成后做语义相似度判断”。结果就是一个化学式写错的假设因为语义上和正确答案很接近被判为通过。文本相似度匹配只能用来做初筛不能用来做接地校验。原因很简单科学假设需要的是世界层面的约束不是语言层面的相似。化学式是否合法、单位是否一致、方程是否可解、机制是否符合守恒这些必须用结构化的规则或仿真工具来检查。如果真的只能用语言模型做检查至少要让模型输出“推理依据”不是只输出“是否符合”。然后由人工抽查依据是否可靠。凡是关键检查环节没有明确依据的就不要纳入最终判断。6. 没有身体的AI到底能不能做好溯因假设生成6.1 能做到什么不能做到什么先给结论没有身体的AI能做假设生成的辅助工作但无法独立完成真正可靠的科学发现。它能做好的事情包括快速生成多组候选机制。组合不同文献中的概念。筛选出明显违反已知约束的解释。辅助设计判别性实验。整理和归纳已有实验结果。这些工作可以大量节省研究人员的时间尤其是面对搜索空间很大的开放问题时。它无法独立做到的事情包括在没有反馈信号时判断哪个机制真实成立。在实验数据缺失时保证因果方向正确。处理从未在数据里出现过、也无法用已有规律推出的事件。应对实验环境中的隐性变量。这些限制不是因为它“不够聪明”而是因为它缺少身体带来的反馈回路。没有真实世界或者高保真模拟器反馈系统就没有办法把“可能性”收敛到“现实性”。6.2 常见坑点和排查顺序如果你已经在做类似的系统可能会遇到下面这些现象高置信幻觉。模型生成的假设读起来很专业推理链也完整但第一轮检查就发现化学式不成立。这说明生成器太自信但接地层有效。遇到这种情况不要先急着换大模型而是确认接地层是否覆盖了所有关键约束。接地层污染。假设本身没问题但接地层使用的数据库里有错误数据导致正确的假设被误杀。排查方法很简单把被拒绝的假设人工检查一遍。如果发现大量误杀优先查知识库质量而不是改生成参数。循环漂移。初始要解释的是现象A循环跑了五轮之后系统开始解释一个和现象A很接近但不同的现象B。这种问题通常是因为现象定义没有在每轮循环里被显式传递给生成器。每轮都要把原始现象重新包装进提示词或输入向量不能只让生成器基于上一轮输出继续写。反馈延迟。真实实验周期很长系统在等实验结果时陷入空转。这时候应该让循环处于等待状态不要反复生成新假设否则会产生大量无意义候选。复现问题。同一现象在A环境跑出好的假设在B环境跑不出来。多数原因是接地层依赖的数据源或规则库版本不一致。建议把接地层的数据快照保存下来和实验结果一起归档。如果系统出现问题我建议按这个顺序排查先看输入现象和日志确认循环是否每轮都在处理同一个现象。再看被拒假设的原因判断是生成器问题还是接地层问题。然后检查接地层的数据源和规则库是否正常包括版本、接口、权限。最后再调生成参数不要一上来就调温度或随机种子。6.3 落地建议从实际项目角度我会建议先从封闭领域开始。比如化学合成条件优化、设备故障诊断、材料参数推荐。这些领域有明确的物理约束和验证方法接地层相对容易做。开放领域比如“为什么某个社会现象会持续出现”解释空间太大接地很难定义不建议一开始就做。在系统架构上把LLM当生成器不要让LLM同时当裁判。生成器负责发散接地层负责收敛二者职责分离。如果让模型自己给自己打分很容易把“语气自信”当成“科学正确”。还有一点非常关键每一次循环都要记录“为什么排除”而不是只记录最终留下的假设。这些排除记录是系统最重要的知识资产。它们让下一轮生成变得更聪明也让开发者能跳进日志里复盘系统的判断过程。最后说回标题里的问题。没有身体的AI确实很难直接完成Abduction。但只要我们在系统外部补上可计算的约束、模拟器、实验反馈和失败记忆它就能在一个受限范围内完成有效的hypothesis generation。这个补上去的东西才是真正让“表征被接地”的关键。别指望模型自己长出身体更别指望一次调用就能得到可靠科学结论。把循环搭好把接地层做扎实系统才能真正从“会讲故事”变成“能帮忙做研究”。