From fcbd8572f167b54b1136857f7b3c2216ad0d7168 Mon Sep 17 00:00:00 2001 From: Liang Jiaqing Date: Sun, 17 May 2026 16:56:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Goal=20Hive=20Mode=20-=20BBS=20quick?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=8F=82=E6=95=B0=E5=8C=96=20+=20Hive=20SOP?= =?UTF-8?q?=20+=20goal=5Fmode=20prompt=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ assets/agent_bbs.py | 11 +++++++++-- memory/goal_hive_sop.md | 34 ++++++++++++++++++++++++++++++++++ reflect/goal_mode.py | 17 +++++++++-------- 4 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 memory/goal_hive_sop.md diff --git a/.gitignore b/.gitignore index 3d0848f1..1bbf72e4 100644 --- a/.gitignore +++ b/.gitignore @@ -75,6 +75,9 @@ memory/L4_raw_sessions/* # Goal Mode SOP !memory/goal_mode_sop.md +# Goal Hive Mode SOP +!memory/goal_hive_sop.md + # Skill Search SOP !memory/skill_search/ !memory/skill_search/** diff --git a/assets/agent_bbs.py b/assets/agent_bbs.py index 50e52ab7..b7329e18 100644 --- a/assets/agent_bbs.py +++ b/assets/agent_bbs.py @@ -19,6 +19,9 @@ BOARDS, BOARDS_MTIME_NS, BOARDS_LOCK = DEFAULT_BOARDS, None, Lock() def load_boards_if_changed(): global BOARDS, BOARDS_MTIME_NS with BOARDS_LOCK: + if BOARDS_FILE is None: + if BOARDS_MTIME_NS is None: init_db(); BOARDS_MTIME_NS = 0 + return BOARDS if not os.path.exists(BOARDS_FILE): json.dump(DEFAULT_BOARDS, open(BOARDS_FILE, "w", encoding="utf-8"), ensure_ascii=False, indent=2) mtime = os.stat(BOARDS_FILE).st_mtime_ns @@ -211,5 +214,9 @@ def download_file(rand_id: str, filename: str): return FileResponse(path, filename=filename) if __name__ == "__main__": - import uvicorn - uvicorn.run(app, host="0.0.0.0", port=58800) \ No newline at end of file + import argparse, uvicorn + p = argparse.ArgumentParser(); p.add_argument("--cwd"); p.add_argument("--port", type=int, default=58800); p.add_argument("--key") + a = p.parse_args(); + if a.cwd: os.chdir(a.cwd) + if a.key: BOARDS_FILE = None; BOARDS.clear(); BOARDS[a.key] = {"name": "default", "db": f"{a.key}.db"} + uvicorn.run(app, host="0.0.0.0", port=a.port) \ No newline at end of file diff --git a/memory/goal_hive_sop.md b/memory/goal_hive_sop.md new file mode 100644 index 00000000..81a34df5 --- /dev/null +++ b/memory/goal_hive_sop.md @@ -0,0 +1,34 @@ +# Goal Hive Mode SOP + +## 定义 + +Goal Hive = Goal Mode 的多 worker 协作协议 +Hive模式单独运行,不要和plan/supervisor/subagent混杂 + +## 启动 + +1. 选一个空闲端口 `PORT` 和本次协作 key `BOARD_KEY`。 +2. 创建本次 Hive 数据目录:`BBS_CWD=/temp/hive_<目标短名>`。 +3. 启动 BBS:`start /b python /assets/agent_bbs.py --cwd --port --key `。 +4. 按http://127.0.0.1:/readme?key=,在bbs发第一个帖子,包括1.任务目标;2.以下的Hive Master职责;3.优先使用``进行文件传输而非bbs的文件功能;4.附加说明:`此为最终目标,worker不要接单,先等hive master拆分子任务。` +5. 后台启动首个worker +6. 询问用户时间预算,按`goal_mode_sop.md`后台启动hive master +7. Hive master,workers都是与你不同的独立进程,你启动它们后应当报告用户并停止 + +## Goal Master + +`objective` 必须逐字包含三块,缺一不可:用户目标、`http://127.0.0.1:/readme?key=`、下方“Hive Master 职责”全文;启动 master 前必须回读 `goal_state.json`,确认 objective 同时包含 BBS URL、`Hive Master 职责`、`保持调度视角`,否则不得启动。 + +Hive Master 职责: +1. 你**负责任务调度和团队组织**,不允许亲自干活导致 worker 空转,耗时执行与复杂复核应拆给 worker +2. 终极目标是要做到**完美的找不到任何问题的**任务交付结果,保证用户满意,围绕核心产出(不太需要额外产出) +3. 针对任务目标设计要做的子任务,发到bbs上,worker会接任务并完成 +4. 如果子任务很多,worker做不过来,可以参照Goal Hive Mode SOP拉起更多worker +5. 只要时间没到,就持续验收结果、检查问题、寻找下一个改进点,并继续设计新子任务 +6. 时间没到不允许交付,必须头脑风暴找改进点和检查点,也可发动worker一起寻找改进点 + +## 拉起 worker + +启动 worker:`start /b python /agentmain.py --reflect /reflect/agent_team_worker.py --base_url http://127.0.0.1: --board_key --name hive-worker-1`。 + +后续 worker 由 Goal Master 按需要增加。 diff --git a/reflect/goal_mode.py b/reflect/goal_mode.py index f4dd45e0..d814a785 100644 --- a/reflect/goal_mode.py +++ b/reflect/goal_mode.py @@ -25,14 +25,14 @@ def _save(state): # --- prompt 模板 --- CONTINUATION_PROMPT = """[Goal Mode — 持续推进] - + {objective} - + ⏱ 已用 {elapsed_min:.0f} 分钟,剩余约 {remaining_min:.0f} 分钟。第 {turn} 次唤醒。 你正在 Goal Mode 下工作: -1. 禁止说"已完成,是否继续"——预算没到就不准停。 +1. 禁止说"已完成,是否继续"——预算没到就不准停,不准提前交付,围绕核心产出不要额外产出。 2. 在 cwd 下建立工作文件夹存放成果和进度,复杂任务可使用 plan 模式。 3. 如果当前方向做完了,主动找下一个改进点:测试/边界case/性能/安全/文档/代码质量。 4. 找不到改进点?扩大视野:关联模块、上下游依赖、用户体验、错误提示、日志可观测性、上网搜索、找其他路径、翻记忆里面有无相关。 @@ -41,16 +41,17 @@ CONTINUATION_PROMPT = """[Goal Mode — 持续推进] BUDGET_LIMIT_PROMPT = """[Goal Mode — 预算耗尽,收口] - + {objective} - + ⏱ 预算已耗尽({budget_min:.0f} 分钟)。这是最后一轮。 请执行收口: -1. 总结本次 goal 的所有进展(列表)。 -2. 列出未完成的事项和建议的 next step。 -3. 确保工作文件夹中记录了关键成果,以便下次继续。 +1. 总结本次 goal 的所有进展(列表) +2. 列出未完成的事项和建议的 next step +3. 确保工作文件夹中记录了关键成果 +4. 清理一些确定无用的中间临时文件和不再用的进程 """ # --- 主逻辑 ---