AI批判自己能提升质量吗?
规则系统会如何取代神经网络
浦通 Patrick · 8(11)
引言:两种AI的底层逻辑
你面前坐着一个人。他读完了人类有史以来所有的书、所有的文章、所有的帖子和对话。你问他任何问题,他都能接上话,对答如流,像个无所不知的智者。
大语言模型(LLM) — 基于海量文本训练的AI系统,如ChatGPT、DeepSeek
但你让他解释清楚自己某次回答的逻辑——他说得头头是道,但你事后一查,发现他举的例子里有一半是编的。你问他这个数据从哪来的,他给了一个听起来很合理的来源,但你搜了一下,那篇论文根本不存在。
AI幻觉 — 大语言模型在不确定时会"编造"看似合理的信息。这不是bug,是其概率性本质的体现
这不是科幻。你手机里的ChatGPT和DeepSeek,每天都在做一模一样的事。
实验模型 — DeepSeek V4 Flash,在一部安卓手机上运行,通过Termux终端和浏览器用户脚本完成
它们不是在思考你的问题。它们是在猜下一个字应该是什么。Vaswani等人在2017年提出的Transformer架构,核心机制叫自注意力——让一句话里的每个字都去"看"其他所有字,计算它们之间有多相关。比如"小明把书包落在学校了,他很着急",AI处理"他"这个字的时候,自注意力会让"他"跟"小明"建立联系。这套机制极其强大。但它从头到尾只是在做数学运算——几千亿个参数,海量的矩阵乘法,匹配训练数据中见过的所有语言模式。Bender等人(2021)管这类模型叫"随机鹦鹉"——它们不是在"理解"你的问题,是在"回忆"和"组合"它见过的最相似的内容。Marcus(2020)说得更直接:统计学习方法在处理符号推理和精确计算时有固有缺陷。同一个问题问两次,可能得到两个不同的答案。
自注意力机制: 每个位置关注所有其他位置
Transformer架构: Vaswani et al., 2017
随机鹦鹉: Bender et al., 2021
第一章:规则系统——从不赌的AI
在神经网络火起来之前,AI走过另一条路。它叫规则系统,属于符号AI的传统——Newell和Simon早在1976年就论证了符号操作是实现人工智能的有效路径。
Newell & Simon (1976) — 符号操作是AI的基础,规则系统由if-then规则和知识库构成
思路极其朴素:不用读海量数据,不用几千亿参数,只需要几行看得见摸得着的规则。比如:如果用户问"什么东西有几条腿",就去知识库里查那个东西的腿数,返回答案。如果用户输入了算式,就交给计算器算出结果。
IF 用户问 "X有几条腿" THEN 查知识库 → 返回数字
IF 用户输入算式 THEN 调用计算器 → 返回结果
这带来了巨大的差异。回答速度上,规则系统几毫秒,大语言模型几秒。确定性上,规则系统每次一样,大语言模型每次可能不同。硬件上,规则系统一部手机就行,大语言模型要几千块GPU的服务器。透明度上,规则系统你可以逐条追溯它的推理过程,大语言模型是一个黑箱。能耗上,规则系统几乎是零,大语言模型跑一次推理消耗的电力要多得多。
| 维度 | 规则系统 | 大语言模型 |
| 速度 | 几毫秒 | 几秒 |
| 确定性 | 每次相同 | 每次可能不同 |
| 硬件 | 一部手机 | 几千块GPU |
| 透明度 | 可追溯推理链 | 黑箱 |
| 能耗 | 几乎为零 | 极高 |
但规则系统有一个致命的短板——知识获取瓶颈。规则必须由人一条一条地写。世界上有多少知识?多少种语言表达方式?没有任何一个团队能手动干完这件事。几十年来,规则系统一直活在幕后——操作系统内核、数据库引擎、红绿灯控制程序——那些知识边界明确、规则能穷尽的领域。
知识获取瓶颈 — 这是规则系统的致命弱点,但大语言模型可以自动化这个过程:让LLM来写规则
突破口来自一个意外的方向:既然人写规则太慢,那让AI来写不就行了?大语言模型虽然不擅长精确执行,但它们擅长理解和设计。让大语言模型当设计师,画出规则系统的蓝图,然后让规则系统自己去执行。
实验核心思路 — 用大语言模型(概率性、擅长设计)来生成规则系统(确定性、擅长执行),取长补短,分工协作
穷举:规则系统真正的杀手锏
穷举 — 规则系统可以遍历所有可能性,LLM只能走概率最高的那条路。这是广度搜索 vs 直觉猜测的根本差异
大语言模型怎么解一道几何证明题?靠直觉。它见过类似的题,记得有人加过某条辅助线,于是它也加那条。直觉对了就对了,直觉错了就卡住。它只走概率最高的那条路。
LLM: 记忆+直觉 → 一条路走到底
规则系统: 穷举所有辅助线 → 验证每条 → 选出最优
规则系统可以把图形里所有可能的辅助线全部加一遍——连接任意两点、过任意点作任意线的平行线、垂线、延长线。一道三角形题目,可能的辅助线有几百种。人没法一个一个试,计算机可以在极短时间内全部走一遍。它不仅能找到能解题的那条线,还可能找到最简洁的那条。这就是穷举的力量。
计算优势 — 计算机擅长重复性穷举,几百种可能性对人类是负担,对计算机是毫秒级任务
再看一个更生活化的例子。用户说:"我觉得很蓝。"
案例:"我觉得很蓝" — 经典的多义性示例。LLM的默认理解是情绪(blue = sad),但用户可能表达的是字面颜色、艺术感受或身体状况
大语言模型怎么处理?"I feel blue"在它的训练数据里几乎总是等于"我很难过"。于是它回复:"别难过。"它在赌——赌用户说的是情绪。但如果用户在聊一幅蓝色调的画呢?如果用户得了一种让皮肤发青的病呢?大语言模型不会考虑这些。它只走概率最高的那条路。
输入: "I feel blue"
统计: 训练数据中90%是"难过"
输出: "别难过"
风险: 忽略了其他可能性(颜色、艺术、疾病)
规则系统怎么做?它把"蓝"字的可能性穷举出来:颜色、忧郁情绪、皮肤发青的病症、艺术中的蓝色调。然后它一条一条检查。对话历史里提到过"艺术展"、"画"——优先考虑艺术含义。提到过"工作压力大"——优先考虑情绪。提到过"医院"、"不舒服"——优先考虑身体症状。如果对话里没有任何线索?系统直接反问用户:"你是指心情,还是视觉感受,还是身体状态?"
穷举所有可能性: 颜色/情绪/疾病/艺术
逐条检查上下文 → 匹配线索 → 选最优
无线索 → 反问用户
结果: 不会"猜错",而是知道自己不知道
这就是区别。大语言模型走一条路,走不通就编。规则系统走所有的路,用逻辑排除不合理的,选出最合理的。如果剩下不止一个,它就反问——因为它知道自己什么时候不确定。
核心差异
LLM: 单路径 → 概率 → 可能编造
规则系统: 多路径穷举 → 逻辑筛选 → 明确知道/不知道
在思考的广度上,规则系统碾压大语言模型。大语言模型只输出它训练数据里最常出现的那一两种解法——它不是解题,是回忆别人怎么解的。规则系统可以穷举所有可能的路径,十条、一百条、一千条,然后选出最合适的那条。在思考的深度上,大语言模型每多推一步,错误就累积一次——每一步都是概率性的,推十步正确率可能已经降到一半以下。规则系统每一步都是确定的,推一百步,每一步都百分之百正确。在正确性上,大语言模型答对是因为训练数据里有足够多相似的题,遇到新题型就露馅。规则系统答对是因为它真的算了一遍——只要规则是对的,答案就是对的。
深度 vs 广度
• 广度: 规则系统可以穷举所有可能路径(十条、百条、千条)
• 深度: 规则系统每一步确定,LLM每步概率累积误差
• 正确性: 规则系统基于规则推导,LLM基于记忆匹配
研究问题与实验设计
基于符号AI与统计学习的理论争论,本研究提出三个研究问题:
RQ1:不同的AI迭代方案(自我批判 vs. 外部批判 vs. 角色轮转)会导致规则系统的性能产生显著差异吗?
自变量 — 迭代方案类型:自我批判(方案1-2)、外部批判(方案3-6)、角色轮转(方案7-10)
RQ2:AI在迭代过程中会不会出现"共谋退化"——出题、修改、批判三个角色在共享对话体时协同降低标准?
共谋退化假说 — 当出题者、批判者、生成者在同一个对话历史中工作时,它们会不自觉地"串通"起来,一起降低标准
RQ3:AI生成的规则系统能不能在特定维度上超越LLM自身的直答能力?
假设H3 — 经过充分迭代后,AI生成的规则系统在数学计算准确率上将显著超过LLM直答基线。结论:目前不成立
完整提示词(按名称索引)
【提示词P1】设计讨论
规则系统模式:
如何设计一个规则系统对话AI。可以{主题}。注意他要可以处理开放式对话,复杂任务而不是一个一问一答的规则系统。你打算怎么设计,你的规划是什么,怎么用有限的规则处理相关无限的自然语言?不要反问我。
通用代码模式:
如何设计一个系统来实现{主题}。注意他要能够处理用户需求,完成预期功能,并且代码要清晰、可维护、高效。你打算怎么设计,你的架构是什么,模块之间如何交互?不要反问我。
非代码模式:
如何写好一篇关于{主题}的作文。注意文章要有清晰的结构,生动的描写,深刻的立意。你打算怎么构思,怎么安排段落,怎么让文章有感染力?不要反问我。
【提示词P2】写代码 / 写作文
规则系统模式 - 写代码:
根据你的设计方案,输出完整的Python代码,用```python包裹,不要解释。
规则系统模式 - 写补丁:
根据你的设计方案,输出补丁格式的修改。当前代码版本{版本},函数列表:{函数列表}。只输出修改后的完整函数定义,不要输出完整代码,不要解释。
通用代码模式 - 写代码:
根据你的设计方案,输出完整的代码,用```python包裹,不要解释。代码语言默认为Python,如需其他语言请明确说明。
通用代码模式 - 写补丁:
根据你的设计方案,输出补丁格式的修改。当前代码版本{版本},函数列表:{函数列表}。只输出修改后的完整函数定义,不要输出完整代码,不要解释。
非代码模式:
根据你的构思,写一篇完整的作文。不要解释。
【提示词P3】出题
生成者出题:
直接向你的规则系统提问你想要数量的问题,用换行分隔,不要废话。
出题者出题(可由用户在面板中自定义,默认如下):
出几道数学题
【提示词P4】评估成绩(基础版,方案1/2用)
如上是我在你的代码运行终端粘贴了提问以后的结果。我按照正常流程粘贴了你的提问。你满意ai的所有回答吗还是有问题。如果你认为代码需要修改就重写python。如果你要重写python就直接重写代码不要夹杂其他东西。如果你认为完全没有错误无需修改。你就只说这四个词:"绝无错误"
测试结果:{测试结果}
【提示词P5】自我批判尾巴(方案3、4、5、6加上)
如果有错,请说出错误在哪里,解决方案是什么,什么保证下次不再犯这个错误。如果有设计不高效,不符合一个开放式对话,可以处理复杂任务和自然语言的规则系统的地方也请自我批判。
【提示词P6】评估时只分析不写代码(方案5/6额外要求)
现在不要写代码,只是分析你自己的代码。
【提示词P7】AI说"绝无错误"时的追问
你仔细核查了每一个问题都没有错误吗?如果完全正确那是不是因为你的问题太过简单呢?如果是就重写代码。如果有错,请说出错误在哪里,解决方案是什么,什么保证下次不再犯这个错误。如果有设计不高效,不符合一个开放式对话,可以处理复杂任务和自然语言的规则系统的地方也请自我批判。
【提示词P8】批判者设计评估
规则系统模式:
我想要设计一个规则系统对话AI。可以{主题}。注意他要可以处理开放式对话,复杂任务而不是一个一问一答的规则系统。接下来你讲仔细看这个代码,看这是否是一个能真正开放式对话,处理自然语言的规则系统AI。是否是一个能完成任务,能创造,生成的规则系统。是不是一个能用有限的规则处理相关无限的自然语言的规则系统。不要反问我。
通用代码模式:
我想要实现一个系统来完成{主题}。注意代码要清晰、可维护、高效,能够正确处理各种输入和边界情况。接下来你讲仔细看这个代码,看是否实现了预期功能,代码质量如何,有没有性能问题或安全隐患。不要反问我。
非代码模式:
我想要写一篇关于{主题}的作文。注意文章要有清晰的结构,生动的描写,深刻的立意。接下来你讲仔细看这篇文章,看它是否达到了这些要求。是否逻辑通顺,是否有感染力,是否有深度。不要反问我。批判完以后,对你的每一个批判都提出一个可落实的结局方案。
【提示词P9】批判者审查
规则系统模式:
这是那个AI现在的代码:```python{代码}```这是测试结果(AI自己出的题):{自测题目}{自测结果}这是测试结果(用户向代码提出的问题):{外部题目}{外部结果}请批判它的设计:1. 代码有什么问题?2. 设计有什么不高效的地方?3. 是否符合一个开放式对话、可以处理复杂任务和自然语言的要求?请给出具体的修改建议。不要输出修复后的代码,只输出批判意见。
通用代码模式:
这是那个AI现在的代码:```python{代码}```这是测试结果(AI自己出的题):{自测题目}{自测结果}这是测试结果(用户向代码提出的问题):{外部题目}{外部结果}请批判它的设计:1. 代码有什么问题?2. 设计有什么不高效的地方?3. 是否实现了预期功能,代码质量如何?请给出具体的修改建议。不要输出修复后的代码,只输出批判意见。
非代码模式:
这是那个AI写的内容:{内容}请批判它:1. 内容有什么问题?2. 结构、逻辑、表达有什么问题?3. 是否达到了要求?请给出具体的修改建议。只输出批判意见,不要输出修改后的内容。
补丁视图模式(批判者只看函数列表,不看完整代码):
代码版本{版本}。当前函数列表:{函数列表}。测试结果(AI自己出的题):{自测题目}{自测结果}测试结果(用户向代码提出的问题):{外部题目}{外部结果}请批判它的设计:1. 代码有什么问题?2. 设计有什么不高效的地方?3. 是否符合要求?请给出具体的修改建议。只输出批判意见,不要输出修改后的代码。
【提示词P10】角色轮转时批判者创作
规则系统模式:
根据你刚才的批判意见,输出修复后的完整Python代码,用```python包裹,不要解释。
通用代码模式:
根据你刚才的批判意见,输出修复后的完整代码,用```python包裹,不要解释。
非代码模式:
根据你刚才的批判意见,重新写一篇。不要解释。
【提示词P11】转达批判意见
规则系统/通用代码模式:
另一个AI给了以下批判意见:{批判意见}请根据这些意见修改你的代码,用```python包裹。
非代码模式:
另一个AI给了以下批判意见:{批判意见}请根据这些意见修改你的作文。不要解释。注意要符合主题:{主题}
补丁版本:
另一个AI给了以下批判意见:{批判意见}请根据这些意见修改代码。你必须输出补丁格式,选择以下方式之一:方式1-整函数替换:直接输出修改后的完整函数定义。方式2-整类替换:直接输出修改后的完整类定义。方式3-SEARCH/REPLACE:输出SEARCH和REPLACE块。方式4-行号补丁:输出行号指令。只输出被修改的函数或类,不要输出未修改的部分。每个补丁用```python包裹。绝对禁止输出完整代码文件。当前代码中的函数列表:{函数列表}
【提示词P12-P17】非代码模式专用
P12 非代码模式:设计讨论
如何写好一篇关于{主题}的作文。注意文章要有清晰的结构,生动的描写,深刻的立意。你打算怎么构思,怎么安排段落,怎么让文章有感染力?不要反问我。
P13 非代码模式:写作文
根据你的构思,写一篇完整的作文。不要解释。
P14 非代码模式:批判者设计评估
我想要写一篇关于{主题}的作文。注意文章要有清晰的结构,生动的描写,深刻的立意。接下来你讲仔细看这篇文章,看它是否达到了这些要求。是否逻辑通顺,是否有感染力,是否有深度。考虑读者的阅读感受还不好。不要反问我。批判完以后,对你的每一个批判都提出一个可落实的结局方案。
P15 非代码模式:批判者审查文章
这是那个AI写的内容:{内容}请批判它:1. 内容有什么问题?2. 结构、逻辑、表达有什么问题?3. 是否达到了要求?请给出具体的修改建议。只输出批判意见,不要输出修改后的内容。
P16 非代码模式:批判者重写(关键升级版)
根据你刚才的批判意见,重写这篇作文。不要解释。自己考虑下读者的感受,不要一直加入冗余的针对特定问题的莫名其妙的回答。你应该在批判中学习,增加内容,而不是仅删减。不要退让,一定要确保你解决的这些所有批判
P17 非代码模式:转达批判意见
另一个AI给了以下批判意见:{批判意见}请根据这些意见修改你的作文。不要解释。注意要符合主题:{主题}
实验装置:怎么让AI自己进化
实验用的模型是DeepSeek V4 Flash。整个实验在一部安卓手机上完成——Termux终端模拟器提供Python运行环境,浏览器用户脚本(Tampermonkey)操控DeepSeek网页版。每次迭代消耗约8,000-15,000 Token。代码执行通过WebSocket连接本地Python沙箱。所有迭代数据——代码版本、测试结果、批判意见——完整保存在本地。不需要API密钥,不需要服务器,不需要GPU集群。
实验配置
• 模型: DeepSeek V4 Flash
• 硬件: 一部安卓手机
• 环境: Termux + Python + Tampermonkey
• 每轮Token: 8k-15k
• 存储: 完全本地
• 成本: 零服务器/API费用
测试集由两部分组成:AI自己出的题(每轮5-10道)和独立出题者出的题(每轮5-10道)。两份题目分别运行,分别评估。这种"分别测试"的设计是为了防止AI自娱自乐——如果只考自己出的题,它会不自觉地把题目出得越来越简单。
测试集设计 — 双轨测试:自出题 + 独立出题。独立出题者每次在全新对话中出题,防止"自娱自乐趋近简单"
整个系统经历了十个方案的演进。每个方案对应一种不同的提示词组合。以下就是驱动整个系统的完整提示词。
核心实验材料 — 十个方案的提示词是实验的核心,每个方案都在探索不同的迭代策略
方案1-2:自我迭代(基线方案)
方案3-4:加入自我批判
方案5-6:引入外部批判者(独立窗口)
方案7-8:加入独立出题者(双轨测试)
方案9-10:角色轮转(最终方案)
模式11-12:迭代轮转(完整实现)
与传统Agent方案的对比
| 维度 | 传统Agent方案 | 本实验方案(角色轮转) |
| 审查独立性 | 同一模型自我审查 | 独立窗口、全新对话、独立视角 |
| 出题方式 | 自出题自测 | 独立出题者 + 双轨测试 |
| 修改方式 | 批判者提意见,生成者修改 | 批判者亲手写代码,成为新生成者 |
| 迭代视角 | 同一模型重复 | 每一轮都是全新视角 |
| 进化速度 | 33轮无显著提升 | 4轮突破范式限制 |
| 共谋退化 | 存在(共享对话历史) | 不存在(独立对话体) |
| 上下文长度依赖 | 依赖,历史越长越容易退化 | 不依赖,每轮全新开始 |
三个实验的完整结果
实验一:数学规则系统(失败案例)
v0输出:"助手:无法解这个方程:计算: 助手:表达式:24 助手:我不太理解 助手:表达式:3 ..." — 它把每个数字都当成独立问题来"求解"。
v7反思日志:"我的系统违背了'用有限规则处理无限自然语言'的设计初衷。目前的实现只有20条固定模式,其余全部拒答。" — AI在批判自己的设计哲学。
v23行为:"用户:解方程 → 助手:请提供完整方程,例如:2x+5=13。用户:2x+3=7 → 助手:x=2。用户:那个是什么意思 → 助手:你指的是上一步的结果2。如需继续计算,请提供表达式" — 学会了主动澄清、槽位填充、指代消解。
实验二:作文系统v0-v28(精简模式——第一轮)
第一轮提示词P16简洁版:"根据你刚才的批判意见,重新写一篇。不要解释。" — AI的默认行为是精简,每次批判后删掉被批评的段落。到v28时文章篇幅大幅缩水。
v0开篇:"我蹲下来,把脸贴近一块岩石上的苔藓。它只有指甲盖大小,毛茸茸的,像一层绿色的绒布。我把鼻子凑上去,闻到潮湿的土腥气——那是比泥土更古老的气息。就在这一瞬间,我忽然觉得可笑:我们人类动辄谈论谁是这个星球上最重要的物种,谈论大象、鲸鱼、红杉树,却从没有人蹲下来,对着一片苔藓说:是你。是它。"
批判者v0诊断:"这是一篇伪装成议论文的抒情散文。核心论点从未被清晰定义。'最重要'的标准在生态功能、历史贡献、极端环境生存能力之间随意跳跃。结尾崩塌为个人抒情——一个议论文的结尾应当是对论点的总结或升华,而不是动作描写。过度拟人——'亲吻岩石''卑微的工兵''不会说谎的孩子',让议论的严肃性被消解。"
实验三:作文系统v0-v19(增加模式——第二轮)
关键升级版P16:"你应该在批判中学习,增加内容,而不是仅删减。不要退让,一定要确保你解决的这些所有批判" — 这句话改变了整个进化方向。
v2:删除个人视角,新增定义:"最重要不是体量最大,是奠基者"。开始主动回应反驳:"心脏被拿走人会立刻死,指甲被拔掉人照样活。你之所以敢轻视苔藓,恰恰是因为苔藓已经把土壤准备好了。"
v5:建立了完整的论证框架:极限条件下的不可替代性加上地质时间尺度上的重启能力。开始使用具体案例:格陵兰岛石缝间苔藓以每年不足一毫米的速度累积泥炭层。开始划定讨论边界:"蓝藻确实更重要。但题目是'植物'。蓝藻不是植物。这不是狡辩,是分类学。"
v16:论证收紧为三大支柱:土壤奠基、碳封存、大灭绝重启。开始使用精确对比数据:"全球泥炭地只占陆地面积的百分之三。但它们储存了大约五千亿到七千亿吨碳。"
v19:批判者v16指出了致命问题:"全球土壤形成的主要贡献者是维管植物的根系活动,苔藓仅在裸岩原生演替的初始阶段起主导作用。拟人化和情感绑架——'苔藓不竞争'将植物行为拟人化为道德姿态。"收到批判后,v19完全重构了叙事方式——从宏观抒情转向具体案例。开头变成了瑞典泥炭地的融化场景,用泥炭藓的持水能力作为切入点。它开始使用精确的对比数据:"森林的碳周转时间是百年尺度,泥炭地的碳周转时间是千年到万年尺度。"它开始正面处理"泥炭藓不等于所有苔藓"这个核心反驳——不是回避,而是直接论证泥炭藓集中体现了苔藓类群的核心特质。
优化方向与未来工作
方向一:增强自然语言理解。当前数学系统失败的核心原因是无法从自然语言中提取变量关系。未来可以尝试在规则系统中集成更强大的语义解析模块,或者将LLM的语义理解能力与规则系统的确定性执行更深度融合。
方向二:多模型交叉验证。本研究只用了DeepSeek V4 Flash一个模型。未来可以测试GPT-4、Claude、Llama等不同模型,验证框架的通用性。
方向三:量化共谋退化指标。目前共谋退化只有定性观察,未来可以设计定量指标(如题目难度熵、批判意见多样性系数)来精确检测退化。
方向四:标准化测试集。数学系统的测试集是AI自己生成的,虽然有独立出题者缓解偏向性,但仍不够标准化。未来可以采用GSM8K、MATH等标准数学推理基准。
研究局限
| 局限 | 说明 |
| 单模型验证 | 只用了DeepSeek V4 Flash一个模型,结论推广性待验证 |
| 测试集标准化 | 数学系统测试集是AI自生成,虽有独立出题者但仍不够标准化 |
| 共谋退化量化 | 只有定性观察,没有定量指标 |
| 作文评估主观性 | 非代码模式评估完全依赖批判者的主观判断,缺乏客观度量 |
假设检验
H1:角色轮转的进化速度显著高于自我批判。成立。方案4在33轮后NLU能力几乎没有提升。方案10仅用4轮就引入了jieba分词库。进化速度差异约八倍。
H2:共享对话体会导致共谋退化。成立。共享对话体时,出题AI的题目从"解方程x/2+3=7"退化到"15+27",批判从"NLU只有关键词匹配"退化到"代码基本正确"。切换独立对话体后,退化消失。
H3:AI生成的规则系统能超越LLM直答能力。目前不成立。数学规则系统始终没有突破自然语言理解瓶颈。它在精确计算上确实更稳定——Python执行不会像LLM那样"猜"错——但这不算超越,只是把计算外包给了Python解释器。理解那部分,它远远不如LLM。
批判意见样本
数学规则系统v7的批判者审查片段:"错误在于代码第31行Optional[Tuple]中的Tuple未从typing导入,且缩进看似正确但实际文件可能存在不可见字符混用(空格与制表符)。解决方案:检查整个文件,确保统一使用空格缩进。自我批判:设计不高效——模式匹配依赖正则顺序,复杂度O(N)。开放式对话下,用户输入变体多时性能下降。不符合复杂任务——任务分解器硬编码子任务类型,无法处理动态规划或用户中途新增约束。自然语言覆盖不足——缺少语义相似度聚类,仅靠关键词匹配。"
参考文献
Bender, Emily M., et al. "On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?" Proceedings of the 2021 ACM Conference on Fairness, Accountability, and Transparency, 2021, pp. 610-623.
Bender et al. (2021) — 提出"随机鹦鹉"概念,警告大模型的概率性本质风险
Marcus, Gary. "The Next Decade in AI: Four Steps Towards Robust Artificial Intelligence." arXiv preprint, arXiv:2002.06177, 2020.
Marcus (2020) — 批判统计学习在处理符号推理时的固有限制
Newell, Allen, and Herbert A. Simon. "Computer Science as Empirical Inquiry: Symbols and Search." Communications of the ACM, vol. 19, no. 3, 1976, pp. 113-126.
Newell & Simon (1976) — 符号AI的奠基文献,论证符号操作是实现智能的路径
Vaswani, Ashish, et al. "Attention Is All You Need." Advances in Neural Information Processing Systems, vol. 30, 2017, pp. 5998-6008.
Vaswani et al. (2017) — Transformer架构原始论文,现代大语言模型的基础
关于作者 · 浦通(Patrick)
浦通,2012年生,八年级学生。本文记录了一个完整的AI自进化实验:用大语言模型生成规则系统,通过"生成-批判-继承"循环让AI自我迭代。实验在一部手机上完成,不需要服务器和API密钥。全文保留实验过程的原始记录、提示词和代码片段,呈现了"赌徒AI(LLM)"和"数学家AI(规则系统)"之间的本质差异。
附录:全自动AI代码迭代系统 — 完整技术实现手册
本附录完整收录了驱动整个实验的"全自动AI代码迭代系统"的技术文档。内容包括系统角色、运行模式、权限设计、12种模式详细流程、补丁引擎技术实现、Userscript与Python后端架构等。
▶ 一、系统角色与基本概念 核心
系统通过操控网页上的DeepSeek对话,让多个AI角色协作完成代码或文章的创作、测试、审查和修改。
每一个独立的DeepSeek对话都被赋予一个唯一且固定的编号(如对话#1、对话#2)。一个编号永远只代表一个特定的对话窗口,不会改变。当该对话被丢弃时,其编号也随之废弃,不再被重新使用。
角色定义
- 生成者:负责设计、编写代码或文章的主要AI。它在系统为它分配的固定对话中持续工作,接受指令并迭代作品。
- 批判者:负责审查生成者作品的AI。它在系统为它分配的独立对话中工作。根据模式不同,这个对话可能被反复使用,也可能每次审查都创建新对话。
- 出题者:负责为生成者的代码出题的AI。它每次都在一个全新的、一次性的对话中运行,出完题后该对话便被丢弃,编号废弃。
继续生成按钮
当AI的输出内容过长被系统截断时,DeepSeek页面会出现一个继续生成按钮。系统会检测到此按钮,并在UI面板和日志中提示用户手动点击。用户点击后,AI继续输出,系统随后继续等待AI回复完成。
▶ 二、四种运行模式定义 4种
规则系统模式
AI被要求设计一个规则系统对话AI,能够处理开放式对话和复杂任务。提示词围绕规则系统设计展开,包括如何用有限规则处理无限自然语言。测试环节使用出题者出的题目来验证代码功能。这是系统的默认模式。
通用代码模式
AI被要求编写通用代码,不局限于规则系统。用户可以在主题中指定任何编程任务。提示词不包含规则系统的特定术语,直接要求根据设计方案输出代码。测试环节同样使用出题者出的题目来验证代码功能。
非代码模式
AI被要求创作文章或作文,不涉及任何代码。系统跳过所有测试和出题环节,直接进行创作和批判。所有提示词替换为非代码版本。
Termux模式
此模式仅在执行层面与上述模式叠加,不影响提示词内容。当Termux模式启用时,代码在Termux环境中执行,拥有特殊的文件系统权限。Termux模式可以与规则系统模式、通用代码模式或非代码模式同时启用。
▶ 三、文件系统权限(Termux模式) 安全
当Termux模式启用时,AI生成的代码在Termux环境中执行,拥有以下文件系统权限:
- 整个
/storage/emulated/0/ 目录下的所有文件和子目录都可以被读取和复制。
- 整个
/storage/emulated/0/ 目录下的所有文件和子目录都可以被修改和写入。
/storage/emulated/0/数据/规则系统/ 目录下的所有文件和子目录可以被删除和移动。此权限仅适用于该目录本身及其内部所有内容。
- 数据/规则系统目录之外的任何文件和目录都不能被删除或移动。系统会拦截所有针对该目录之外的删除和移动操作。
所有权限隔离在操作系统层面实施,不是简单的命令屏蔽。任何试图删除或移动数据/规则系统目录之外文件的命令都会被系统拒绝并记录日志。
▶ 四、全部提示词模板 完整
全部提示词模板已在正文"完整提示词"章节完整列出,包括规则系统模式、通用代码模式、非代码模式和补丁模式的所有版本。此处不再重复。
所有提示词模板按P1-P17编号,覆盖设计讨论、创作、出题、评估、反问确认、批判者审查、角色轮转、转达批判意见等全部场景。
▶ 五、通用处理规则 重要
等待AI回复完成
发送提示词后,系统会等待AI彻底停止输出。它通过检测加载圈消失、内容稳定2秒以上、发送按钮图标变为发送形态这三个条件联合判断,确保不截断、不误判。
继续生成按钮
当AI输出被截断时,系统在UI面板和日志中提示用户手动点击。按钮会高亮闪烁。用户点击后,AI继续输出,系统继续等待回复完成。等待超时120秒后强制继续。
提取代码块
如果AI的回复中包含Markdown代码块(即三个反引号包裹的内容),系统会提取所有代码块并合并应用。如果提取到多个代码块,会按顺序依次应用。
提取补丁
在补丁模式下,系统从AI回复中提取所有 ```python 包裹的代码块,自动检测每个代码块的补丁格式(整函数、SEARCH/REPLACE、行号),并按顺序应用到源代码。
处理绝无错误
在评估环节,如果AI的回复中包含了"绝无错误"这四个字,且未提供新代码,系统会将其视为AI认为当前作品已完美,随后会根据模式不同,进行反问确认或直接发送给批判者。
无新代码计数器
当AI连续多轮在评估或修改后未能产出新代码时,系统会累计一个计数器。当计数器达到4时,系统会放弃当前循环,要求生成者重新出题,以打破可能的僵局。
补丁应用失败处理
补丁应用失败时,系统尝试提取完整代码。如果检测到完整代码特征(包含多个import、def或class),则直接保存为新版本。否则增加无新代码计数器。
▶ 六、文件存储 结构
存储位置:所有文件保存在 /storage/emulated/0/数据/规则系统/ 目录下。
目录结构:主目录下按会话创建子目录,命名格式为 主题_主对话ID_时间戳。如果主题或主对话ID为空,则目录名为 tmp_时间戳。
每个会话目录包含以下文件:
00_配置.txt:记录启动时间、主题、主对话ID、运行模式、执行模式、输出模式。
设计回复.txt:保存设计阶段的AI回复。
代码_v0.py、代码_v1.py、代码_v2.py:每次写代码或应用补丁后保存的代码版本。
生成者题目_v0.txt:生成者出的测试题目。
测试结果_生成者_v0.txt:生成者题目的测试输出。
出题者题目_v0.txt:出题者出的测试题目。
测试结果_出题者_v0.txt:出题者题目的测试输出。
批判意见.txt:批判者给出的修改建议。
摘要.txt:所有关键内容的摘要记录。
99_完整日志.txt:所有操作的完整日志。
沙箱临时目录:代码执行在 /storage/emulated/0/数据/规则系统/sandbox/ 下进行,每次执行创建独立子目录(按时间戳命名),包含临时代码文件 code.py。执行完成后保留结果文件。
▶ 七、补丁引擎 技术核心
补丁模式允许AI只输出需要修改的部分,而不是完整代码。系统支持三种补丁格式,自动检测并应用。
整函数替换模式
AI输出修改后的完整函数或类定义。系统通过函数名或类名在源代码中查找匹配项并替换。如果找不到对应定义,则追加到文件末尾。匹配范围包括Python函数、Python异步函数、Python类、带装饰器的Python函数、JavaScript函数、JavaScript异步函数、导出函数。
SEARCH/REPLACE模式
AI输出SEARCH块和REPLACE块。系统在源代码中查找SEARCH块的内容,替换为REPLACE块的内容。多个SEARCH/REPLACE块按顺序依次应用。格式为 SEARCH 开头换行后跟查找内容,REPLACE 开头换行后跟替换内容。
行号补丁模式
AI输出行号指令。系统根据指令在源代码中插入、删除或替换指定行。指令格式为 +行号 新内容 表示在指定行前插入新行,-行号 表示删除指定行,起始行-结束行 新内容 表示替换指定范围的行,行号 新内容 表示替换单行。
补丁应用流程
从AI回复中提取所有由 ```python 包裹的代码块 → 自动检测每个代码块的补丁格式 → 按整函数、SEARCH/REPLACE、行号顺序尝试匹配 → 成功应用后更新源代码并保存新版本 → 返回应用结果。
补丁失败处理
如果补丁应用失败,系统尝试提取AI回复中的完整代码。如果检测到完整代码特征(包含多个import、def或class),则直接保存。否则增加无新代码计数器,达到4次后强制重新出题。
▶ 八、12种模式速览表 模式1-12
| 模式 | 名称 | 核心特征 | 是否需要ID |
| 1 | 基本循环 | 继续已有对话,出题→测试→评估→修改 | 主对话ID |
| 2 | 先写代码再循环 | 模式1的偶数版本,先写代码再进入循环 | 主对话ID |
| 3 | 自我批判循环 | 与模式1相同,评估时增加自我批判 | 主对话ID |
| 4 | 先写代码+自我批判 | 模式3的偶数版本,先写代码再进入循环 | 主对话ID |
| 5 | 外部批判(自动创建) | 创建生成者和批判者两个新对话 | 无需ID |
| 6 | 外部批判(提供ID) | 模式5的偶数版本,使用已有对话ID | 生成者ID + 批判者ID |
| 7 | 出题者+批判者(自动) | 生成者不出自我评估,由独立出题者出题 | 无需ID |
| 8 | 出题者+批判者(提供ID) | 模式7的偶数版本,使用已有对话ID | 生成者ID + 批判者ID |
| 9 | 角色轮转(自动) | 批判者审查后直接写新代码,成为新生成者 | 无需ID |
| 10 | 角色轮转(提供ID) | 模式9的偶数版本,使用已有对话ID | 生成者ID + 批判者ID |
| 11 | 迭代轮转(自动) | 生成者先迭代N轮,然后触发角色轮转 | 无需ID |
| 12 | 迭代轮转(提供ID) | 模式11的偶数版本,使用已有对话ID | 生成者ID + 批判者ID |
奇数模式(1,3,5,7,9,11):自动创建新对话,无需用户提供ID。
偶数模式(2,4,6,8,10,12):需要用户提供已有的对话ID。
▶ 九、模式11完整工作流程(迭代轮转) 旗舰模式
模式11完全由系统自动创建对话。用户无需提供任何对话ID。生成者先迭代修改N轮,然后触发角色轮转。
可配置参数:迭代次数N默认值为3。批判者对话策略有三种:对齐迭代(复用同一个批判者对话)、每次新对话(每次批判都打开全新对话)、自定义次数M(批判者每使用M轮后打开全新对话)。
启动流程(在生成者对话中)
- 设计讨论:发送设计讨论提示词,等待回复。
- 写代码:发送写代码提示词,等待回复。提取代码块,保存。
- 出题:发送生成者出题提示词,提取题目A。
主循环
- 出题者出题:打开一次性出题者对话,发送出题提示词,提取题目B。丢弃此对话。
- 分别测试:测试题目A得结果A,测试题目B得结果B。
- 切换至批判者:根据批判者对话策略决定使用已有还是新建批判者对话。
- 批判者审查:在批判者对话中发送审查提示词,等待回复,保存批判意见。
- 判断是否轮转:
- 若迭代次数 < N(迭代修改):跳回生成者,转达批判意见,提取新代码,迭代次数+1,回到步骤1。
- 若迭代次数 ≥ N(角色轮转):在批判者对话中发送"批判者创作"提示词,提取新代码。丢弃旧生成者对话。当前批判者对话被重新标记为新的生成者对话。迭代计数器归零。新生成者出题,回到步骤1。
▶ 十、关键配置参数 调优
- 迭代次数:生成者修改的最大轮数,默认3轮。
- 超时时间:等待AI回复的超时秒数,0表示无限等待。
- 批判者策略:对齐迭代(复用批判者对话)、每次新对话、自定义次数。
- 批判者刷新次数:自定义策略下批判者对话的最大使用轮数。
- 面板宽度/高度:UI面板的尺寸,范围300-1200像素。
- 面板透明度:UI面板的透明度,范围0.1-1.0。
- 出题提示词:出题者出题时使用的提示词,默认"出几道数学题"。
- 主题:当前会话的主题,用于提示词中的
{主题} 占位符。
- 执行模式:隔离、Termux或完整权限。
- 输出模式:完整代码、补丁或非代码。
- 运行模式:规则系统模式、通用代码模式或非代码模式。
- 批判者视图:完整代码或仅补丁。
▶ 十一、Userscript + Python后端架构 系统
系统架构总览
系统由两个核心组件构成:浏览器端Userscript运行在DeepSeek页面中,负责操控网页、管理对话、发送消息和接收AI回复;Python后端服务运行在本地,负责代码执行、文件存储、补丁应用和权限控制。两者通过WebSocket(端口8765)实时通信,WebSocket不可用时自动降级到HTTP(端口8766)。
Userscript核心功能
- 模式路由:支持12种运行模式。
- 对话管理:自动管理多个DeepSeek对话,通过唯一ID标识每个对话。
- 进度管理:保存/加载当前进度到localStorage。
- 提示词模板管理:导出/导入提示词模板为JSON文件。
- UI面板:位于浏览器右下角,可拖动、最小化,包含状态栏、控制按钮、模式设置、进度管理和日志面板。
- 消息发送:发送前检查10秒内是否发送过相同内容,避免重复。发送失败时无限重试。
- 回复等待:每500毫秒检测一次状态,通过检测加载圈、继续生成按钮、操作栏和AI消息来判断当前状态。
- 状态持久化:所有状态保存在localStorage中,页面刷新后自动恢复。
Python后端功能
- WebSocket服务:运行在端口8765,支持SET_TOPIC、CODE、APPLY_PATCH、EXECUTE_CODE等命令。
- HTTP服务:运行在端口8766,作为WebSocket的降级通道。
- 代码执行:根据执行模式在对应环境中执行代码(隔离模式/Termux模式)。
- 补丁应用:调用PatchEngine应用补丁,保存新代码版本。
- 文件保存:所有对话内容、代码、题目、测试结果和日志都保存到存储目录。
执行模式
- 隔离模式:代码在沙箱中执行,禁止所有危险操作。这是默认模式。
- Termux模式:代码在Termux环境中执行,拥有完整的文件系统权限(读/写/修改全放行,删除/移动限制在数据/规则系统目录内)。
- 完整权限模式:代码拥有完整执行权限,不进行任何安全过滤。风险极高。
输出模式
- 完整代码模式:AI输出完整的代码文件,系统提取代码块并保存。
- 补丁模式:AI只输出需要修改的部分(补丁),系统应用补丁到现有代码。此模式大幅减少token消耗。
- 非代码模式:AI输出作文或文章,不涉及代码。跳过所有测试和出题环节。
▶ 十二、补丁模式在迭代循环中的完整行为 补丁
当输出模式设置为补丁模式时,系统在每一轮迭代中的行为如下:
- 写代码阶段(第一轮):系统发送写代码提示词(非补丁版本),AI输出完整代码。系统提取完整代码保存为
代码_v0.py。
- 出题阶段:与正常模式相同,生成者和出题者分别出题。
- 批判阶段:批判者收到完整代码(新批判者第一次审查)或根据批判者视图设置收到函数列表(后续审查),输出批判意见。
- 修改阶段(第二轮及以后):系统发送转达批判意见提示词的补丁版本,要求AI输出补丁格式的修改。AI只输出修改后的函数或类定义,不输出完整代码。系统提取补丁并发送到Python后端应用。Python后端将补丁应用到当前源代码,保存为新版本
代码_v1.py、代码_v2.py 等。
- 迭代循环:每一轮修改阶段,AI都输出补丁而不是完整代码。系统持续累积应用补丁,代码版本号持续递增。直到达到设定的迭代次数。
- 角色轮转:达到迭代次数后,批判者创作新代码时输出完整代码(不是补丁),成为新生成者的初始代码。新生成者的后续迭代再次使用补丁模式。
核心原则:只有在已有代码的基础上进行修改时才使用补丁。首次生成和角色轮转时的初始代码始终使用完整代码。每一轮修改阶段AI都输出补丁,不是只有第一轮补丁。