项目简介
GenericAgent 是一个极简、可自我进化的自主 Agent 框架。它的核心仅 ~3K 行代码,通过 9 个原子工具 + 约 100 行的 Agent Loop,赋予任意 LLM 对本地计算机的系统级控制能力。
它的设计哲学很有意思:不预设技能,靠进化获得能力。每解决一个新任务,GenericAgent 就将执行路径自动固化为 Skill。使用时间越长,沉淀的技能越多,形成一棵完全属于你、从 3K 行种子代码生长出来的专属技能树。
TIP
更妙的是,这个项目在 arXiv 上有技术论文,证明了其"Token 高效 + 上下文信息密度最大化"的设计理念。
相比 OpenClaw(~530K 行代码),GenericAgent 走的是极简路线——部署简单(pip install + API Key),不需要多服务编排,但依然保留了完整的浏览器控制、键鼠操作、ADB 移动设备控制等核心能力。
难度/时长/收获
- 难度:入门级,不需要深度编程经验
- 时长:约 30 分钟
- 收获:掌握 GenericAgent 部署配置 + 微信/QQ/飞书三大 IM 平台接入,实现随时随地用手机操控电脑 AI
目标读者画像
- 1-5 年经验的后端或全栈开发者
- 希望搭建个人 AI 助手、自动化工作流的用户
- 对 Agent 技术感兴趣,想快速体验"让 AI 真正替你做事"的开发者
- 有多平台 IM 接入需求(如需要通过微信/QQ 远程控制电脑)
核心依赖与环境
| 类别 | 要求 |
|---|---|
| Python | 3.11 或 3.12(不要用 3.14,与 pywebview 不兼容) |
| 操作系统 | Windows / macOS / Linux |
| LLM 支持 | Claude / GPT-4o / Gemini / Kimi / MiniMax 等主流模型 |
| 网络 | 能访问 LLM API 的网络环境 |
| 可选依赖 | streamlit / pywebview(桌面 GUI)、pycryptodome / qrcode(微信) |
WARNING
GenericAgent 本身不提供 LLM API,需要你自备 API Key。建议使用支持 Claude/GPT 的中转服务,价格更低且国内访问更稳定。比如 Defapi,官方价格一半,支持 Claude/GPT 全系列,还能自动识别兼容协议。
完整项目结构
GenericAgent/
├── agentmain.py # 主入口,支持命令行模式
├── launch.pyw # 桌面 GUI 启动脚本
├── agent_loop.py # 核心 Agent Loop(约100行)
├── llmcore.py # LLM 会话管理
├── ga.py # GenericAgentHandler,记忆与工具调度
├── frontends/ # IM 平台适配器
│ ├── wechatapp.py # 微信 Bot
│ ├── qqapp.py # QQ Bot
│ ├── fsapp.py # 飞书 Bot
│ ├── tgapp.py # Telegram Bot
│ ├── wecomapp.py # 企业微信 Bot
│ ├── dingtalkapp.py # 钉钉 Bot
│ ├── tuiapp.py # 终端 UI
│ └── ...
├── assets/
│ ├── mykey_template.py # API Key 配置模板
│ ├── tools_schema.json # 9个原子工具定义
│ ├── sys_prompt*.txt # 系统提示词
│ └── tmwd_cdp_bridge/ # 浏览器注入插件
├── memory/ # 记忆存储目录
└── temp/ # 临时文件与日志
手把手步骤
Step 1: 安装项目与依赖
首先克隆仓库并安装基础依赖:
# 克隆仓库
git clone https://github.com/lsdefine/GenericAgent.git
cd GenericAgent
# 安装基础依赖
pip install requests
# 安装 GUI 依赖(桌面模式)
pip install streamlit pywebview
# 或安装终端 UI 依赖
pip install requests textual
TIP
GenericAgent 的设计理念是"由 Agent 自己安装环境",所以你不需要预先装太多依赖。让 Agent 自己读代码然后说"请安装所有需要的 Python 依赖",它会帮你搞定。
Step 2: 配置 API Key
复制配置模板:
cp assets/mykey_template.py mykey.py
编辑 mykey.py,填入你的 LLM 配置。下面是使用 Defapi 的示例(以 Claude 为例):
# 使用 Defapi 中转 Claude(官方半价)
native_claude_config = {
'name': 'claude-defapi', # 显示名
'apikey': 'sk-ant-your-defapi-key', # Defapi 提供的 key
'apibase': 'https://api.defapi.org', # Defapi 端点
'model': 'claude-sonnet-4-6', # 或 claude-opus-4-7
'fake_cc_system_prompt': True, # 中转服务需要开启
'thinking_type': 'adaptive',
'max_tokens': 16384,
}
WARNING
如果你用的是 CC switch 类中转服务(如 Defapi、anyrouter 等),必须设置 fake_cc_system_prompt: True。真 Anthropic 官方端点(sk-ant- 前缀直连)则不需要。
GenericAgent 会自动根据变量名判断协议格式:
- 含
native+claude→ NativeClaudeSession(原生 tool 字段) - 含
native+oai→ NativeOAISession(OpenAI 原生 tool 字段) - 含
claude(不含 native)→ ClaudeSession(文本协议工具)
Step 3: 启动 GenericAgent
先测试命令行模式是否正常:
python agentmain.py
你应该能看到交互提示符 >,输入一句话测试:
> 在桌面创建一个 hello.txt,内容是 Hello World
如果一切正常,Agent 会执行任务并反馈结果。
切换到桌面 GUI 模式:
python launch.pyw
Step 4: 接入微信 Bot
微信 Bot 支持个人微信扫码登录,接入最简单。
安装额外依赖:
pip install pycryptodome qrcode requests
配置(可选,不配置也能用,但建议设置白名单):
在 mykey.py 中添加:
# 微信白名单,填写微信 ID,不填则允许所有用户
wechat_allowed_users = []
启动微信 Bot:
python frontends/wechatapp.py
首次启动会弹出一个二维码窗口,用微信扫码确认。登录成功后,你的微信就变成了与 GenericAgent 对话的界面。
TIP
微信 Bot 的命令和桌面版一样,支持 /new 开始新对话、/continue 恢复历史会话。
Step 5: 接入 QQ Bot
QQ Bot 使用 QQ 机器人官方 API,不需要公网 webhook,通过 WebSocket 长连接接收消息。
安装依赖:
pip install qq-botpy
配置:
- 去 QQ 开放平台 创建机器人,获取 AppID 和 AppSecret
- 在
mykey.py中添加:
qq_app_id = "你的APP_ID"
qq_app_secret = "你的APP_SECRET"
qq_allowed_users = ["用户openid"] # 或 ['*'] 允许所有人
启动 QQ Bot:
python frontends/qqapp.py
首次发消息给机器人后,用户的 openid 会记录到 temp/qqapp.log。
Step 6: 接入飞书 Bot
飞书 Bot 支持文本、富文本、图片、文件、音频、交互卡片等多种消息格式。
安装依赖:
pip install lark-oapi
配置:
- 在飞书开放平台创建企业自建应用,获取 AppID 和 AppSecret
- 在
mykey.py中添加:
fs_app_id = "cli_xxxxxxxxxxxxxxxx"
fs_app_secret = "xxxxxxxxxxxxxxxx"
fs_allowed_users = ["ou_xxxxxxxxxxxxxxxx"] # 或 ['*'] 允许所有人
启动飞书 Bot:
python frontends/fsapp.py
TIP
飞书 Bot 的一大亮点是视觉模型支持:图片首轮会以真正的多模态方式发送给兼容 OpenAI Vision 的后端。如果你的 Agent 需要"看"图片,飞书是体验最好的接入方式。
Step 7: 验证与调优
所有 Bot 都支持这些通用命令:
/new- 开启新对话,清空当前上下文/continue- 列出可恢复的会话快照/continue N- 恢复第 N 个历史会话
验证多平台同时接入:
如果你想同时运行多个 Bot,开多个终端窗口即可:
# 终端1:微信
python frontends/wechatapp.py
# 终端2:QQ
python frontends/qqapp.py
# 终端3:飞书
python frontends/fsapp.py
WARNING
多个 Bot 共享同一个 memory/ 和 temp/ 目录,记忆是互通的。这既是优势(跨平台上下文一致),也是潜在风险——确保你的使用场景适合这种设计。
常见问题排查
1. API Key 配置后报认证错误
原因:变量名写错或 fake_cc_system_prompt 配置错误
解决:
- 确认变量名包含正确的关键字(
native_claude、oai_config等) - 中转服务必须
fake_cc_system_prompt: True - 检查 apibase 是否正确(如 Defapi 用
https://api.defapi.org)
2. 微信扫码后提示登录失败
原因:微信风控对新设备登录的限制
解决:
- 尝试在手机端确认登录(有时需要手机端二次验证)
- 确保微信账号没有异常行为
- 降低 Bot 使用频率,避免触发风控
3. QQ Bot 收不到消息
原因:机器人未启用或权限配置错误
解决:
- 在 QQ 开放平台确认机器人已启用
- 检查是否正确添加了事件订阅(需要订阅
私聊消息事件) - 查看
temp/qqapp.log确认用户 openid 是否正确记录
4. 飞书 Bot 响应延迟高
原因:LLM 推理本身较慢,或网络延迟
解决:
- 使用更快的模型(如 GPT-4o-mini、MiniMax-M2)
- 检查网络到 LLM API 的延迟
- 适当降低
max_tokens加快首 token 响应
5. Bot 无法记住对话上下文
原因:执行了 /new 命令或会话超时
解决:
- 使用
/continue命令恢复历史会话 - 确认
memory/目录有写入权限 - 检查
temp/model_responses/目录是否有会话记录
6. 运行时报 ModuleNotFoundError
原因:缺少依赖包
解决:
# 让 Agent 自己安装
> 请帮我安装所有需要的 Python 依赖
# 或手动安装常见依赖
pip install requests pycryptodome qrcode streamlit pywebview
扩展阅读 / 进阶方向
浏览器自动化能力
解锁 Web 工具后,GenericAgent 可以在保留你登录态的真实浏览器中操作:
> 执行 web setup sop,解锁 web 工具
之后你可以这样用:
> 打开淘宝,搜索 iPhone 16,按价格排序
> 去 B 站,查看我最近看过的历史视频
浏览器插件位于 assets/tmwd_cdp_bridge/,支持 Chrome/Edge 等主流浏览器。
自我进化机制详解
GenericAgent 的核心差异在于每完成一个任务,自动将执行路径固化为 Skill。下次遇到类似任务,直接调用,无需重新摸索。
这意味着:
- 用得越久,Agent 越懂你的工作流
- 技能树完全属于你,不会与他人的"预设技能"雷同
- 3K 行种子代码,能生长出无限可能
Skill 库生态
社区已经积累了百万级 Skill 库(公众号文章),你可以:
- 让 Agent 搜索:
帮我找个做 XXX 的 skill - 直接导入:
访问 XXX,按照这个 skill 做
进阶模式
GenericAgent 的所有高级功能都是自文档化的——直接问 Agent 即可:
| 模式 | 问 Agent |
|---|---|
| Reflect(反射) | 查看你的代码,告诉我你的 reflect 模式怎么启用 |
| 计划任务 | 查看你的代码,告诉我你的计划任务模式怎么启用 |
| Plan(规划) | 查看你的代码,告诉我你的 plan 模式怎么启用 |
| 子代理 | 查看你的代码,告诉我你的 subagent 模式怎么启用 |
| 自主探索 | 查看你的代码,告诉我你的自主探索模式怎么启用 |
TIP
这就是 GenericAgent 的核心理念:代码即文档。Agent 能读懂自己的源码,任何功能都可以直接问它。
编程能力与 Claude Code 对比
很多开发者关心一个问题:GenericAgent 能替代 Claude Code 或 Codex 吗?
答案是:能编程,但不能完全替代。
GenericAgent 的编程能力
GenericAgent 通过 code_run 工具执行任意代码,配合 file_read/file_write/file_patch 等文件操作,编程能力是完整的。只要配上擅长编程的模型(如 Claude、GPT-4o),它就能:
- 读写文件
- 执行命令行
- 调试代码
- 解释代码逻辑
# 配置 Claude 作为后端
native_claude_config = {
'apikey': 'your-key',
'apibase': 'https://api.defapi.org',
'model': 'claude-sonnet-4-6',
'fake_cc_system_prompt': True,
}
然后直接用自然语言编程:
> 帮我写一个快速排序函数,然后运行测试
> 用 Python 实现一个 HTTP 服务器
> 解释一下这个 React 组件是怎么工作的
与 Claude Code / Codex 的区别
| 特性 | GenericAgent | Claude Code / Codex |
|---|---|---|
| 编程能力 | 完整(文件 + 代码执行) | 完整 |
| 上下文消耗 | <30K token(极省) | 200K-1M token(更大上下文) |
| 进化能力 | 每次任务沉淀 Skill,会话间积累 | 会话间无状态 |
| 部署方式 | pip install + API Key | CLI 工具 + 订阅 |
关键区别在于:Claude Code 通过自己的协议和工具链工作(类似 MCP),GenericAgent 无法直接调用它们。但有以下间接方式:
方式 1:Codeg 并行使用
Codeg 项目可以同时启动 GenericAgent + Claude Code + Codex,在同一个 UI 里协作:
# 把 GenericAgent 和 Codeg 放在同级目录
/workspace/
├── GenericAgent/
└── codeg/
# Codeg 会自动检测到 GenericAgent,然后并行使用
方式 2:通过 API 中转
GenericAgent 的 NativeClaudeSession 走的是 Claude Code 兼容协议,如果中转服务(如 Defapi)支持 Claude Code 透传,你就能用 GenericAgent 调用 Claude 的编程能力:
# GenericAgent 用 Claude 的能力编程
native_claude_config = {
'name': 'claude-defapi',
'apikey': 'your-defapi-key',
'apibase': 'https://api.defapi.org',
'model': 'claude-sonnet-4-6',
'fake_cc_system_prompt': True, # Claude Code 协议透传
}
结论
| 问题 | 答案 |
|---|---|
| GenericAgent 能编程吗? | 能,文件操作 + 代码执行是完整的 |
| 能直接调用 Claude Code 吗? | 不能,Claude Code 是独立工具 |
| 能像 Claude Code 那样编程吗? | 类似,但体验取决于后端模型 |
| 能并行使用吗? | 能,Codeg 项目支持多 Agent 协作 |
TIP
如果你既要 Claude Code 的编程体验,又要 GenericAgent 的自动化能力,可以尝试 Codeg + GenericAgent 的组合,一次对话,多个 Agent 同时协作——Claude Code 专注写代码,GenericAgent 负责自动化任务。
多实例与记忆隔离
GenericAgent 的记忆是项目级别的,不是全局的。这意味着如果你有多个项目,需要考虑如何管理记忆隔离。
记忆存储结构
GenericAgent/
├── memory/ # 记忆目录
│ ├── global_mem.txt # L2 全局事实
│ └── global_mem_insight.txt # L1 记忆索引
└── temp/
└── model_responses/ # L4 会话归档
记忆层级与作用范围:
| 层级 | 内容 | 作用范围 |
|---|---|---|
| L1 | Insight Index(记忆索引) | 项目内快速路由 |
| L2 | Global Facts(全局事实) | 项目内稳定知识 |
| L3 | Skills / SOPs(技能) | 项目内可复用流程 |
| L4 | Session Archive(会话归档) | 项目内长程召回 |
方案对比
| 方案 | 操作 | 优点 | 缺点 |
|---|---|---|---|
| A. 分别复制仓库 | 复制两份 GenericAgent | 完全独立,简单 | 代码重复,难维护 |
| B. 符号链接 | 一份代码 + 每个项目一个 memory/ 链接 | 代码集中,易维护 | 需要手动建链接 |
| C. --task 模式 | 通过 I/O 目录隔离任务 | 适合一次性任务 | 不适合长期运行的 Bot |
方案 A:分别复制(最简单)
如果你的多个项目需要完全独立的记忆,直接复制仓库是最省心的方案:
# 每个项目一个 GenericAgent 副本
~/projects/project-a/generic-agent/ → 记忆 A
~/projects/project-b/generic-agent/ → 记忆 B
~/projects/project-c/generic-agent/ → 记忆 C
# 分别启动不同的 Bot
cd ~/projects/project-a/generic-agent && python frontends/wechatapp.py
cd ~/projects/project-b/generic-agent && python frontends/qqapp.py
cd ~/projects/project-c/generic-agent && python frontends/tgapp.py
TIP
memory/ 目录很小(几 KB~几 MB),GenericAgent 核心代码也就 ~3K 行。重复成本几乎为零,但对于长期运行的 Bot,这种方案最省心。
方案 B:符号链接(代码集中)
如果你希望代码集中管理,用符号链接分离记忆:
# 1. 只克隆一份 GenericAgent
cd ~/workspace
git clone https://github.com/lsdefine/GenericAgent.git generic-agent-core
# 2. 项目 A 的 memory 链接
cd ~/projects/project-a
ln -s ~/workspace/generic-agent-core/memory ./ga-memory
# 3. 项目 B 的 memory 链接
cd ~/projects/project-b
ln -s ~/workspace/generic-agent-core/memory ./ga-memory
WARNING
这种方案的问题是所有项目的记忆会混在一起——你在项目 A 学到的东西,项目 B 也会知道。如果你需要真正隔离,还是用方案 A。
方案 C:--task 模式(适合一次性任务)
对于一次性任务,可以用 --task 模式通过 I/O 目录隔离:
# 任务 A
python agentmain.py --task project-a-task --input "帮我处理项目A的文件"
# 任务 B(独立的 I/O 目录)
python agentmain.py --task project-b-task --input "帮我处理项目B的文件"
每个任务有独立的 temp/project-a-task/ 和 temp/project-b-task/ 目录。
多 Bot 接入同一实例(记忆共享)
如果你同时跑微信 + QQ + 飞书 Bot,它们都连到同一个 GenericAgent 实例:
# 三个终端共享同一个 memory/ 目录
python frontends/wechatapp.py # 终端1
python frontends/qqapp.py # 终端2
python frontends/fsapp.py # 终端3
WARNING
这意味着你在微信里让 Agent 学到的东西,QQ 和飞书 Bot 也能"记住"。这是优势(跨平台上下文一致),也是潜在风险——确保你的使用场景适合这种设计。
迁移与清空记忆
# 迁移记忆到新项目
cp -r ~/old-project/GenericAgent/memory/ ~/new-project/GenericAgent/
# 选择性迁移某个文件
cp ~/old-project/GenericAgent/memory/global_mem.txt ~/new-project/GenericAgent/memory/
# 清空记忆,重新开始
rm -rf ~/projects/project-a/GenericAgent/memory/*
结论
| 需求 | 推荐方案 |
|---|---|
| 多项目完全隔离 + 省心 | 分别复制仓库(方案 A) |
| 代码集中 + 记忆可共享 | 符号链接(方案 B) |
| 一次性任务隔离 | --task 模式(方案 C) |
| 多 Bot 同一实例 | 默认行为,记忆共享 |
Reference
- GitHub: lsdefine/GenericAgent
- Technical Report: arXiv:2604.17091
- 入门教程: Datawhale Hello GenericAgent
- 飞书配置指南: assets/SETUP_FEISHU.md