From b20beb23c072e38b2ba0eafb5e1313071c6a9279 Mon Sep 17 00:00:00 2001 From: zhaoxi Date: Tue, 28 Apr 2026 22:48:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20workflow=5Ftemplate=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=8F=AF=E4=B8=8D=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../individual/consciousness_node/consciousness_node.py | 7 ++++--- pretor/core/individual/consciousness_node/template.py | 2 +- .../core/individual/supervisory_node/supervisory_node.py | 4 ++-- pretor/core/individual/supervisory_node/template.py | 2 +- pretor/core/workflow/workflow_runner.py | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pretor/core/individual/consciousness_node/consciousness_node.py b/pretor/core/individual/consciousness_node/consciousness_node.py index 04dab6f..5ca80bc 100644 --- a/pretor/core/individual/consciousness_node/consciousness_node.py +++ b/pretor/core/individual/consciousness_node/consciousness_node.py @@ -149,9 +149,10 @@ class ConsciousnessNode: available_skills=payload.available_skills ) self.logger.debug("ConsciousnessNode: 开始生成工作流 (原生重试开启)") - result = await self.agent.run( - "根据original_command制定严密的可执行workflow,可以学习并参考workflow_template的设计理念", - deps=deps) + prompt = "根据original_command制定严密的可执行workflow" + if payload.workflow_template: + prompt += ",可以学习并参考workflow_template的设计理念" + result = await self.agent.run(prompt, deps=deps) return result.output elif isinstance(payload, ForWorkflowInput): diff --git a/pretor/core/individual/consciousness_node/template.py b/pretor/core/individual/consciousness_node/template.py index 8ca40d8..161f483 100644 --- a/pretor/core/individual/consciousness_node/template.py +++ b/pretor/core/individual/consciousness_node/template.py @@ -52,7 +52,7 @@ class ConsciousnessNodeInput(InputModel): class ForWorkflowEngineInput(ConsciousnessNodeInput): - workflow_template: str + workflow_template: str | None = None original_command: str available_skills: list[dict] | None = None diff --git a/pretor/core/individual/supervisory_node/supervisory_node.py b/pretor/core/individual/supervisory_node/supervisory_node.py index 32809af..ec453ba 100644 --- a/pretor/core/individual/supervisory_node/supervisory_node.py +++ b/pretor/core/individual/supervisory_node/supervisory_node.py @@ -51,7 +51,7 @@ class SupervisoryNode: "你的核心职责是进行【意图识别与路由】。请仔细阅读用户的请求:\n" "1. 如果用户只是进行简单的问候、闲聊或查询非常基础的信息,请直接生成友好的回复,使用 ForUser 格式。\n" "2. 如果用户提出的是复杂任务(如需要编写代码、多步骤规划、数据处理等),请务必将其判定为需要工作流处理的任务," - " 并使用 ForConsciousnessNode 格式,同时从提供的【可用模板列表】中选择最合适的工作流模板移交给意识节点。\n" + " 并使用 ForConsciousnessNode 格式。若提供的【可用模板列表】中有合适的模板请选用,若都不匹配则 workflow_template 设为 null。\n" "3. 如果你收到的是 TerminationMessage(代表工作流已完成并生成了报告),请将报告内容转化为友好的面向用户的回复,使用 ForUser 格式。\n" "请保持冷静、专业,并严格遵循上述路由规则。" ) @@ -83,7 +83,7 @@ class SupervisoryNode: prompt += ( "\n\n注意:你必须调用且只能调用一个函数(工具)来输出结果。" "如果你想直接回复用户,请调用 ForUser;" - "如果你想移交给工作流,请调用 ForConsciousnessNode。" + "如果你想移交给工作流,请调用 ForConsciousnessNode(若没有合适的模板,workflow_template 填 null)。" "严禁返回纯文本,必须使用工具格式!" ) if ctx.deps.error_history: diff --git a/pretor/core/individual/supervisory_node/template.py b/pretor/core/individual/supervisory_node/template.py index 1c7c114..b7eb59d 100644 --- a/pretor/core/individual/supervisory_node/template.py +++ b/pretor/core/individual/supervisory_node/template.py @@ -23,7 +23,7 @@ class ForUser(SupervisoryNodeResponse): context: str = Field(..., description="对用户的回复,应当使用和蔼的语气进行回复。用于直接解答简单问题或返回最终报告。") class ForConsciousnessNode(SupervisoryNodeResponse): - workflow_template: str = Field(..., description="选择的工作流模板的名称,用于处理复杂任务。") + workflow_template: str | None = Field(default=None, description="选择的工作流模板的名称,用于处理复杂任务。若无需模板则为 None。") reasoning: str = Field(..., description="选择将任务移交意识节点并选用该模板的简短原因。") class TerminationMessage(BaseModel): diff --git a/pretor/core/workflow/workflow_runner.py b/pretor/core/workflow/workflow_runner.py index 3bbd9da..bb566d6 100644 --- a/pretor/core/workflow/workflow_runner.py +++ b/pretor/core/workflow/workflow_runner.py @@ -310,8 +310,8 @@ class WorkflowRunningEngine: if not self.consciousness_node: raise WorkflowError("未配置 consciousness_node,无法生成工作流") - workflow_template = event.context.get("workflow_template", "") - workflow_template = get_workflow_template(workflow_template) + workflow_template_name = event.context.get("workflow_template", "") + workflow_template = get_workflow_template(workflow_template_name) if workflow_template_name else None available_skills = None if self.global_state_machine: