From ed75d103f51f3a5ef1ba22483f802dc0ef9814e2 Mon Sep 17 00:00:00 2001 From: Liang Jiaqing Date: Wed, 4 Mar 2026 17:14:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=AD=E9=97=B4=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E9=A2=91=E7=8E=87/plan=5Fsop=E9=87=8D=E6=9E=84/autofi?= =?UTF-8?q?ll=20batch=E7=A4=BA=E4=BE=8B/README=E4=BE=BF=E6=90=BA=E7=89=88?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ agentmain.py | 2 +- assets/tools_schema.json | 2 +- memory/memory_management_sop.md | 4 +-- memory/plan_sop.md | 52 +++++++++++++++------------------ memory/tmwebdriver_sop.md | 5 +++- 6 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 8c7e2ff..24953e2 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,8 @@ The agent doesn't just execute — it **learns and remembers**. ## Quick Start +> 💡 **Windows零基础用户**:不知道Python是什么?[下载便携版](http://kw.fudan.edu.cn/resources/PC-Agent-Portable.zip)(19MB,解压即用) + ```bash # 1. Clone git clone https://github.com/lsdefine/pc-agent-loop.git diff --git a/agentmain.py b/agentmain.py index 18e89ec..f4a6291 100644 --- a/agentmain.py +++ b/agentmain.py @@ -137,7 +137,7 @@ if __name__ == '__main__': while True: dq = agent.put_task(raw, source='task') while 'done' not in (item := dq.get(timeout=120)): - if 'next' in item and random.random() < 0.05: # 1/20的概率写一次中间结果 + if 'next' in item and random.random() < 0.95: # 概率写一次中间结果 with open(f'{d}/output{nround}.txt', 'w', encoding='utf-8') as f: f.write(item.get('next', '')) with open(f'{d}/output{nround}.txt', 'w', encoding='utf-8') as f: f.write(item['done'] + '\n[ROUND END]\n') for _ in range(150): # 等reply.txt,5分钟超时 diff --git a/assets/tools_schema.json b/assets/tools_schema.json index 3040a86..6c73195 100644 --- a/assets/tools_schema.json +++ b/assets/tools_schema.json @@ -45,7 +45,7 @@ "parameters": {"type": "object", "properties": { "script": {"type": "string", "description": "要执行的 JavaScript 代码或JS文件路径。"}, "save_to_file": {"type": "string", "description": "结果存文件,适合返回值较长时。不支持await。", "default": ""}, - "no_monitor": {"type": "boolean", "description": "跳过页面变更监控,仅读取信息时用,省2-3秒。", "default": false}}, "required": ["script"]} + "no_monitor": {"type": "boolean", "description": "跳过页面变更监控,省2-3秒。仅在纯读取信息时设置,页面操作时不要设置。", "default": false}}, "required": ["script"]} }}, {"type": "function", "function": { "name": "update_working_checkpoint", diff --git a/memory/memory_management_sop.md b/memory/memory_management_sop.md index 2f2c42d..0a3d7d6 100644 --- a/memory/memory_management_sop.md +++ b/memory/memory_management_sop.md @@ -28,9 +28,9 @@ L3: ../memory/ (记录库层 - 包含 .md/.py 等各类文件) **特征**: - 体积限制:≤ 30 行(硬约束),< 1k tokens(期望)。严禁填写细节(除非极高频任务) - 内容:两层「场景关键词→记忆定位」映射 + RULES(红线规则 + 高频犯错点) - - 第一层:高频场景 key→value(直接给出 sop/py/L2 section 名),自包含可只写一个词 + - 第一层:高频场景 key→value(直接给出 sop/py/L2 section 名),自包含名称只写一词不重复翻译 - 第二层:低频场景仅列关键词,需要时 read L2 或 ls L3 自行定位 - - 作用:触发词,不索引则不知道有此能力 + - 核心:场景触发词极重要(不索引则不知有此能力),但严禁写How-to细节 - RULES:压缩版避坑准则,包含: - 红线规则(致命型):违反会导致进程终止或系统崩溃(如 `禁无条件杀python(会杀自己)`) - 红线规则(隐蔽型):违反不报错但产生错误结果(如 `搜索用google不用百度`) diff --git a/memory/plan_sop.md b/memory/plan_sop.md index 00f6cc2..b419468 100644 --- a/memory/plan_sop.md +++ b/memory/plan_sop.md @@ -1,40 +1,36 @@ # Plan Mode SOP -## 1. 分类:识别任务结构 -分析子任务间关系,选择匹配的结构: +> 简单任务(1-2步可完成)无需本SOP,直接做。 -- **Sequential** — 步骤间有输入输出依赖 (部署/ETL/构建) -- **MapReduce** — 多独立维度,各自深入后汇总 (5P/SWOT/多文件审查) -- **Branch** — 结果不确定,按条件选路径 (调试/探测/方案选择) -- **Loop** — 重复直到满足条件 (优化/翻页/迭代修改) -- **DAG** — 混合依赖,部分可并行 (项目开发) +## 0. 基本协议 -可嵌套:大结构某步内部用另一种结构 +进入 plan mode 后,立即调用 `update_working_checkpoint`,内容包含: -## 2. 分解模板 +1. **PLAN**:初始为 `[ ] 规划` `[ ] 执行`,规划完成后展开为详细 checklist +2. **RULES**(以下三条原文写入,每次 update 必须保留): + - 一次只做一步,完成后标 [x] 并 update checkpoint + - 每次 checkpoint 必须保留完整 PLAN + RULES + - 全部 [x] 才可收尾 -**Sequential:** `[ ] A → [ ] B → [ ] C` +## 1. 规划阶段 -**MapReduce:** -``` -MAP [子流程: 读现状→分析→输出]: -[ ] 维度1: ... -[ ] 维度2: ... -REDUCE: -[ ] 汇总 → 终稿 -``` +初始 checkpoint:`[ ] 规划` `[ ] 执行`。"规划"完成 = 展开执行步骤并 update checkpoint。 -**Branch:** `[ ] 尝试X → 成功:[ ]Y / 失败:[ ]Z` +### 1a. 读 SOP +查 insight 找相关 SOP 并读取——SOP 提供任务骨架,直接指导分解。无则跳过。不确定性最高的环节先探,其结果可能推翻整个计划。 -**Loop:** `[ ] LOOP(max=N): 执行→检查→调整` +### 1b. 分类 +从依赖关系读出结构:有依赖→Sequential | 无依赖→MapReduce | 条件未知→Branch。可嵌套。 -**DAG:** `[ ] A → [ ]{B,C}并行 → [ ]D汇聚` +### 1c. 分解 +按结构展开 checklist(每步须有独立完成判据,否则继续拆)。update checkpoint 并标 `[x] 规划`。 +- Seq: `[ ]A → [ ]B → [ ]C` +- MR: `MAP: [ ]D1 [ ]D2 … REDUCE: [ ]汇总` +- Branch: `[ ]尝试X → 成功:[ ]Y / 失败:[ ]Z` -## 3. 写入 checkpoint +## 2. 执行注意 -=== PLAN (结构类型) === -... -=== PLAN RULES === -- 每完成/跳过一步,重新 update working checkpoint -- 任何 checkpoint update 必须保留 PLAN -================ \ No newline at end of file +- 计划有误时回到规划修正,不硬凑;不可逆操作前多验证一步 +- MapReduce 的 MAP 可用 subagent 并行执行 +- 步骤间用尽量用文件传递中间结果和汇总,不靠上下文记忆 +- 收尾:全部 `[x]` 后汇总结果,清理 checkpoint \ No newline at end of file diff --git a/memory/tmwebdriver_sop.md b/memory/tmwebdriver_sop.md index 674f154..b019a74 100644 --- a/memory/tmwebdriver_sop.md +++ b/memory/tmwebdriver_sop.md @@ -67,7 +67,10 @@ document.body.appendChild(el); // 响应写回el.textContent ## autofill获取 检测:web_scan输出input带`data-autofilled="true"`,value显示为受保护提示(非真实值,Chrome安全保护需点击释放) -- ⭐首选CDP:tabs获取tabId→CDP mousePressed点击输入框→autofill值释放→JS读`.value`(无需前台) +- ⭐首选CDP batch一次完成:tabs获tabId→mousePressed+mouseReleased点击**任一**输入框→全部autofill字段值释放→JS读`.value` + - ⚠点击一个autofill字段会释放页面上所有autofill字段的值,无需逐个点击 + - ⚠必须mousePressed+mouseReleased配对才算完整点击 + - batch示例:`{cmd:'batch',commands:[{cmd:'tabs'},{cmd:'cdp',tabId:'$0.0.id',method:'Input.dispatchMouseEvent',params:{type:'mousePressed',x:X,y:Y,button:'left',clickCount:1}},{cmd:'cdp',tabId:'$0.0.id',method:'Input.dispatchMouseEvent',params:{type:'mouseReleased',x:X,y:Y,button:'left',clickCount:1}}]}` - 备选PostMessage物理点击(仅Windows/需前台):枚举Chrome窗口标题匹配→rect*dpr→WM_LBUTTONDOWN/UP到Chrome_RenderWidgetHostHWND子窗口 - 坑:多RenderWidgetHostHWND共存,必须按父窗口标题匹配再取子窗口