放世界多智能體環(huán)境中的自主數(shù)學(xué)發(fā)現(xiàn):從假設(shè)到知識(shí)沉淀的完整閉環(huán))
把小龍蝦、愛(ài)馬仕都“接入多智能體系統(tǒng)”居然能成為熱詞說(shuō)明這一輪多智能體熱潮已經(jīng)進(jìn)入了萬(wàn)物皆可 Agent 的調(diào)侃期。熱鬧背后有一個(gè)問(wèn)題反而容易被忽略多智能體系統(tǒng)能不能不是“調(diào)用工具、走流程、拼提示詞”而是真正自主發(fā)現(xiàn)新知識(shí)如果再進(jìn)一步把這個(gè)場(chǎng)景放在“開(kāi)放世界”里讓 Agent 自己去提出猜想、找反例、互相批判最后沉淀出一條可復(fù)用的數(shù)學(xué)規(guī)律這件事要怎么設(shè)計(jì)這篇文章想聊的就是這個(gè)開(kāi)放世界多智能體環(huán)境中的自主數(shù)學(xué)發(fā)現(xiàn)。我會(huì)先交代清楚什么是開(kāi)放世界多智能體環(huán)境為什么數(shù)學(xué)發(fā)現(xiàn)是很好的試驗(yàn)場(chǎng)然后給出一個(gè)可運(yùn)行的最小系統(tǒng)一個(gè)由“猜想者—驗(yàn)證者—批判者—知識(shí)庫(kù)”組成的多智能體框架跑通“自主發(fā)現(xiàn)一條數(shù)論小規(guī)律”的完整閉環(huán)。讀完以后你可以直接拿去改造成自己的實(shí)驗(yàn)。1. 這篇文章真正要解決的問(wèn)題很多開(kāi)發(fā)者學(xué)多智能體學(xué)到的其實(shí)是“多 Agent 編排”把任務(wù)拆給幾個(gè) Agent讓他們分別調(diào)用工具、寫(xiě)代碼、匯總結(jié)果。這類系統(tǒng)的知識(shí)從哪來(lái)還是人來(lái)定Agent 只是在執(zhí)行。它的問(wèn)題在于如果目標(biāo)不是“完成一個(gè)已知任務(wù)”而是“發(fā)現(xiàn)一個(gè)還不知道答案的問(wèn)題”你怎么把任務(wù)描述給 Agent這就是自主數(shù)學(xué)發(fā)現(xiàn)的特殊之處。數(shù)學(xué)發(fā)現(xiàn)是一個(gè)高度開(kāi)放的問(wèn)題。公理是明確的但推理路徑是無(wú)限的。一個(gè)結(jié)論是不是成立不取決于某個(gè)人說(shuō)了算而在于能不能被嚴(yán)格驗(yàn)證。如果用多智能體模擬一個(gè)“科學(xué)社區(qū)”有人負(fù)責(zé)大膽提出猜想有人負(fù)責(zé)找反例有人負(fù)責(zé)檢查邊界條件最后達(dá)成共識(shí)的結(jié)論沉淀進(jìn)知識(shí)庫(kù)——這就比單純的任務(wù)編排往前多走了一步系統(tǒng)開(kāi)始產(chǎn)生自己的知識(shí)。本文要解決的問(wèn)題有三個(gè)開(kāi)放世界多智能體環(huán)境到底是什么和平時(shí)說(shuō)的“聊天 Agent 組隊(duì)干活”有什么區(qū)別。在多智能體系統(tǒng)里設(shè)計(jì)“自主數(shù)學(xué)發(fā)現(xiàn)”要拆成哪些角色、哪些交互模式。用 Python 寫(xiě)一個(gè)最小實(shí)現(xiàn)讓讀者真實(shí)跑通一條“假設(shè)—驗(yàn)證—批判—入庫(kù)”的完整鏈路。2. 基礎(chǔ)概念與核心原理2.1 什么是開(kāi)放世界多智能體環(huán)境“開(kāi)放世界”這個(gè)詞來(lái)自游戲但用在 AI 環(huán)境里指的是環(huán)境狀態(tài)不會(huì)一次性給全規(guī)則允許探索出新玩法任務(wù)不是固定清單世界不會(huì)因?yàn)?Agent 不知道某件事就不存在那塊內(nèi)容。多智能體環(huán)境就是多個(gè)獨(dú)立決策主體共享同一個(gè)環(huán)境互相通信共同影響環(huán)境狀態(tài)。把兩者結(jié)合開(kāi)放世界多智能體環(huán)境就有幾個(gè)關(guān)鍵特征局部可觀測(cè)每個(gè) Agent 只能看到環(huán)境的一部分需要靠通信補(bǔ)齊信息。動(dòng)態(tài)演化環(huán)境不是靜態(tài)題庫(kù)Agent 的行為會(huì)改變環(huán)境狀態(tài)。任務(wù)不可窮舉不存在一個(gè)預(yù)先標(biāo)注好的“所有任務(wù)集合”。知識(shí)可以涌現(xiàn)Agent 通過(guò)交互發(fā)現(xiàn)的新結(jié)論可能超出設(shè)計(jì)者預(yù)先枚舉的范圍。數(shù)學(xué)符號(hào)世界恰好符合這些特征。公理和推理規(guī)則是確定的但定理空間是無(wú)限的。對(duì) Agent 來(lái)說(shuō)它看到的不是“已知的所有數(shù)學(xué)事實(shí)”而是自己接到的消息、自己算過(guò)的結(jié)果、自己驗(yàn)證過(guò)的斷言。它必須自己判斷往哪里探索。2.2 為什么數(shù)學(xué)發(fā)現(xiàn)適合做“開(kāi)放世界”測(cè)試床數(shù)學(xué)發(fā)現(xiàn)相比其他開(kāi)放世界任務(wù)有一個(gè)無(wú)可替代的優(yōu)勢(shì)驗(yàn)證結(jié)果可判定。在游戲里一個(gè) Agent 的行為“好不好”很依賴人工設(shè)計(jì)的獎(jiǎng)勵(lì)函數(shù)在文本生成里一個(gè)結(jié)論“對(duì)不對(duì)”往往要靠另一個(gè)大模型來(lái)打分。但在數(shù)學(xué)環(huán)境里只要你把性質(zhì)定義清楚計(jì)算程序就能嚴(yán)格判斷一個(gè)反例是否成立。這意味著多智能體的“協(xié)作質(zhì)量”可以用客觀標(biāo)準(zhǔn)衡量。系統(tǒng)不會(huì)出現(xiàn)“看起來(lái)很合理但實(shí)際是幻覺(jué)”的結(jié)論。如果一個(gè) Agent 提出了一個(gè)錯(cuò)誤猜想另一個(gè) Agent 找到了反例這個(gè)沖突是清晰可仲裁的。所以數(shù)學(xué)發(fā)現(xiàn)既保留了開(kāi)放世界的探索復(fù)雜度又避免了結(jié)果評(píng)價(jià)的模糊性。它非常適合用來(lái)研究多智能體的知識(shí)涌現(xiàn)機(jī)制。2.3 常見(jiàn)誤區(qū)自主數(shù)學(xué)發(fā)現(xiàn)不等于“會(huì)做題”這里一定要先說(shuō)清楚。文章講的“自主數(shù)學(xué)發(fā)現(xiàn)”不是讓 Agent 做一道數(shù)學(xué)題。做題是給定條件和問(wèn)題求一個(gè)解發(fā)現(xiàn)是給定公理和探索工具讓系統(tǒng)自己找到值得研究的問(wèn)題并最終形成結(jié)論。一個(gè)只會(huì)做“雞兔同籠”的 Agent不會(huì)主動(dòng)去思考“有沒(méi)有一個(gè)數(shù)它的平方減 1 總被 8 整除”。自主發(fā)現(xiàn)要求系統(tǒng)具備提出假設(shè)的能力然后通過(guò)批判性交互過(guò)濾掉錯(cuò)誤假設(shè)最終留下可復(fù)用的知識(shí)。這個(gè)能力門檻比“解題”高得多。3. 多智能體交互模式與角色設(shè)計(jì)3.1 多智能體的四種交互模式當(dāng)前討論多智能體系統(tǒng)時(shí)經(jīng)常提到四種交互模式。這四種模式不是唯一標(biāo)準(zhǔn)但在設(shè)計(jì)時(shí)很有參考價(jià)值交互模式核心特征典型場(chǎng)景在數(shù)學(xué)發(fā)現(xiàn)中的體現(xiàn)協(xié)作模式多個(gè) Agent 朝同一個(gè)目標(biāo)努力共享中間結(jié)果多智能體共同完成一次代碼遷移多個(gè) Agent 合作驗(yàn)證同一個(gè)猜想的邊界競(jìng)爭(zhēng)模式Agent 目標(biāo)互相沖突結(jié)果取決于對(duì)抗博弈對(duì)抗、攻防演練反駁者與猜想者對(duì)抗試圖找出反例協(xié)商模式Agent 通過(guò)交換條件達(dá)成一致多智能體資源分配猜想者、驗(yàn)證者、批判者對(duì)結(jié)論達(dá)成共識(shí)后入庫(kù)共存模式目標(biāo)互不干擾共享環(huán)境但各做各的開(kāi)放世界中的多個(gè)獨(dú)立 NPC多個(gè)猜想者各自獨(dú)立探索不同數(shù)域在自主數(shù)學(xué)發(fā)現(xiàn)場(chǎng)景里這四種模式會(huì)同時(shí)出現(xiàn)。猜想者和驗(yàn)證者之間是協(xié)作關(guān)系反駁者和猜想者之間是競(jìng)爭(zhēng)關(guān)系結(jié)論是否可沉淀需要協(xié)商而多個(gè)猜想者之間完全可以互不干擾地共存。3.2 數(shù)學(xué)發(fā)現(xiàn)場(chǎng)景下的角色映射一個(gè)最小可用的系統(tǒng)至少要包含這幾個(gè)角色角色對(duì)應(yīng)科學(xué)社區(qū)角色核心職責(zé)猜想者研究員提出新的數(shù)學(xué)假設(shè)驗(yàn)證者實(shí)驗(yàn)員在小范圍數(shù)值空間內(nèi)驗(yàn)證假設(shè)批判者審稿人檢查邊界條件、特殊值、驗(yàn)證范圍是否充分知識(shí)庫(kù)期刊數(shù)據(jù)庫(kù)只保存通過(guò)驗(yàn)證和批判的結(jié)論系統(tǒng)里的核心不是某個(gè) Agent 的智能而是角色之間的不對(duì)稱。猜想者不必驗(yàn)證自己提出的假設(shè)驗(yàn)證者不必為猜想的質(zhì)量負(fù)責(zé)批判者則專門用懷疑的視角審查驗(yàn)證過(guò)程。這種職責(zé)分離能有效抑制單 Agent 系統(tǒng)常見(jiàn)的“確認(rèn)偏誤”——一個(gè)人提出想法時(shí)往往會(huì)下意識(shí)忽略反例但一個(gè)專門找茬的 Agent 不會(huì)。4. 核心架構(gòu)與流程拆解4.1 總體架構(gòu)整個(gè)系統(tǒng)可以分成四層環(huán)境層定義探索邊界、數(shù)值空間、可用的數(shù)學(xué)運(yùn)算。智能體層猜想者、驗(yàn)證者、批判者等獨(dú)立進(jìn)程或線程。通信層Agent 之間通過(guò)消息傳遞假設(shè)、驗(yàn)證結(jié)果、批判意見(jiàn)。知識(shí)層記錄哪些假設(shè)被提出、被拒絕、被接受以及接受時(shí)的證據(jù)鏈。這里的通信層很關(guān)鍵。在真實(shí)分布式多智能體系統(tǒng)里通信層需要支持異步消息、消息路由、歷史追溯在本文的最小演示里用一個(gè)簡(jiǎn)單的“信箱”就能模擬。4.2 一條知識(shí)是如何被“發(fā)現(xiàn)”的用一條已知結(jié)論舉例。假設(shè)系統(tǒng)最終想發(fā)現(xiàn)的是“任意奇數(shù)的平方除以 8 余 1”。真實(shí)流程是猜想者生成假設(shè)“如果 n 是奇數(shù)那么 n 平方后取模 8余數(shù)等于 1?!彬?yàn)證者收到假設(shè)后隨機(jī)挑選 500 個(gè)奇數(shù)分別計(jì)算n^2 % 8全部等于 1沒(méi)有找到反例。批判者收到驗(yàn)證通過(guò)的結(jié)果后檢查特殊邊界n1、n3、n999以及一個(gè)很大的奇數(shù)。仍然沒(méi)有反例。知識(shí)庫(kù)接受該結(jié)論附帶驗(yàn)證范圍和批判日志完成沉淀。這只是一條知識(shí)的宏流程。把它放大到整個(gè)系統(tǒng)每輪會(huì)有多個(gè)猜想者提出各種假設(shè)有的因?yàn)轵?yàn)證者發(fā)現(xiàn)反例被拒絕有的通過(guò)驗(yàn)證但被批判者發(fā)現(xiàn)邊界漏洞只有少數(shù)能走到入庫(kù)環(huán)節(jié)。這個(gè)過(guò)程模擬的正是科學(xué)社區(qū)里“大膽假設(shè)、小心求證”的基本方法。4.3 為什么不能只用一個(gè) Agent 做這件事單 Agent 也能生成假設(shè)、驗(yàn)證假設(shè)、寫(xiě)結(jié)論。但它在數(shù)學(xué)發(fā)現(xiàn)上有一個(gè)致命弱點(diǎn)缺少獨(dú)立性。如果同一個(gè) Agent 既提出假設(shè)又負(fù)責(zé)驗(yàn)證那么驗(yàn)證策略會(huì)不自覺(jué)地偏向“確認(rèn)假設(shè)成立”。這不是模型有主觀惡意而是單一角色很難同時(shí)維持“創(chuàng)新”和“懷疑”兩種認(rèn)知狀態(tài)。多智能體的價(jià)值不在于“人多力量大”而在于通過(guò)結(jié)構(gòu)化的數(shù)據(jù)隔離制造認(rèn)知多樣性。驗(yàn)證者不關(guān)心假設(shè)是誰(shuí)提出來(lái)的批判者不知道猜想者之前哪些假設(shè)被拒絕過(guò)。信息的不對(duì)稱恰好成為系統(tǒng)自我糾錯(cuò)的基礎(chǔ)。5. 環(huán)境準(zhǔn)備與前置條件本文的代碼是教學(xué)簡(jiǎn)化版不依賴任何重量級(jí)框架。建議環(huán)境如下Python 3.9 及以上版本版本請(qǐng)以實(shí)際可用為準(zhǔn)。項(xiàng)目依賴僅需標(biāo)準(zhǔn)庫(kù)不需要額外的第三方包。操作系統(tǒng)Windows、macOS、Linux 均可。項(xiàng)目目錄建議如下math-discovery/ ├── experiment.py └── README.md如果你只想先跑通流程新建一個(gè)experiment.py文件把下面章節(jié)的代碼復(fù)制進(jìn)去即可運(yùn)行。本文代碼模擬的是“受限環(huán)境中的數(shù)值規(guī)律發(fā)現(xiàn)”不涉及形式化定理證明。任何通過(guò)驗(yàn)證的結(jié)論都只是“在采樣空間內(nèi)成立”真正的數(shù)學(xué)證明需要借助 Lean、Coq 或人工證明這一點(diǎn)在總結(jié)部分會(huì)再次強(qiáng)調(diào)。6. 完整示例與代碼實(shí)現(xiàn)6.1 環(huán)境與消息定義先定義基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)消息、知識(shí)庫(kù)、環(huán)境。消息是 Agent 之間唯一的信息載體知識(shí)庫(kù)負(fù)責(zé)沉淀結(jié)論環(huán)境負(fù)責(zé)提供數(shù)值采樣和驗(yàn)算功能。# 文件路徑math-discovery/experiment.py import random from dataclasses import dataclass, field from typing import Callable, Optional dataclass class Message: sender: str receiver: str msg_type: str # hypothesis / verify_result / criticize_result / accepted content: dict dataclass class KnowledgeBase: facts: list field(default_factorylist) def add(self, fact: dict) - None: self.facts.append(fact) def __len__(self) - int: return len(self.facts)環(huán)境提供了兩種采樣方法sample_values隨機(jī)生成普通測(cè)試樣本。special_values生成邊界樣本包括 0、1、2、大質(zhì)數(shù)等。class MathEnvironment: def __init__(self, max_n: int 100000): self.max_n max_n def sample_values(self, size: int 500) - list: return [random.randint(1, self.max_n) for _ in range(size)] def special_values(self) - list: candidates [0, 1, 2, 3, 4, 7, 8, 13, 997, 10007, self.max_n] return list(set(candidates))6.2 假設(shè)生成器與猜想者假設(shè)生成器從參數(shù)模板中隨機(jī)組合生成候選數(shù)學(xué)斷言。這樣設(shè)計(jì)是為了模擬“提出新想法”的過(guò)程系統(tǒng)預(yù)先定義了可以探索的數(shù)學(xué)結(jié)構(gòu)但具體結(jié)論是隨機(jī)組合出來(lái)的設(shè)計(jì)者也不知道哪一條能成立。def generate_hypothesis(rng: random.Random) - dict: power rng.choice([1, 2, 3]) mod rng.choice([2, 3, 4, 5, 7, 8, 9, 12, 16]) remainder rng.randint(0, mod - 1) constraint_type rng.choice([all, odd, even]) if constraint_type all: constraint_desc 所有整數(shù) constraint lambda n: True elif constraint_type odd: constraint_desc 奇數(shù) constraint lambda n: n % 2 1 else: constraint_desc 偶數(shù) constraint lambda n: n % 2 0 def func(n: int) - bool: if not constraint(n): return True return pow(n, power, mod) remainder return { description: f對(duì)于{constraint_desc} nn^{power} % {mod} {remainder}, func: func, constraint: constraint, power: power, mod: mod, remainder: remainder, }猜想者 Agent 的任務(wù)就是生成候選假設(shè)并廣播出去。class HypothesisAgent: def __init__(self, name: str, rng: random.Random): self.name name self.rng rng def propose(self) - Message: hypothesis generate_hypothesis(self.rng) return Message( senderself.name, receiver*, msg_typehypothesis, contenthypothesis, )6.3 驗(yàn)證者與批判者驗(yàn)證者負(fù)責(zé)找反例。它對(duì)假設(shè)進(jìn)行獨(dú)立驗(yàn)證如果樣本空間內(nèi)存在反例直接返回拒絕結(jié)果。class VerifierAgent: def __init__(self, name: str, env: MathEnvironment): self.name name self.env env def verify(self, hypothesis: dict, sample_size: int 300) - Message: samples self.env.sample_values(sample_size) for n in samples: if not hypothesis[func](n): return Message( senderself.name, receiver*, msg_typeverify_result, content{ hypothesis: hypothesis, passed: False, counterexample: n, }, ) return Message( senderself.name, receiver*, msg_typeverify_result, content{ hypothesis: hypothesis, passed: True, counterexample: None, }, )批判者負(fù)責(zé)做第二輪審查。它不重復(fù)驗(yàn)證者的隨機(jī)采樣而是檢查邊界特殊值并增加一個(gè)“符號(hào)結(jié)構(gòu)抽查”例如檢查是否存在極端特殊情況。class CriticAgent: def __init__(self, name: str, env: MathEnvironment): self.name name self.env env def criticize(self, hypothesis: dict) - Message: specials self.env.special_values() for n in specials: if not hypothesis[func](n): return Message( senderself.name, receiver*, msg_typecriticize_result, content{ hypothesis: hypothesis, passed: False, reason: f邊界反例 n{n}, }, ) return Message( senderself.name, receiver*, msg_typecriticize_result, content{ hypothesis: hypothesis, passed: True, reason: 邊界與特殊值檢查通過(guò), }, )這里還需要一個(gè)簡(jiǎn)單的消息分發(fā)機(jī)制。由于是演示代碼直接用一個(gè)列表模擬全局消息總線。class MessageBus: def __init__(self): self.messages [] def publish(self, message: Message) - None: self.messages.append(message) def consume(self) - list: messages self.messages self.messages [] return messages6.4 主流程多智能體協(xié)作發(fā)現(xiàn)主流程把整個(gè)系統(tǒng)串起來(lái)。設(shè)置固定隨機(jī)種子保證可復(fù)現(xiàn)運(yùn)行多輪發(fā)現(xiàn)循環(huán)最后輸出知識(shí)庫(kù)。def main(): random.seed(42) env MathEnvironment(max_n100000) bus MessageBus() kb KnowledgeBase() rng random.Random(42) proposer HypothesisAgent(proposer-1, rng) verifier VerifierAgent(verifier-1, env) critic CriticAgent(critic-1, env) max_rounds 30 for round_idx in range(max_rounds): # 1. 猜想者提出假設(shè) bus.publish(proposer.propose()) # 2. 驗(yàn)證者處理假設(shè) for message in bus.consume(): if message.msg_type hypothesis: hypothesis message.content verify_msg verifier.verify(hypothesis) bus.publish(verify_msg) if not verify_msg.content[passed]: print(f[Round {round_idx:02d}] 假設(shè)被拒絕: f{hypothesis[description]} | 反例: {verify_msg.content[counterexample]}) else: print(f[Round {round_idx:02d}] 驗(yàn)證通過(guò): {hypothesis[description]}) # 3. 批判者審查通過(guò)驗(yàn)證的假設(shè) for message in bus.consume(): if message.msg_type verify_result and message.content[passed]: criticize_msg critic.criticize(message.content[hypothesis]) bus.publish(criticize_msg) # 4. 入庫(kù) for message in bus.consume(): if message.msg_type criticize_result: if message.content[passed]: hypothesis message.content[hypothesis] fact { description: hypothesis[description], verifier: verifier-1, critic: critic-1, round: round_idx, } kb.add(fact) print(f[Round {round_idx:02d}] ★ 新知識(shí)入庫(kù): {fact[description]}) else: hypothesis message.content[hypothesis] print(f[Round {round_idx:02d}] 批判者拒絕: {hypothesis[description]} | 原因: {message.content[reason]}) print(\n 最終知識(shí)庫(kù) ) for idx, fact in enumerate(kb.facts, start1): print(f{idx}. {fact[description]}) print(f共發(fā)現(xiàn) {len(kb.facts)} 條被接受的知識(shí))7. 運(yùn)行結(jié)果與效果驗(yàn)證運(yùn)行代碼python experiment.py由于代碼中固定了隨機(jī)種子random.seed(42)和相同的rng理論上每次運(yùn)行會(huì)得到相同的結(jié)論序列。不過(guò)不同 Python 版本的隨機(jī)數(shù)算法可能略有差異更穩(wěn)妥的判斷方式是看日志結(jié)構(gòu)。預(yù)期運(yùn)行后會(huì)看到類似這樣的輸出[Round 00] 假設(shè)被拒絕: 對(duì)于奇數(shù) nn^1 % 8 3 | 反例: 5 [Round 01] 假設(shè)被拒絕: 對(duì)于所有整數(shù) nn^2 % 8 4 | 反例: 1 [Round 02] 驗(yàn)證通過(guò): 對(duì)于奇數(shù) nn^2 % 8 1 [Round 02] ★ 新知識(shí)入庫(kù): 對(duì)于奇數(shù) nn^2 % 8 1 ... 最終知識(shí)庫(kù) 1. 對(duì)于奇數(shù) nn^2 % 8 1 共發(fā)現(xiàn) 1 條被接受的知識(shí)需要強(qiáng)調(diào)具體的被接受結(jié)論數(shù)量取決于隨機(jī)種子和假設(shè)空間配置。演示代碼中人為配置了mod8, power2, remainder1這個(gè)組合它有概率被隨機(jī)生成出來(lái)。如果運(yùn)氣不好一次運(yùn)行可能一條結(jié)論也發(fā)現(xiàn)不了——這在真實(shí)的自主發(fā)現(xiàn)系統(tǒng)里是完全正常的。驗(yàn)證成功與否看兩個(gè)對(duì)照組知識(shí)庫(kù)非空說(shuō)明系統(tǒng)成功完成了“提出假設(shè)—驗(yàn)證—批判—入庫(kù)”閉環(huán)。日志中同時(shí)包含“被拒絕”和“被接受”說(shuō)明系統(tǒng)不是只會(huì)全盤(pán)接受而是真的有批判機(jī)制。如果運(yùn)行報(bào)錯(cuò)先檢查代碼是否有復(fù)制遺漏再確認(rèn) Python 版本最后看括號(hào)、縮進(jìn)是否完整。8. 常見(jiàn)問(wèn)題與排查思路問(wèn)題現(xiàn)象可能原因排查方式解決方案運(yùn)行后一條知識(shí)都沒(méi)入庫(kù)隨機(jī)種子和假設(shè)空間沒(méi)有組合出真命題查看日志中是否有“驗(yàn)證通過(guò)”和“批判者拒絕”調(diào)整generate_hypothesis中的power、mod、remainder候選集合或增加輪次某些已被驗(yàn)證的假設(shè)被批判者拒絕驗(yàn)證者只做了隨機(jī)采樣遺漏邊界特殊值查看拒絕原因是否為“邊界反例”這是設(shè)計(jì)預(yù)期的糾錯(cuò)行為說(shuō)明批判機(jī)制生效不同機(jī)器運(yùn)行結(jié)果不一致Python 隨機(jī)數(shù)算法版本差異對(duì)比日志中第一條消息如果追求嚴(yán)格一致可將隨機(jī)種子改為自定義偽隨機(jī)算法想要探索更大的數(shù)學(xué)空間當(dāng)前模板只有乘方和取模擴(kuò)展假設(shè)生成器增加多項(xiàng)式、級(jí)數(shù)、同余方程組等生成模板擔(dān)心 Agent 會(huì)執(zhí)行危險(xiǎn)操作當(dāng)前示例中 Agent 只操作數(shù)值檢查是否調(diào)用了系統(tǒng)命令或外部資源在真實(shí)系統(tǒng)中Agent 的計(jì)算任務(wù)應(yīng)放入沙箱執(zhí)行9. 最佳實(shí)踐與工程建議9.1 職責(zé)分離是系統(tǒng)糾錯(cuò)的前提哪怕在做最小實(shí)驗(yàn)也盡量保證“提出假設(shè)”和“驗(yàn)證假設(shè)”由不同對(duì)象完成。自主發(fā)現(xiàn)系統(tǒng)的設(shè)計(jì)核心不是讓每個(gè) Agent 更聰明而是讓錯(cuò)誤的結(jié)論無(wú)法通過(guò)多環(huán)節(jié)審查。9.2 每一條知識(shí)都要有證據(jù)鏈知識(shí)庫(kù)中不應(yīng)該只存結(jié)論還要存下這條結(jié)論是誰(shuí)提出的、誰(shuí)驗(yàn)證的、驗(yàn)證范圍是什么、批判者是誰(shuí)。這樣當(dāng)后續(xù)發(fā)現(xiàn)某條知識(shí)與新結(jié)論沖突時(shí)可以回溯整個(gè)過(guò)程定位是哪一步出了問(wèn)題。9.3 隨機(jī)性是可復(fù)現(xiàn)性的敵人使用固定隨機(jī)種子、記錄 Agent 收到的全部消息是保證實(shí)驗(yàn)可復(fù)現(xiàn)的基本功。在更復(fù)雜的系統(tǒng)里建議把所有 Agent 的輸入輸出以事件流形式落盤(pán)而不是只打印最終結(jié)論。9.4 明確“數(shù)值驗(yàn)證”和“數(shù)學(xué)證明”的邊界本文演示的系統(tǒng)只能做數(shù)值規(guī)律發(fā)現(xiàn)。任何一條知識(shí)都只在采樣空間內(nèi)成立不等于數(shù)學(xué)定理。如果目標(biāo)是做真正的自主數(shù)學(xué)發(fā)現(xiàn)下一步必須接入形式化驗(yàn)證工具比如 Lean、Coq 或 Isabelle讓機(jī)器可讀的證明成為知識(shí)入庫(kù)的前提。9.5 安全與授權(quán)邊界如果將來(lái)把假設(shè)生成器換成大模型驅(qū)動(dòng)的 Agent務(wù)必注意大模型只能生成假設(shè)文本或代碼不能直接執(zhí)行系統(tǒng)命令。所有計(jì)算任務(wù)放沙箱執(zhí)行限制資源占用。Agent 之間的通信需要做權(quán)限隔離避免某個(gè) Agent 偽造其他 Agent 的驗(yàn)證結(jié)果。10. 總結(jié)與后續(xù)學(xué)習(xí)方向回到開(kāi)頭的問(wèn)題。多智能體系統(tǒng)如果只能編排任務(wù)、調(diào)用工具那它本質(zhì)上還是一個(gè)“自動(dòng)化流水線”當(dāng)系統(tǒng)里的 Agent 開(kāi)始提出猜想、互相反駁、獨(dú)立驗(yàn)證、最終沉淀知識(shí)時(shí)它才真正從“執(zhí)行工具”變成了“認(rèn)知系統(tǒng)”。自主數(shù)學(xué)發(fā)現(xiàn)恰好提供了一個(gè)規(guī)則清晰、驗(yàn)證嚴(yán)格、結(jié)果可觀測(cè)量化的開(kāi)放世界測(cè)試床。這篇文章寫(xiě)清楚了幾件事開(kāi)放世界多智能體環(huán)境的定義四種交互模式在數(shù)學(xué)發(fā)現(xiàn)場(chǎng)景下的角色映射以及一條知識(shí)從假設(shè)到入庫(kù)的完整鏈路。你可以基于這套最小實(shí)現(xiàn)把隨機(jī)假設(shè)生成器替換成大模型或者符號(hào)回歸算法把數(shù)值驗(yàn)證替換成定理證明器把通信層替換成真實(shí)的消息隊(duì)列逐步構(gòu)建一個(gè)更接近真實(shí)的自主科學(xué)發(fā)現(xiàn)系統(tǒng)。至于那些“把小龍蝦集成進(jìn)多智能體系統(tǒng)”的梗當(dāng)個(gè)段子聽(tīng)聽(tīng)挺好但真正值得研究的始終是這個(gè)系統(tǒng)能否產(chǎn)生它自己都沒(méi)想到過(guò)的知識(shí)。