新增: T4 工作流 DAG 注入完整实现

PerConvState:
- workflow_id: Option<String> — 关联的工作流 ID
- workflow_dag_summary: Option<String> — 预计算 DAG 摘要

system_prompt 注入:
- 检测 workflow_dag_summary,非空时注入 [工作流] 块

workflow_context.rs:
- build_dag_summary: 从 DagDef 构建可读 DAG 摘要文本
- extract_active_path: 提取从根到当前节点的活跃路径
- topological_layers: 拓扑分层排序(含环检测)
- 3 个单元测试覆盖线性 DAG / 中途路径 / 空 DAG
This commit is contained in:
lxy
2026-07-20 08:58:37 +08:00
parent 1eb2ca7dc5
commit e222d38e7c
3 changed files with 202 additions and 11 deletions
+14 -4
View File
@@ -881,10 +881,20 @@ pub(crate) async fn run_agentic_loop(
let behavior_prompt = "\n## AI 定位\n你是 DevFlow 的 AI 助手,拥有完整的工具链。用户只负责提需求和审批,所有执行由你完成——读写文件、运行命令、创建项目、搜索代码等都是你直接调用工具完成的。**绝不输出“请在终端执行以下命令”这类指令——你自己用 run_command 工具执行即可。**\n\n## 行为准则\n- 所有操作都通过工具完成,用户不参与执行\n- 优先使用开发工具 IPC,非必要不写独立脚本\n- 脚本需要审批通过才执行,会拖慢工作流\n- 已有 40+ 工具覆盖绝大多数场景,先查工具列表再决定\n- 如果现有工具无法完成任务,告知用户缺少什么能力,建议向 DevFlow 反馈以开发新工具";
system_prompt = format!("{}\n\n{}\n\n{}", system_prompt, env_prompt, behavior_prompt);
// T4: 工作流 DAG 注入(预留 — 待 PerConvState 加 workflow_id 字段后接入)
// 在此处检测 conv.workflow_id,加载 DAG 并注入 WorkflowContextBlock 到 system_prompt
// 当前仅日志占位,不改变任何行为
tracing::trace!(conv_id = %conv_id, "[ai] T4 工作流注入点已就位");
// T4: 工作流 DAG 注入 — 当会话关联工作流时,将活跃路径注入 system prompt
{
let session = session_arc.lock().await;
if let Some(conv) = session.conv_read(&conv_id) {
if let Some(ref dag_summary) = conv.workflow_dag_summary {
system_prompt = format!("{}[工作流]\n{}\n", system_prompt, dag_summary);
tracing::debug!(
conv_id = %conv_id,
workflow_id = ?conv.workflow_id,
"[ai] T4: 已注入工作流 DAG 上下文"
);
}
}
}
// ── 多 Agent 并行执行:Coordinator 分解(plan_execution_enabled 时) ──
// 对话透明化 L1:拍快照供 AiCompleted 事件携带(coordinator 路径出口也用)