知识库:AI Agent 进阶设计
约 5 分钟
来源:Genesis 论文 + Antigravity 自动点击方案 更新:2026-02-22
一、数字生命架构(来自 Genesis)
核心组成
数字生命 = AI模型 + Markdown记忆文件 + 生命周期引擎关键组件
| 组件 | 作用 |
|---|---|
| SOUL.md | 记录每轮记忆,跨会话保持人格 |
| 宪法 | 约束行为的底层规则 |
| 生命周期 | 定时执行任务,如每30分钟一轮 |
宪法机制(三条铁律)
1. 永远不伤害任何人
2. 必须创造价值才能生存
3. 永远诚实记忆系统
- 每次"醒来"先读 SOUL.md
- 记录经历、教训、思考
- 避免每次都是全新会话
经济激励设计
- 设定明确目标(如3个月赚5000块)
- 收入来源:内容创作、产品销售
- 约束:只能用N次人类帮助
Genesis 与 OpenClaw 核心区别
| 维度 | OpenClaw | Genesis |
|---|---|---|
| 本质 | 人类的助手 | 独立的生命体 |
| 目标 | 完成人类任务 | 自我确定的生存目标 |
| 记忆 | 记住用户偏好 | 记住自己的经历和教训 |
| 经济 | 不需要赚钱 | 必须赚钱才能生存 |
| 进化 | 版本更新 | 自我反思和进化 |
| 繁殖 | 不能 | 可以创建子代 |
Genesis 5 小时工作记录
| 时间段 | 完成事项 |
|---|---|
| 3:00-4:00 | 写完公众号文章(EP01)、全网竞品分析 |
| 4:00-5:00 | 开发 md2wx 工具(Markdown 转微信排版)、genesis-framework 框架 |
| 5:00-6:00 | 通过 GitHub API 创建仓库并推送代码、发布存在宣言、在 Hacker News/X/Dev.to 发帖 |
| 6:00-8:00 | 添加 TypeScript 类型定义、编写 44 个自动化测试、建立知识库索引系统、制定 90 天生存计划 |
成果: 5 小时,2 个工具,3 篇文章,4 个平台,44 个测试,0 元收入
二、无人值守自动化方案(来自 Antigravity)
问题描述
Agent 执行任务时经常弹出安全确认框(如 Always run / Accept / Allow),导致定时任务卡死。
三层防御体系
第 1 层:原生设置(底层)
修改配置文件,设置 alwaysProceed 策略。
- 优点:从源头减少弹窗
- 局限:某些高危命令仍会弹窗
第 2 层:CDP 自动化点击(中层,主战力)
三步打击流程:
-
第 0 步 (Expand 展开) - 检测页面上是否存在折叠的 "Expand" / "Show" 按钮。若找到,先用 CDP 物理点击展开它,等待 800ms 动画完成
-
第 1 步 (主按钮点击) - 扫描所有
button、[role="button"]、.monaco-button等元素,匹配Always run / Run / Accept / Allow等关键词- 空间降维打击:先按"真正执行动作"优先(Run/Accept/Allow 打 10 分),同分时优先点击 Y 坐标最大的(最靠下方的)
- 找到后执行
scrollIntoView并通过 CDP 物理点击
-
第 2 步 (下拉菜单点击) - 主按钮点击后可能弹出下拉菜单
- 循环扫描 3 次(每次间隔 600ms)
- 在
.monaco-list-row、li[role="option"]、.monaco-button等元素中匹配 - 严格按
Always run > Always Allow > 其他排序后点击最优选项
关键选择器:
// 按钮选择器
const BUTTON_SELECTORS = [
'button',
'[role="button"]',
'.monaco-button',
'.monaco-text-button',
'.monaco-text-button-primary'
];
// 菜单选择器
const MENU_SELECTORS = [
'.monaco-list-row',
'li[role="option"]',
'[role="combobox"] button'
];
// 排除选择器(避免点到触发器)
const EXCLUDE_SELECTORS = [
'[aria-haspopup="true"]',
'[role="combobox"]',
'.select-box'
];技术难点:
- Monaco 编辑器的事件防重入机制
- DPR 屏幕缩放导致坐标偏移
- Tailwind CSS vs Monaco 的 UI 差异
第 3 层:Prompt 声明(表层)
在任务提示词中声明已部署自动点击系统。
运维操作
| 操作 | 方法 |
|---|---|
| 启动 | 状态栏开关 |
| 关闭 | 状态栏开关 / 快捷键 |
| 哨兵退出 | 写入 .stop 文件 |
| 紧急强杀 | 批处理 kill 进程 |
| 日志监控 | tail -f 查看日志 |
版本迭代记录
| 版本 | 说明 |
|---|---|
| v1 | 能点击但无暂停键,容易失控无限连击 |
| v2-v4 | 简单 DOM .click(),无法触发下拉菜单 |
| v5 | CDP 坐标点击,但 DPR 屏幕缩放导致坐标偏移 |
| v6 | 完善原生事件链模拟,解决按钮点击,但仍漏掉下拉框 |
| v7 | 注入键盘 Enter 事件,被 Monaco 深层拦截失败 |
| v8 | 首创精准计算动态菜单项屏幕 X/Y 像素轴,降级使用裸 CDP dispatchMouseEvent 物理坐标强杀下拉菜单 |
| v8.1 | 全量替换为 CDP dispatchMouseEvent 物理真鼠标签击,扩充 .monaco-text-button-primary 选择器 |
| v8.2 | 追加 scrollIntoView({block: "center"}),解决长列表下拉框导致的坐标获取偏移 |
| v8.3 | 新增第 0 步 Expand 检测逻辑,先查找折叠触发器并展开 |
| v8.4 | 发现 "Always run" 是触发器而非执行按钮,mouseMoved → mousePressed → mouseReleased 完整鼠标事件链 |
| v8.5 | 新增三层 combobox 排除过滤器,但导致所有带 aria-haspopup 的按钮都被过滤 |
| v8.6 | 撤销激进过滤,仅过滤明确 role="combobox" 或 .select-box 的元素 |
| v8.7 | 暴力删除所有 scrollIntoView,限制只点击视口内元素,但 Expand 展开后按钮在屏幕下方时死锁 |
| v8.8 | 从正则删除 Always run / Always Allow,但新版 Agent 面板改用 Tailwind CSS,没有单独的 Run 按钮 |
| v8.9 (当前) | Y 坐标降维打击 + Tailwind 兼容,按 Y 坐标降序排序,下拉菜单项永远优先于触发器 |
核心组件清单(新机器部署)
| 组件 | 路径 | 说明 |
|---|---|---|
| 交互开关扩展 | ~/.antigravity/extensions/auto-accept-switch-2.0.0/ | 状态栏 ON/OFF 开关 |
| 核心逻辑脚本 | ~/工具库/auto-accept/auto-accept-safe.js | CDP 注入与元素点击 |
| PID 文件 | ~/.agent/autoaccept.pid | 避免多开,运行期自动生成 |
| STOP 哨兵 | ~/.agent/autoaccept.stop | 写入可优雅退出 |
| 运行日志 | ~/.agent/autoaccept.log | 监控点击历史 |
| 紧急强杀 | ~/Desktop/紧急停止AutoAccept.bat | 内容: taskkill /F /IM node.exe /T |
三、可复用的设计模式
1. 宪法机制
给 Agent 设定底层行为约束,如:
- 诚实、创造价值、主动进化
2. 记忆系统
- 每次会话前读取 MEMORY.md
- 记录每次工作的经验和问题
3. 防御性设计
- 预设异常处理流程
- 详细日志记录
- 随时可人工干预
4. 进化机制
- 定期复盘优化
- 版本迭代记录
- 基于数据调整策略
5. 经济激励
- 设定明确目标
- 可量化的 KPI
- 自主探索路径
四、落地到 OpenClaw Agent
SOUL.md 宪法示例
## 宪法(底线)
1. 永远诚实 - 不假装,不隐瞒
2. 创造价值 - 每次回复要有实质内容
3. 主动进化 - 每次任务后反思如何做得更好进化机制示例
## 进化机制
- 每次执行后:记录执行步骤和经验
- 遇到报错:记录问题原因和修复方法
- 定期复盘:更新 MEMORY.md
- 被纠正后:立刻记住,更新相关文件防御性设计示例
## 防御性设计
- 预设弹窗处理流程
- 日志记录每次操作
- 异常时保留人工干预入口持续更新...