refine: working_checkpoint desc优化(增量更新/坑排首/全新任务清旧) + CLI最小启动 + web_execute_js兼容tab_id + mem_scanner坑点更新

This commit is contained in:
Liang Jiaqing
2026-02-26 12:11:31 +08:00
parent d417cecc45
commit f0ce7215ff
4 changed files with 19 additions and 11 deletions

View File

@@ -4,15 +4,20 @@
## 第一阶段:环境启动 (Initial Ignition) ## 第一阶段:环境启动 (Initial Ignition)
1. **Python 环境检查与核心库安装** 1. **Python 环境检查**
- 确保安装了 Python 3.10+。 - 确保安装了 Python 3.10+。几乎零额外依赖。
- **必须手动执行**`pip install streamlit pywebview` - `requests` 是唯一的第三方硬依赖,但多数 Python 发行版已预装。若缺失:`pip install requests`
2. **配置身份密钥 (Credentials)** 2. **配置身份密钥 (Credentials)**
- 复制 `mykey_template.py``mykey.py` 并填入 API Key。 - 复制 `mykey_template.py``mykey.py` 并填入 API Key。
3. **唤醒 Agent** 3. **唤醒 AgentCLI 最小启动)**
- 运行 `launch.pyw`。看到悬浮窗后,我即刻上线 - 运行 `python agentmain.py`,进入 CLI 交互模式。此时 Agent 已可工作
- 后续所有依赖(包括 GUI 模式所需的包)都可以叫 Agent 帮你安装。
4. **(可选)升级为 GUI 模式**
- **指令**`pip install streamlit pywebview`
- 安装后运行 `launch.pyw`,即可使用悬浮窗 GUI 界面。
## 第二阶段:能力激活 (Ability Activation) ## 第二阶段:能力激活 (Ability Activation)

View File

@@ -48,9 +48,9 @@
}}, }},
{"type": "function", "function": { {"type": "function", "function": {
"name": "update_working_checkpoint", "name": "update_working_checkpoint",
"description": "短期工作便签,内容每轮自动注入,防长任务中关键信息丢失。要在任务前中期而非结束时调用,新任务切换时应当及时使用清除之前影响。何时调用:(1)即将切换子任务、上下文将被大量新信息冲刷前,存入当前路径/参数/进度;(2)获得后续步骤必需的关键发现后;(3)分步任务完成一步后更新为本步结果+下一步要求。原则只存N轮后可能忘记但后面还要用的信息刚发生的不用存。宁可多更新不可丢关键上下文。", "description": "短期工作便签,每轮自动注入上下文,防长任务信息丢失。调用时机:(1)任务开始、读取相关SOP后存用户原始需求和关键约束/参数;(2)子任务切换或上下文将被冲刷前,存进度/路径;(3)关键发现或完成一步后更新。切换新任务时更新内容,清旧进度但保留仍有效的约束。前中期调用,非结束时。",
"parameters": {"type": "object", "properties": { "parameters": {"type": "object", "properties": {
"key_info": {"type": "string", "description": "替换当前便签(<200 tokens只写后续必须记住的:文件路径、关键参数/发现、当前进度、下一步计划、要避的坑。刚完成的和上下文中显而易见的不写,省空间给真正容易丢的信息。"}, "key_info": {"type": "string", "description": "替换当前便签(<200 tokens增量更新:先回顾现有内容,保留仍有效的,再增删改。存:要避的坑、用户原始需求、关键参数/发现、文件路径、当前进度、下一步计划。不存:马上要用用完即丢的、上下文中显而易见的、用户已换全新任务时的旧任务信息。宁多更新不丢关键。"},
"related_sop": {"type": "string", "description": "相关sop名称可以多个必要时需要再读"}}} "related_sop": {"type": "string", "description": "相关sop名称可以多个必要时需要再读"}}}
}}, }},
{"type": "function", "function": { {"type": "function", "function": {

2
ga.py
View File

@@ -304,7 +304,7 @@ class GenericAgentHandler(BaseHandler):
script = args.get("script", "") script = args.get("script", "")
if not script: return StepOutcome(None, next_prompt="[Error] Empty script param. Check your tool call arguments.") if not script: return StepOutcome(None, next_prompt="[Error] Empty script param. Check your tool call arguments.")
save_to_file = args.get("save_to_file", "") save_to_file = args.get("save_to_file", "")
switch_tab_id = args.get("switch_tab_id") switch_tab_id = args.get("switch_tab_id") or args.get("tab_id")
result = web_execute_js(script, switch_tab_id=switch_tab_id) result = web_execute_js(script, switch_tab_id=switch_tab_id)
if save_to_file and "js_return" in result: if save_to_file and "js_return" in result:
content = str(result["js_return"] or '') content = str(result["js_return"] or '')

View File

@@ -73,7 +73,10 @@ def read_addrs(pid, addrs):
**坑点:** **坑点:**
- 进程名Weixin.exe非WeChat.exe地址字符串先`int(addr,16)` - 进程名Weixin.exe非WeChat.exe地址字符串先`int(addr,16)`
- 步骤3筛≠A排除空/乱码步骤4筛==A正向确认交替最快 - 步骤3筛≠A排除空/乱码步骤4筛==A正向确认交替最快
- **优先侧栏点击切换会话**,避免使用搜索框(搜索结果首条是广告,极易误点)。直接点左侧已有会话列表中的不同聊天即可完成差集切换 - **搜索切换会话完全可用**,大部分差集步骤直接搜索即可。注意:搜索结果首条可能是广告,粘贴后≥1.5s再点确认是联系人再点或点第2条
- 若必须搜索粘贴后≥1.5s再点结果用不常见的联系人名或点第2条结果避开广告 - **仅最终消歧步骤需侧栏点击**:候选>1时在侧栏点一个不同的人不经搜索框read_addrs看哪个地址跟随变化→那个就是标题栏
- 切换后用read_addrs验证确实切成功了再继续 - 切换后用read_addrs验证确实切成功了再继续
- 最终候选>1时的消歧不要用搜索切换直接在联系人列表中点一个靠后的人不经过搜索框然后read_addrs看哪个地址变了——变的才是标题栏没变的是搜索框残留 - **步骤3/4必须用read_addrs读原始地址集严禁重新scan**重新scan只能找到静态残留(聊天记录等)动态地址已变不在结果中会导致0候选
- **选A/B联系人用wechat_db_utils.quick_connect查真人**,避免搜索触发广告弹窗(公众号/小程序名会弹广告)
- **scan_memory返回格式**默认返回str列表每项"Addr:0x...\nHex:..."非dict。提取地址用`[int(r.split('\n')[0].split(':')[1],16) for r in results]`
- **侧栏点击禁止估算坐标**:会话列表顺序随消息变化。参考 vision_sop + wechat_send_sop 流程截图→ask_vision→精确坐标→点击