Skip to main content
2026GitHub Open Source

GenericAgent 架构解析:极简自进化 Agent 框架的设计哲学

GenericAgent: A Minimalist Self-Evolving Agent Framework

GenericAgent 是一个约 3K 行代码的极简自进化 Agent 框架,通过 9 个原子工具和 ~100 行 Agent Loop 赋予 LLM 系统级控制能力。其核心创新在于 L0-L4 分层记忆系统——每解决新任务自动固化为 Skill,形成越用越强的个人技能树。与 Hermes Agent 的 Skill Hub 和 OpenClaw 的 Gateway Workflow 形成三种截然不同的 Agent 演进路径。

lsdefine
Agent FrameworkSelf-EvolvingOpen SourcePythonArchitecture

一、项目概览

GenericAgent(GitHub: lsdefine/GenericAgent,Stars: 11.9k)是一个以"不预设技能,靠进化获得能力"为核心理念的极简自主 Agent 框架。核心代码仅约 3K 行,通过 9 个原子工具 + ~100 行 Agent Loop 赋予任意 LLM 对本地计算机的系统级控制能力——覆盖浏览器(保留登录态)、终端、文件系统、键鼠输入、屏幕视觉及移动设备 ADB。

1.1 核心哲学

传统 Agent 框架的思路是"预装一切"——预置大量专用工具、工作流模板和编排引擎,导致:

  • 代码库庞大(OpenClaw 约 530K 行,Pi 虽精简但功能多元)
  • Token 消耗高(上下文窗口动辄 200K-1M token)
  • 新能力需要人工扩展代码

GenericAgent 的破局思路是**"最小可行工具集 + 自我进化"**:只提供 9 个足够强大的原子工具,让 Agent 自己通过 code_run 安装依赖、写脚本、调试验证,然后把成功路径固化为 Skill 下次复用。使用时间越长,技能树越丰富,最终变成一个完全属于用户的个人 Agent。

1.2 关键数据

指标数值
GitHub Stars11.9k
Forks1.4k
核心代码量~3K 行
Agent Loop 行数~100 行
原子工具数9 个
上下文窗口<30K tokens(是其他框架的零头)
支持模型Claude / Gemini / Kimi / MiniMax 等
编程语言Python 86.9%
Python 版本3.10-3.12(明确排除 3.14)

二、系统架构

2.1 整体架构

GenericAgent 采用经典的单进程模块化架构,所有组件围绕 GenericAgent 主类和 agent_runner_loop 引擎组织:

text
User Input ┌─────────────────────────────────────────────────┐ │ Frontend Layer (agentmain.py) │ │ CLI / TUI / Qt / Streamlit / Telegram / 飞书 │ │ / QQ / Discord / 钉钉 / Tauri Desktop │ └──────────────────────┬──────────────────────────┘ │ /session /model /btw ... ┌─────────────────────────────────────────────────┐ │ GenericAgent Main (agentmain.py) │ │ Task Queue | Multi-Model | Slash Commands │ │ Run Modes: CLI / --task / --reflect │ └──────────────────────┬──────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ Agent Loop (agent_loop.py, ~100 lines) │ │ Generator-based, streaming output │ │ while turn < max_turns: │ │ 1. client.chat() → LLM stream │ │ 2. Parse tool_calls │ │ 3. BaseHandler.dispatch() → do_{tool}() │ │ 4. turn_end_callback() → summary + fold │ └──────┬───────────────────┬─────────────────────┘ │ │ ▼ ▼ ┌──────────────┐ ┌─────────────────────┐ │ LLM Core │ │ Tool Implementations │ │ (llmcore.py) │ │ (ga.py) │ │ ~800 lines │ │ 9 atomic tools │ │ Claude/OAI/ │ │ code_run │ │ Native/Mixin │ │ file_read/write/patch│ └──────────────┘ │ web_scan/execute_js │ │ ask_user │ │ memory tools │ └──────────┬───────────┘ ┌────────────────────┼────────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ TMWebDriver │ │ simphtml.py │ │ Layered │ │ (CDP Browser)│ │ (HTML Engine)│ │ Memory L0-L4 │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Reflect/ │ │ Skill Search │ │ Skill SOPs │ │ Scheduler │ │ (L1 Index) │ │ (L3 Storage) │ └──────────────┘ └──────────────┘ └──────────────┘

2.2 核心包解析

2.2.1 agentmain.py — 主控类

GenericAgent 类是整个框架的中枢,职责:

职责实现
多模型管理load_llm_sessions()mykey.py 加载配置,支持 Claude/Gemini/Kimi/MiniMax,运行时 next_llm() 切换
任务队列线程安全的 queue.Queueput_task() 投递,run() 后台线程消费
三种运行模式CLI 交互、一次性任务(--task)、反射监控(--reflect
Slash 命令/session.*=... 动态修改会话参数,/resume 恢复历史
子 Agent 编排conductor.py 派发并行子 Agent,/btw 旁路提问不中断主线

2.2.2 agent_loop.py — Agentic Loop(~100 行)

这是整个框架最核心的设计亮点。用 Python generator 实现流式 Agent 循环:

python
def agent_runner_loop(client, sys_prompt, user_input, handler, tools, max_turns=80): messages = [{"role": "system", "content": sys_prompt}, {"role": "user", "content": user_input}] while turn < max_turns: # 1. 流式 LLM 调用 response = yield from client.chat(messages, tools, stream=True) # 2. 解析 tool_calls(Protocol 模式 <tool_use> 或 Native function_calling) tool_calls = parse_tool_calls(response) # 3. 分发工具调用 results = [] for tc in tool_calls: outcome = yield from handler.dispatch(tc.name, tc.args) results.append((tc.id, outcome.data)) # 4. 轮次结束回调:生成摘要 + 历史压缩 next_prompt = handler.turn_end_callback(messages, results) messages.append({"role": "user", "content": next_prompt}) # 5. StepOutcome 控制循环走向 if outcome.should_exit or outcome.next_prompt is None: break

关键设计点:

  • yield from:每个步骤都是 generator,天然支持流式输出,前端实时显示中间结果
  • StepOutcome:控制数据结构,next_prompt 决定继续/退出,should_exit 强制终止
  • 每 10 轮重置工具描述client.last_tools = '' 节省 token
  • 工具串行执行:默认逐个执行,前一个失败则停止,保证操作顺序安全

2.2.3 llmcore.py — LLM 抽象层(~800 行)

精巧的多模型统一抽象层:

协议特点
ClaudeSessionAnthropic Messages API (SSE)原生 Claude
LLMSessionOpenAI Chat Completions兼容 DeepSeek/xAI 等
NativeClaudeSessionClaude Code CLI签名验证 + extended thinking
NativeOAISessionClaude 后端 + OAI 格式混合模式
MixinSession多模型轮询按优先级 failover

ToolClient vs NativeToolClient

ToolClient(Protocol)NativeToolClient(Native)
机制工具定义嵌入 prompt <tool_use> 标签标准 tool_calls JSON 字段
LLM 兼容任何 LLM(不支持 function calling 也能用)需要 Provider 支持
Prompt 长度稍长
调试可直接查看 prompt黑盒

这种双轨设计是 GenericAgent 的重要工程选择:优先 Protocol 模式保证最大兼容性,需要时切换 Native 模式提升效率。

2.2.4 ga.py — 工具实现层

GenericAgentHandler 继承 BaseHandler,通过方法名映射(do_{tool_name})实现工具分发:

工具方法关键实现
code_rundo_code_run写临时 .ai.py → 子进程执行;inline_eval 进程内运行;超时/中断安全
file_readdo_file_read关键词搜索 + 行号支持;自动解码
file_writedo_file_write琅嬛福地 标签;创建/追加/覆写三种模式
file_patchdo_file_patch精确文本块替换;防止误改
web_scando_web_scansimphtml.py 简化 DOM → 精简文本
web_execute_jsdo_web_execute_jsCDP 浏览器中执行 JS;结果保存
ask_userdo_ask_user人机协作;中断循环等待确认
update_working_checkpointdo_update_working_checkpoint短期工作记事板(每轮自动注入)
start_long_term_updatedo_start_long_term_update触发长期记忆提炼 SOP

2.2.5 TMWebDriver.py — 浏览器驱动

通过 CDP(Chrome DevTools Protocol) 控制真实浏览器:

  • 双通道通信:WebSocket 实时双向 + HTTP Long Polling 兼容
  • 保留登录态:不启动无头模式,已登录的网站直接操控(外卖下单、支付宝查账等真实场景)
  • 多标签页管理
  • 远程模式:端口检测支持远程浏览器

2.2.6 reflect/ — 反射与调度

模块功能
scheduler.pycron 式定时任务(once/daily/weekly/monthly/every_Nh)
autonomous.py空闲 30 分钟后自动触发自主任务
goal_mode.py目标驱动模式
agent_team_worker.py子 Agent 工作者 + 派发监督

三、分层记忆系统:框架的灵魂

GenericAgent 区别于其他 Agent 框架的根本创新在于其 L0-L4 分层记忆系统。这不仅仅是一个"存储",而是一套精心设计的知识管理协议

3.1 五层结构

层级名称存储形式大小约束作用
L0元规则memory_management_sop.md记忆更新的最高原则,Agent 不可违背
L1索引层global_mem_insight.txt≤30 行快速路由,根据关键词定位到 L2/L3
L2事实库global_mem.txt验证过的环境事实、配置、凭证、踩坑记录
L3技能库memory/*.md, memory/*.py任务 SOP(.md)和可复用脚本(.py
L4会话归档L4_raw_sessions/从已完成会话中提炼的原始记录

3.2 核心公理

这些公理是 L0 元规则的一部分,直接约束 Agent 的记忆行为:

  1. 行动验证原则(No Execution, No Memory):只有工具调用成功的结果才能写入记忆,防止幻觉污染长期知识库
  2. 神圣不可删改性:验证过的配置、踩坑记录在后续重构中绝不能丢失
  3. 禁止存储易变状态:时间戳、PID、临时文件路径等瞬态数据不写入记忆
  4. 最小充分指针:每层只保留能定位下一层的最短标识符

3.3 进化机制

text
[新任务到达] ├─ L1 索引查询:关键词 → 相关 SOP 路径 │ └─ 命中 → 直接加载 L3 SOP → 执行 └─ 未命中 → 自主探索 ├─ code_run: 安装依赖 ├─ 写脚本:构建解决方案 ├─ 调试:验证结果 └─ 成功路径固化 start_long_term_update() [遵循 L0 SOP] → 提炼 → 写入 L2/L3 [下次同类任务: 一句话启动]

这个机制让 GenericAgent 的能力随使用时间线性增长,而不是依赖开发者维护工具库。

四、与 Hermes Agent、OpenClaw 的对比

三框架架构对比
三框架架构对比

4.1 设计哲学对比

维度GenericAgentHermes AgentOpenClaw
核心理念最小核心 + 自我进化多入口 + Skill Hub多团队 + Gateway 安全审批
演进路径能力从使用中生长社区 Skill 共享企业级工作流积累
上下文策略极度节俭(<30K)依赖 Provider 上下文限制依赖 Provider 上下文限制
代码哲学极简主义工程完整企业级复杂

4.2 架构差异

GenericAgent — 单体极简流

  • 核心约 3K 行,所有模块在一个进程内
  • 通过文件系统(.txt/.md)管理记忆,无数据库依赖
  • 前端通过进程导入加载(import tuiapp_v2
  • code_run 工具是万能能力放大器——可以安装任何包、执行任何操作

Hermes Agent — 多入口平台化

  • 核心 AIAgent ~9K 行,cli.py + gateway/ + acp_adapter/ 均为入口
  • SQLite + FTS5 会话存储,可插拔 Memory Provider
  • 工具系统采用导入时自注册:每个 tools/*.py 顶层调用 registry.register(),自动发现
  • 70+ 注册工具,28 个工具集,7 种终端后端
  • ACP 协议:通过 stdio/JSON-RPC 将 Agent 能力嵌入 VS Code、Zed、JetBrains
  • 20 个消息平台适配器(Gateway),是三大框架中平台覆盖最广的

OpenClaw — 微服务企业架构

  • ~530K 行,多服务编排,完整的企业级基础设施
  • Gateway 控制平面:消息通道路由、多团队管理、审批工作流
  • FASA 安全架构:四层防御体系,28 个 Plugin Hook 点,双层安全检测
  • MCP 集成:动态工具发现,通过 MCP 协议与外部服务连接
  • ClawTrace:Agent 运行时追踪,行为树可视化,PDG 威胁检测
  • AgentMonitor:OpenClaw 的侧通道监控插件,实时安全事件告警

4.3 记忆系统对比

GenericAgentHermes AgentOpenClaw
存储介质文件系统(.txt/.md)SQLite + FTS5SQLite + 内存
抽象层级L0-L4 分层Provider ABC 可插拔Hook 事件驱动
进化机制自动提炼 SOP社区 Skill Hub人工工作流模板
索引方式L1 关键词路由FTS5 全文搜索标签 + Hook 点
Token 效率极高(<30K)依赖压缩策略依赖 Provider

GenericAgent 的文件式记忆系统在信息密度上有独特优势:没有数据库 schema 约束、没有 ORM 开销,Agent 可以用完全自然语言的方式管理知识。这既是它的灵活性,也是它的潜在风险。

4.4 安全模型对比

GenericAgentHermes AgentOpenClaw
危险检测ask_user 确认approval.py 危险命令检测FASA 四层 + 28 Hook 点
浏览器安全真实浏览器(无沙箱)5 种浏览器后端沙箱/无头浏览器
执行隔离子进程 + 超时控制沙箱执行(Docker/Modal 等)MCP 协议隔离
凭据管理mykey.py(本地)auth.py PROVIDER_REGISTRYGateway 凭据存储
可观测性可选 Langfuse 插件回调系统 + CLI spinnerClawTrace 追踪 + AgentMonitor
运行时安全轮数上限警告check_fn 门控双层 PDG 检测

4.5 工具系统对比

GenericAgentHermes AgentOpenClaw
工具数量9 个原子工具70+ 注册工具28 个 Plugin Hook
工具设计极简通用功能专用Hook 抽象
MCP 集成无原生支持MCP 客户端(动态发现)MCP 核心协议
浏览器控制CDP 真实浏览器5 种后端沙箱浏览器
代码执行子进程 Python/PowerShell沙箱(Docker/Modal等)MCP 隔离
工具扩展code_run 万能导入时自注册MCP 插件

GenericAgent 的"9 个原子工具"策略与 Hermes Agent 的"70+ 专用工具"形成鲜明对比。前者认为通用工具 + LLM 推理能力可以覆盖大多数场景,后者认为专用工具的确定性更高、Token 消耗更低。两者都有各自的数据支撑。

4.6 多 Agent 编排对比

GenericAgentHermes AgentOpenClaw
编排方式Conductor + /btwDelegate ToolGateway Workflow
子 Agent 隔离Python 子进程独立 LLM 调用多团队 + 审批流
并行执行多 worker 线程工具级并行Gateway 任务分发
通信机制agent_team_worker.py共享 PromptAPI 消息传递

五、评测与数据支撑

GenericAgent 技术报告(arXiv:2604.17091)从五大维度进行了系统性评测:

维度核心问题结论
任务完成度与 Token 效率GA 能否以更低成本完成高难度任务?Token、请求数、工具调用三轴全面领先
工具使用效率最小原子工具集能否替代专用工具集?成本显著低于专用工具集,质量持平
记忆系统有效性精简分层记忆能否超越 Embedding 检索?在 SOP-Bench、LoCoMo、20-skill 测试中均优于 Embedding 方案
自我进化能力Agent 能否无人干预下将经验固化为 SOP?9 轮纵向研究和 8 任务 Web 基准验证了进化路径
网页浏览能力信息密度设计能否适应开放网页?WebCanvas、BrowseComp-ZH 验证了simphtml.py的有效性

关键发现:GenericAgent 的第二轮和第三轮执行在 8 个 Web 任务上收敛至稳定的低成本区间——这直接验证了"进化后能力更强"的核心理论。

六、设计启示

6.1 "少即是多" 的工程哲学

GenericAgent 用 3K 行代码做到了许多框架数十万行才能实现的事。其关键洞察:LLM 的推理能力是对抗复杂性的最佳武器。与其在框架层设计大量专用工具,不如提供足够通用的原子操作,让 LLM 自己决定如何组合。

6.2 上下文窗口是最宝贵的资源

GenericAgent 的 <30K Token 上下文策略背后的逻辑:更小的上下文意味着更低的噪声、更低的幻觉概率和更低的成本。当其他框架在努力压缩 200K-1M Token 的上下文时,GenericAgent 从一开始就在构建一个信息密度最优的记忆系统。

6.3 文件系统作为知识库

将记忆存储在文件系统(.txt/.md)中,而非数据库中,是一个反直觉但有效的设计:

  • 零依赖:不需要数据库服务器
  • 自然语言友好:Agent 可以用完全自然语言读写记忆
  • 版本控制友好.git 天然追踪记忆演进
  • 可调试:直接 cat 即可查看当前记忆状态

6.4 Generator-based 流式架构

Python generator 作为 Agent 循环的底层原语,比异步框架(asyncio)或状态机都更简洁:yield from 自动处理流式输出的挂起和恢复,前端通过 display_queue.get() 消费,不需要额外的流式抽象。

七、总结

GenericAgent 代表了 AI Agent 框架的一种独特演进路径:不从"功能完备"出发,而从"能力进化"出发。它的核心价值不是提供了多少工具,而是提供了一种让 Agent 在使用中生长的机制。

与 Hermes Agent(多入口平台化)和 OpenClaw(多团队企业安全)相比,GenericAgent 的定位更加个人化——它是你的个人 Agent,用得越久,它就越懂你、越能帮你。

三种框架的适用场景

场景推荐框架
个人开发助手,极简可控GenericAgent
需要 IDE 集成,多平台消息Hermes Agent
企业级多团队协作,安全审批OpenClaw

参考链接