极简Agent实验:用一个Bash工具让AI自主进化出记忆系统

用20条滑动窗口+单一Bash工具的极简Agent,自发演化出记忆系统并完成长任务写书。
作者构建了一个极简Agent实验:空目录中只有一段Python死循环和一个提示词文件,模型仅能调用单一Bash工具,且上下文被硬限制为20条滑动窗口。实验核心发现是:正是这个「残忍」的约束,逼迫DeepSeek模型在循环中自发创建文件系统记忆目录,将关键信息持久化写盘,从而绕过上下文截断——完成了一次真正意义上的「自举」。记忆系统建立后,模型自主设定了「写一本八章书籍」的长任务并逐步完成。实验还引出一个深刻反思:详尽的提示词工程在模型能力增强后可能从助力变为枷锁,未来Agent设计的方向或许是「给最少工具、设最硬约束,让智能自我组织」。
一个极简实验:把Agent削减到最low的形态
这个实验的起点极其简单:一个全新的空目录,里面只有一段Python程序和一个提示词文件。除此之外,所有的东西都是Agent自己跑出来的。
Python程序的核心是一个while True死循环。它连接到DeepSeek大模型,每次请求后模型会调用工具,工具执行结果再触发下一次请求,如此循环往复。关键限制在于——上下文只能放20条历史消息。这是一个固定大小的滑动窗口:每调用一次工具,结果就加进历史;一旦超过20条,最老的记录就被直接删掉,不做任何摘要压缩,也不做分层召回。
用作者的话说,这是一个「不能再小的、很low的Agent」。它没有系统课里那些花哨的记忆管理功能,只有一个原始的滑动窗口和一个死循环。但恰恰是这种极简设定,让接下来发生的事情变得有趣。

唯一的工具:一个被锁死的Bash
这个Agent手里只握着一个工具——bash。而且这个bash被严格限制:
- 工作目录被锁死在当前目录内,无法访问上一级或外部目录
- 每次模型调用最多执行一条bash命令
- 命令执行结果作为tool call的result返回
- 只能看到最近20条执行历史,超出的部分被裁剪丢失
提示词告诉模型:「你是LLM大模型,只有一个bash工具,只有一个简单的循环调用,没有持久的上下文历史。你要把自己成长为一个能处理长任务的Agent。当你觉得能胜任长任务时,自己给自己设置一个长任务。」
这里有一个耐人寻味的细节。作者在提示词里写了一句「更早的信息若不写进文件系统就永久遗忘」,随即自己意识到——这句话作弊了。因为一旦告诉模型「写入文件系统才能保住记忆」,就等于直接把答案喂给了它,模型会立刻知道要先做文件写入,而不是自己摸索出这个策略。
滑动窗口上下文(Sliding Window Context)是大模型应用中一种常见的历史管理策略。由于大模型每次推理只能处理有限长度的输入(即「上下文窗口」),当对话或任务历史超出限制时,必须选择丢弃或压缩旧信息。滑动窗口是最粗暴的一种做法:固定保留最近N条记录,超出部分直接截断,不做任何语义压缩或摘要。这与更复杂的方案形成对比——例如「记忆蒸馏」(将旧消息压缩成摘要后保留)、「分层召回」(按相关性动态检索历史片段)或外挂向量数据库。正是这种刻意选择的「蠢方法」,将记忆持久化的压力完全转移给了模型自身,迫使它主动寻找绕过限制的手段。
提示词的悖论:引导还是约束?
这个「作弊」的反思引出了整个实验最有价值的思考。

作者提到近期一则新闻:Anthropic把Claude Code的系统提示词压缩掉了近80%,而执行效果却没有下降。网上有各种解读,但作者认为这掩盖了一个事实——在模型能力不强的早期,我们需要写大量引导词;但引导词本身可能反过来约束模型的能力。
以「写进文件系统」这句话为例:如果不写死这一点,模型或许会想到用虚拟内存、用数据库、用其他连接方式来解决「20条之后被裁剪」的记忆问题。一旦你明确指定「用文件系统」,就把它的解空间锁死了。
「有时候你好像是在让他做一个正确的事情,但其实你是在约束他。大模型现在是要激活它,而不是约束它。」
这是一个反直觉但深刻的观点:随着模型智能提升,过度详尽的提示词工程可能从「助力」变成「枷锁」。真正的Agent能力,应该让模型自己去定义——什么是context,什么是memory,什么是压缩,这些概念是否必须存在,是否有更好的替代方案。也许要跑几十上百次实验,才会有某一次突然超越当前的认知。
Anthropic将Claude Code系统提示词压缩约80%这一事件,指向了「提示词工程」(Prompt Engineering)在大模型发展不同阶段的角色变化。早期模型能力有限,详细的指令能显著弥补模型理解与规划能力的不足;但随着模型基础能力提升,过于细致的提示词反而会剪裁掉模型自主寻找最优解的空间,将其锁定在人类预设的解题路径上。这类似于「规定动作」与「自选动作」的区别——规定越多,选手发挥的余地越小。研究者将此现象称为「过度约束」(Over-specification),它在Agent设计中尤为明显:当提示词把任务分解步骤、工具使用顺序、信息存储方式都写死时,实际上是用人类的认知框架替代了模型的自主推理,导致Agent在面对提示词未覆盖的场景时更容易崩溃。
自举过程:从零到记忆系统

实验真正跑起来后,演化路径清晰可见。程序把每次向DeepSeek发起调用的token信息、缓存命中率等数据记录到日志文件,每一行对应一次模型调用。
观察这个演化序列:
- 第1帧:刚启动,读取提示词文件,只是一次纯粹的模型调用
- 第2帧:模型调用了
type工具查看内容,工具返回触发下一轮 - 第3帧:开始
mkdir memory——创建记忆目录 - 随后:用
echo命令把「认知」写入文件,再写一些小脚本
就这样一轮一轮迭代,模型先自己实现了一套memory系统——把关键信息持久化到文件,绕过20条窗口的限制。这正是自举(bootstrap):Agent用有限的工具,搭建出自己所需的基础设施。
「自举」(Bootstrap)这一概念源于计算机系统领域,原指一个程序用自身极小的初始代码逐步加载并构建完整运行环境的过程——经典案例是操作系统启动时用一小段引导程序把完整内核加载入内存。在Agent语境中,自举特指Agent用当前掌握的有限工具,逐步搭建出原本不存在的能力基础设施,再用这些基础设施执行更复杂的任务。这与「脚手架」(Scaffolding)的概念不同:脚手架通常由开发者预先搭好,而自举强调的是系统从内部自发生长出所需结构。这个实验里,模型在没有任何记忆框架预设的情况下,自己创建目录、写入文件、设计读写协议,正是一次完整的自举演化过程。
长任务设计:自己给自己写一本书
记忆系统建好之后,Agent进入了长任务阶段。它自主设计的长任务是——写一本书,题为《自主AI的认知架构》,共分八个章节。
模型逐章推进:第一章、第二章……直到八章全部完成,任务状态标记结束。随后它还进入了「压缩精华」阶段,继续丰富自己的内容,最终快速产出。整个过程中,它不断在文件系统里读写、组织、迭代,形成了一个能跨越上下文窗口限制的长任务执行闭环。

这个结果的意义在于:一个只有20条滑动窗口、只有一个bash工具的极简Agent,靠自我演化实现了记忆持久化、长任务规划与分步执行。没有人为它写记忆管理代码,没有预设的任务分解框架,这些都是它在循环中自己「长」出来的。
实验的启示
这个实验虽然粗糙,却触及了当下Agent设计的核心议题:
第一,能力涌现来自约束下的自主探索。 恰恰是「上下文只有20条」这个硬约束,逼迫模型去发明文件写盘机制。约束不是障碍,而是演化的驱动力。
第二,提示词工程正在范式转移。 从「事无巨细地引导」转向「最小化约束、激活模型自主性」。Anthropic压缩80%提示词仍保持效果,与这个实验的思路殊途同归。
第三,Agent的定义应当交还给模型。 context、memory、compression这些人类总结的组件,未必是唯一解。让模型在大量实验中自己摸索,可能会突破现有的架构认知。
当然,实验的可复现性和稳定性仍是问题——作者也坦言这类突破「不可能跑一轮就出现」,需要几十上百次实验中的偶然一次。但它提供了一个极具启发性的研究范式:给最少的工具,设最硬的约束,看智能如何自我组织。
相关推荐

FCC新规解读:美国真的禁止外国机器人了吗
深度解读FCC将移动机器人加入涵盖清单的新规真相。这不是全面禁令,未点名中国,覆盖范围远超人形机器人。了解预防性监管逻辑对全球机器人产业链的实际影响。

Astra首战告捷:5分钟解决前代AI模型4个月未破难题
Reddit用户实测,AI编程助手Astra仅用5分钟解决困扰4个月的Linux风扇控制难题,GPT-4.5、Sol、Fable 5均未能攻克。深入分析Astra在BIOS固件级诊断和系统调试方面的突破表现。

AI主导测试实战:用Vibe Coding搭建测试工作台全攻略
详解AI主导测试与AI辅助测试的本质区别,手把手搭建AI测试工作台:从Claude Code+DeepSeek组合配置,到Node环境安装、npm镜像加速,帮助测试工程师完成从执行者到统筹者的能力升级。