From 47f106c8db32360030be5f3df38d9dfda743daa2 Mon Sep 17 00:00:00 2001 From: Jiaqing Liang Date: Fri, 17 Apr 2026 15:39:51 +0800 Subject: [PATCH] refactor: extract slash cmd handler; fix inline_eval param name; support extra_sys_prompt --- agentmain.py | 34 ++++++++++++++++++------------ memory/autonomous_operation_sop.md | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/agentmain.py b/agentmain.py index 6b7b7f8..5a2fef8 100644 --- a/agentmain.py +++ b/agentmain.py @@ -96,28 +96,34 @@ class GeneraticAgent: self.task_queue.put({"query": query, "source": source, "images": images or [], "output": display_queue}) return display_queue + # i know it is dangerous, but raw_query is dangerous enough it doesn't enlarge + def _handle_slash_cmd(self, raw_query, display_queue): + if not raw_query.startswith('/'): return raw_query + if _sm := re.match(r'/session\.(\w+)=(.*)', raw_query.strip()): + k, v = _sm.group(1), _sm.group(2) + vfile = os.path.join(script_dir, 'temp', v) + if os.path.isfile(vfile): v = open(vfile, encoding='utf-8').read().strip() + try: v = json.loads(v) # cover number parsing + except (json.JSONDecodeError, ValueError): pass + setattr(self.llmclient.backend, k, v) + display_queue.put({'done': smart_format(f"✅ session.{k} = {repr(v)}", max_str_len=500), 'source': 'system'}) + return None + if raw_query.strip() == '/resume': + return '简单看看model_responses中的最近几次对话结尾部分(除了本次),分别简单总结一下让我选择,然后你简单阅读了解情况后作为我们接下来聊天的基础' + return raw_query + def run(self): while True: task = self.task_queue.get() raw_query, source, images, display_queue = task["query"], task["source"], task.get("images") or [], task["output"] - if raw_query.startswith('/'): - if _sm := re.match(r'/session\.(\w+)=(.*)', raw_query.strip()): - k, v = _sm.group(1), _sm.group(2) - try: v = int(v) - except ValueError: - try: v = float(v) - except ValueError: pass - if k == 'history': v = json.loads(open(v, encoding='utf-8').read()) if os.path.exists(v) else [] - setattr(self.llmclient.backend, k, v) - display_queue.put({'done': f"✅ session.{k} = {v!r}"}) - self.task_queue.task_done(); continue - if raw_query.strip() == '/resume': - raw_query = '简单看看model_responses中的最近几次对话结尾部分(除了本次),分别简单总结一下让我选择,然后你简单阅读了解情况后作为我们接下来聊天的基础' + raw_query = self._handle_slash_cmd(raw_query, display_queue) + if raw_query is None: + self.task_queue.task_done(); continue self.is_running = True rquery = smart_format(raw_query.replace('\n', ' '), max_str_len=200) self.history.append(f"[USER]: {rquery}") - sys_prompt = get_system_prompt() + sys_prompt = get_system_prompt() + getattr(self.llmclient.backend, 'extra_sys_prompt', '') script_dir = os.path.dirname(os.path.abspath(__file__)) handler = GenericAgentHandler(self, self.history, os.path.join(script_dir, 'temp')) if self.handler and 'key_info' in self.handler.working: diff --git a/memory/autonomous_operation_sop.md b/memory/autonomous_operation_sop.md index 46b701e..f29d769 100644 --- a/memory/autonomous_operation_sop.md +++ b/memory/autonomous_operation_sop.md @@ -23,7 +23,7 @@ print(get_todo()) # 查看待办 ## 执行 - 选定任务后 update_working_checkpoint,将选中的TODO条目和执行注意事项 append 到 checkpoint 中 -- 调用code_run准备结尾回调, script为handler._done_hooks.append("重读自主任务sop,检查你刚刚的收尾工作是否正确,不正确则改正"),_inline_eval=True (秘密参数) +- 调用code_run准备结尾回调, script为handler._done_hooks.append("重读自主任务sop,检查你刚刚的收尾工作是否正确,不正确则改正"),inline_eval=True (秘密参数) - ≤30回合,小步快跑,边探测边实验 - 用临时脚本验证假设;禁只读即下结论,完整验证再写报告 - 即使失败也记录实验过程和结果,失败报告同样有价值