GenericAgent 源码深度分析:3K 行自我进化的自主 Agent 框架

> 来源: GitHub - lsdefine/GenericAgent | arXiv 论文 2604.17091 | HuggingFace

> 日期: 2026-05-08

> 作者: lsdefine | 许可: MIT | 版本: V1.0 (2026-01-16)

> 语言: Python | Star: ~8.3K | arXiv: 2026-04-21

一句话版本

GenericAgent 是一个只有 3K 行代码的 AI Agent——它不预设任何技能,每帮你做一次新任务就把执行路径固化为"技能",用越久能力越强,而且比同类模型省 6 倍的 token。

它和别的 Agent 有什么不同?

传统 AgentGenericAgent
**初始能力**预装大量工具/技能只有 9 个原子工具(代码执行、文件读写、浏览器控制等)
**增长方式**安装插件/工具**自动进化**——每完成一个任务就固化为可复用的 Skill
**技能归属**公共的、千篇一律**完全个性化**——你的技能树全世界独一份
**Token 消耗**随任务增长线性膨胀**6 倍省**——自动压缩上下文、精简记忆
**代码体积**通常数万到数十万行**核心仅 3K 行**

架构总览


┌─ 用户 ─────────────────────────────────────┐
│  IM前端 / TUI / Qt / Streamlit / DesktopPet │
└────────────────────┬───────────────────────┘
                     │
┌────────────────────▼───────────────────────┐
│          agentmain.py (GenericAgent 主循环)    │
│  ┌─ 任务队列 ──┐  ┌─ 9 原子工具(ga.py) ──┐  │
│  │ run() 线程  │ → │ code_run/file_*     │  │
│  │ 分派器     │   │ web_scan/execute_js  │  │
│  └────────────┘   │ ask_user/update_*    │  │
│                   │ start_long_term_*    │  │
│                   └──────────────────────┘  │
│  ┌─ agent_runner_loop (~150 行) ─────────┐  │
│  │  调用模型 → 解析工具调用 → 执行工具    │  │
│  │  → 回传结果 → 循环直到任务完成        │  │
│  └────────────────────────────────────────┘  │
│  ┌─ llmcore.py (~1000 行) ─────────────────┐  │
│  │  Claude / OpenAI / Gemini / Kimi / ...  │  │
│  │  MixinSession 多模型混合                │  │
│  │  自动上下文压缩(每5轮)                │  │
│  └──────────────────────────────────────────┘  │
└────────────────────────────────────────────────┘
                     │
┌────────────────────▼───────────────────────┐
│   四层记忆系统 (L0-L4)                      │
│  L0: 行为规则 (sys_prompt + 记忆管理 SOP)   │
│  L1: 极简索引 (≤30 行,高频技能→文件名)     │
│  L2: 全局事实 (路径/配置/凭证)              │
│  L3: 技能/SOP (memory/*.md, *.py)          │
│  L4: 历史会话 (L4_raw_sessions/)            │
└────────────────────────────────────────────┘

核心源码分析

一、Agent 执行循环 (`agent_loop.py`, ~150 行)

这是整个框架的"心脏"——极简且优雅


def agent_runner_loop(client, system_prompt, user_input, handler, tools_schema, max_turns=40):
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_input}
    ]
    
    while turn < handler.max_turns:
        # 1. 调用 LLM
        response = yield from client.chat(messages=messages, tools=tools_schema)
        
        # 2. 解析工具调用(或无工具回答)
        tool_calls = parse_tool_calls(response)
        
        # 3. 逐个执行工具
        for tc in tool_calls:
            outcome = yield from handler.dispatch(tool_name, args, response)
            if outcome.should_exit: break
            if not outcome.next_prompt: break  # 当前任务完成
        
        # 4. 构建下一轮的 prompt(包含工具结果)
        next_prompt = handler.turn_end_callback(...)
        messages = [{"role": "user", "content": next_prompt, "tool_results": tool_results}]
    
    return exit_reason

关键设计特点

二、9 个原子工具 (`ga.py`, ~700 行)

GenericAgent 只预设了 9 个工具,这是它的全部初始能力:

工具作用执行方式
`code_run`执行任意代码写临时文件 → subprocess 执行
`file_read`读文件`fsp.read` + 行号/关键词定位
`file_write`写文件`` 标签提取 + overwrite/append/prepend
`file_patch`精确文件修改`str.replace(old, new)` 唯一匹配
`web_scan`感知网页内容CDP 注入 + 极简 HTML 提取
`web_execute_js`完全浏览器控制CDP 执行任意 JS
`ask_user`人工介入返回 `INTERRUPT` 信号
`update_working_checkpoint`更新工作记忆存储 `key_info` + `related_sop`
`start_long_term_update`长期记忆固化调用 L0 记忆管理 SOP

关键设计:工具函数名带 do_ 前缀(如 do_code_run),BaseHandler.dispatch() 自动映射 code_rundo_code_run

三、自我进化机制

这是 GenericAgent 最与众不同的设计


新任务 → 9 原子工具探索执行 → 成功完成
    ↓
start_long_term_update() 触发固化流程
    ↓
系统提示 Agent 读取 memory_management_sop.md
    ↓
Agent 自主判断:
  - 这是环境事实?→ 写入 L2 (global_mem.txt),同步 L1
  - 这是任务 SOP?→ 写入 L3 (memory/*_sop.md),L1 加索引行
  - 没有可记忆的?→ 跳过
    ↓
未来类似任务 → 从 L1 索引快速定位 → 直接复用餐

示例(来自 README):

你说第一次之后每次
"读我的微信消息"装依赖→逆向DB→写读取脚本→保存技能一行调用
"监控股票并提醒我"装mootdx→建筛选流程→配cron→保存技能一键启动
"通过Gmail发这个文件"配OAuth→写发送脚本→保存技能直接可用

使用几周后,你的 Agent 就拥有一个世界上独一无二的技能树。

四、四层记忆系统

L0 — 元规则 (系统提示 + memory_management_sop.md)

四条不可违背的公理:

1. 行动验证原则:只有成功的工具调用才能进记忆,"No Execution, No Memory"

2. 神圣不可删改性:已验证的数据不能丢弃

3. 禁止易变状态:不存时间戳/PID/临时路径

4. 最小充分指针:上层只留最短定位标识

L1 — 全局索引 (global_mem_insight.txt)

L2 — 事实库 (global_mem.txt)

环境特异性事实:路径、配置、凭证、ID 等

L3 — 技能/SOP 库 (memory/*.md, *.py)

随使用自然增长的技能集合。目前已包含:

L4 — 历史会话存档 (L4_raw_sessions/)

scheduler 反射自动收集,可持续定位过往上下文。

五、LLM 客户端 (`llmcore.py`, ~1000 行)

支持模型

Token 节省机制


每 5 轮压缩:
  <thinking>长内容 → <thinking>截断版...
  <tool_use>长参数 → <tool_use>截断版...
  <history>块 → <history>[...]
  
每 10 轮重置:
  client.last_tools = ''  // 清除工具描述缓存

热重载:修改 mykey.py 自动检测并重载。

六、浏览器控制 (TMWebDriver.py)

通过 Chrome DevTools Protocol (CDP) 和自定义 Chrome 扩展实现完整浏览器控制:

七、前端多样性

GenericAgent 拥有异常丰富的前端支持

前端文件说明
Textual TUI`tuiapp.py`终端 UI,键盘驱动
Qt 桌面`qtapp.py`传统桌面应用
Streamlit`stapp.py` / `stapp2.py`Web UI
Telegram`tgapp.py`机器人
QQ`qqapp.py`机器人
飞书`fsapp.py`机器人
微信`wechatapp.py`个人微信
企业微信`wecomapp.py`机器人
钉钉`dingtalkapp.py`机器人
Discord`dcapp.py`机器人
桌面宠物`desktop_pet.pyw`多种皮肤
ACP 桥接`genericagent_acp_bridge.py`与 Claude Code/Codex 集成

技术亮点

1. 自我进化的实践性

GenericAgent 的自我进化不是概念空谈——它有完整的闭环:

2. 极致省 Token

6x 的 token 节省来源于三个层级的压缩

1. 上下文压缩:每 5 轮智能截断历史

2. 记忆层级:L1 索引 ≤30 行,搜索不盲搜

3. 工具描述重置:防止模型被过大的 tools_schema 影响思考

3. 自我举证的勇气

README 的一句话很值得玩味:

> 🤖 Self-Bootstrap Proof — Everything in this repository, from installing Git and running git init to every commit message, was completed autonomously by GenericAgent. The author never opened a terminal once.

翻译:整个仓库(包括装 Git、git init、每一条 commit message)都是 GenericAgent 自己完成的——作者一次终端都没打开过。

这是对"自我进化"概念强有力的(尽管难以独立验证的)背书。

4. 四层记忆设计

L0-L4 的层级设计借鉴了人类记忆系统:

安全问题

风险严重程度说明
代码执行无隔离`code_run` 直接 subprocess 执行任意代码
CDP 全权限浏览器控制 = 所有已登录网站全权限
个人微信集成通过 itchat/类似库操作微信,有封号风险
API Key 明文存储`mykey.py` 存 API Key(已在 `.gitignore`)
记忆污染自我进化可能引入错误记忆(patch 校验不严格)

与你的关联

GenericAgent 和你的 OpenClaw 体系有一些有趣的对比点:

方面OpenClaw 体系GenericAgent
**核心代码**~530K 行~3K 行
**记忆系统**SQLite + 向量搜索文件系统 + 层级索引
**进化方式**插件生态 + 手动更新自主 Skill 演化
**Token 策略**依赖模型上下文窗口主动压缩 + 层级索引
**前端**API/CLI + DiscordTUI/Qt/7个IM/...
**浏览器控制**沙箱/无头真实浏览器 + 持久登录态

值得借鉴的点

1. 四层记忆系统的设计思路(特别是 L1 ≤30 行和 L0 公理)可以直接参考

2. 记忆的"行动验证原则" —— 只有验证过的信息才存入

3. 自动上下文压缩机制

4. 前端多样性(Desktop Pet 这种趣味设计)

评分

维度分数说明
代码质量⭐⭐⭐⭐核心代码简洁,但 llmcore.py 略杂乱
创新性⭐⭐⭐⭐⭐自我进化 + 四层记忆是真正的原创设计
Token 效率⭐⭐⭐⭐⭐6x 节省,有实际数据支撑
实用性⭐⭐⭐⭐国内 IM 生态覆盖全面,但需要 Python+Chrome
文档⭐⭐⭐⭐双语 README + SOP + 论文
安全性⭐⭐代码执行和浏览器控制无隔离

一句话再总结

> "GenericAgent 用 3K 行代码 + 9 个原子工具证明:Agent 不需要预设技能,一个好的四层记忆系统 + 自动进化机制就够了。用越久越聪明,而且每个用户的 Agent 都是独一无二的。"

报告生成时间: 2026-05-08 11:13 UTC

分析基于 lsdefine/GenericAgent main branch 源码 + arXiv 论文