后端全景指南:工作流调度引擎、多 Provider 执行与运行资产管理)
ChatDev 2.0DevAll后端全景指南工作流调度引擎、多 Provider 执行与运行资产管理【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/Dennis_Huang/ChatDev本文面向需要部署、编排或扩展 DevAll 后端的读者以用户指南导航页docs/user_guide/zh/index.md为骨架逐层展开工作流调度引擎、多 Provider 抽象、实时可观测性与运行资产管理四大支柱并结合仓库源码梳理一次工作流从提交到下载的完整运行流。读完本文你将掌握后端模块的划分逻辑、server_main.py的启动方式、WorkflowRunService的调度链路以及 Session / code_workspace / Attachment / Memory / Tooling 等核心术语的准确定义与代码落点。1. 文档地图从导航页俯瞰完整后端技术栈DevAll 的用户指南以docs/user_guide/zh/index.md作为导航中枢将后端相关的操作手册组织为以下子文档覆盖了从 Web UI 操作到自定义模块扩展的全部主题主题内容提要仓库位置Web UI 快速入门前端界面操作、工作流执行、人工审阅、故障排查frontend/、server/routes/websocket.py工作流编排YAML 结构、节点类型、Provider/边条件、设计模板导出、CLI 运行entity/configs/、yaml_instance/、yaml_template/design.yaml图执行逻辑DAG/循环图执行策略、Tarjan 环路检测、超级节点构建、递归式环路执行workflow/cycle_manager.py、workflow/topology_builder.py、workflow/executor/cycle_executor.pyDynamic 并行执行Map/Tree 模式、Split 拆分策略、并行处理与层级归约workflow/executor/dynamic_edge_executor.py、workflow/executor/parallel_executor.pyMemory 模块Memory 列表架构、内置simple/file/blackboard行为、嵌入配置、排障entity/configs/memory.py、runtime/node/agent/memory/Thinking 模块思考增强机制、自我反思模式、扩展自定义思考模式runtime/node/agent/thinking/Tooling 模块Function / MCP 模式、上下文注入、内置函数清单、MCP 启动方式entity/configs/tooling.py、runtime/node/agent/tool/tool_manager.py、functions/function_calling/节点类型详解Agent、Python、Human、Subgraph、Passthrough、Literal、Loop Counter 等节点配置entity/configs/node/、runtime/node/executor/附件与工件 API上传/列举/下载接口、manifest 结构、清理策略、安全限制server/routes/uploads.py、server/routes/artifacts.py、server/services/attachment_service.pyFIELD_SPECS 规范UI 表单与模板导出的字段元数据标准自定义模块必读entity/tool_spec.py、utils/schema_exporter.py配置 Schema API 契约/api/config/schema(*)请求示例、breadcrumbs 协议用户可忽略server/config_schema_router.py、schema_registry/从源码结构看这份导航覆盖了三层能力使用层Web UI、工作流编排、节点配置、机制层图执行、Dynamic 并行、Memory、Thinking、Tooling和契约层FIELD_SPECS、Schema API、附件 API。扩展开发者尤其需要注意契约层文档它们是前后端动态表单协同的基础。2. 产品概览后端视角四大技术支柱2.1 工作流调度引擎解析 YAML DAG在统一上下文中协调model、python、tooling、human等节点并把节点输出写入WareHouse/session/。后端核心解析逻辑位于entity/层entity/graph_config.py、entity/configs/graph.py定义DesignConfig/GraphDefinition数据类entity/config_loader.py负责将 YAML 反序列化为运行时对象。调度侧则集中在workflow/目录workflow/graph.py图执行主入口workflow/topology_builder.py构建前驱/后继关系、执行拓扑排序、构造超级节点图workflow/cycle_manager.pyTarjan 强连通分量SCC检测与环路信息管理workflow/executor/按策略拆分为dag_executor.pyDAG 同层并发、cycle_executor.py递归式环路执行、dynamic_edge_executor.pyMap/Tree 并行、parallel_executor.py与resource_manager.py并发与资源控制。值得强调的是节点类型的可扩展设计所有节点配置类集中在entity/configs/node/执行器通过runtime/node/registry.py注册节点内部再按需触发MemoryManager、ToolingConfig、ThinkingManager形成“配置声明、运行时装配”的插件式架构。2.2 多 Provider 抽象runtime/node/agent/providers/层封装 OpenAI、Gemini 等 API可在节点级别切换模型与鉴权亦支持额外thinking与memories配置。Provider 层以统一基类runtime/node/agent/providers/base.py抽象模型调用内置实现包括openai_provider.py兼容 OpenAI 协议的服务含兼容层base_urlgemini_provider.pyGemini API支持图片/视频/音频多模态输入自动转换为 Part。在 YAML 中Provider 配置不再维护顶层providers表而是全部挂在node.config内例如 Gemininodes: - id: multimodal_agent type: agent config: provider: gemini base_url: https://generativelanguage.googleapis.com api_key: ${GEMINI_API_KEY} name: gemini-2.0-flash-001 input_mode: messages params: response_modalities: [text, image] safety_settings: - category: HARM_CATEGORY_SEXUAL threshold: BLOCK_LOWERprovider字段缺省时回退到globals.default_provider如openaimodel、api_key、base_url等字段支持${VAR}占位便于跨环境复用。模型节点还可在同一份config中叠加thinking思考增强与memories记忆引用详见 Memory 模块 与 Thinking 模块。2.3 实时可观测性FastAPI WebSocket 将节点状态、stdout/stderr、工件事件推送至 Web UI结构化日志写入logs/便于集中收集。可观测性由三层构成REST WebSocket 通道server/routes/websocket.py提供 WS 端点server/services/websocket_manager.py管理连接server/services/websocket_executor.py在节点状态变化时主动推送事件工件事件流server/services/artifact_dispatcher.py与artifact_events.py将附件/工件事件镜像到 WebSocket类型artifact_created同时提供 REST 轮询接口/api/sessions/{session_id}/artifact-events支持after游标重拉结构化日志server_main.py启动时创建logs/目录并写入server.logutils/structured_logger.py负责结构化日志输出便于接入集中式日志系统。2.4 运行资产管理每次运行创建独立 Session附件、Python workspace、context snapshot、输出摘要等均可下载。每次运行以 Session 为边界隔离资产目录约定为WareHouse/session/其中code_workspace/Python 节点共享的工作目录自动同步附件到attachments/子目录attachments_manifest.json附件元数据清单来源、workspace 路径、存储方式等context snapshot、输出摘要等随 Session 一并归档。打包下载接口GET /api/sessions/{session_id}/download将整个WareHouse/session/打成 zip逐项获取则走附件 API/api/uploads/{session_id}、/api/sessions/{session_id}/artifacts/{artifact_id}详见 附件与工件 API。3. 架构与运行流一次工作流执行的完整旅程3.1 入口Web UI 与 CLI 汇聚到 FastAPI后端入口为仓库根目录的server_main.py它调用runtime/bootstrap/schema.py的ensure_schema_registry_populated()预填充 Schema 注册表后以 uvicorn 启动server.app:apppython server_main.py --host 0.0.0.0 --port 8000启动参数详见server_main.py中build_parser()参数默认值说明--host0.0.0.0监听地址--port8000监听端口--log-levelinfodebug/info/warning/error/critical--reload关闭开发热重载仅监视源码目录排除WareHouse/、logs/、data/、temp/、node_modules/--reload-dir源码目录自定义监视目录可重复--reload-exclude内置排除 glob排除模式需安装watchfiles才生效[!NOTE]--reload的默认监视目录严格限定为check、entity、functions、mcp_example、runtime、schema_registry、server、tools、utils、workflow等源码目录避免 Agent 生成的文件触发不必要的服务重启若未安装watchfilesuvicorn 将回退到忽略排除模式的 StatReload建议pip install uvicorn[standard]。Web UI 与 CLI 最终都调用 FastAPI 暴露的接口如POST /api/workflow/execute、POST /api/workflow/execute-sync见server/routes/execute.py、execute_sync.py。3.2 验证与入队server/services/workflow_run_service.py中的WorkflowRunService承担入口编排校验 YAML通过entity/config_loader.py反序列化并检查字段合法性含${VAR}变量解析缺失变量抛ConfigError创建 Session生成“时间戳 名称”组成的会话 ID贯穿 Web UI、后端与WareHouse/准备运行环境创建code_workspace/、attachments/目录同步已引用的附件将任务交给调度器workflow/graph.py依据图结构选择执行策略DAG 或含环图。3.3 执行阶段节点执行器runtime/node/executor/负责依赖解析、上下文传递、工具调用与 memory 检索Agent 节点agent_executor.py内按阶段pre/plan/gen/critique等见AgentExecFlowStage编排流程按需触发MemoryManagerruntime/node/agent/memory/、ToolingConfigruntime/node/agent/tool/tool_manager.py与ThinkingManagerruntime/node/agent/thinking/Python 节点python_executor.py在code_workspace/内执行脚本或内联代码Human 节点human_executor.py通过 WebSocket 阻塞等待人工输入循环控制loop_counter_executor.py、loop_timer_executor.py提供环路次数/时长限制。对于含环图workflow/cycle_manager.py用 Tarjan 算法在 O(|V||E|) 时间内检测强连通分量workflow/topology_builder.py将每个环路抽象为超级节点并构建 DAGcycle_executor.py以“识别唯一初始节点 → 构建作用域子图 → 递归检测嵌套环路 → 分层执行 → 退出条件检查”六步递归执行直到出口边触发、达到最大迭代次数默认 100或初始节点未被重触发为止完整流程见 图执行逻辑。3.4 可观测性执行期间server/services/websocket_executor.py将节点状态、stdout/stderr、工件事件实时推送到 Web UIserver/services/artifact_dispatcher.py负责将 Python 节点/工具注册的文件以artifact_created事件广播。所有 JSON 日志写入logs/可与集中日志平台对接。3.5 清理与下载Session 结束后可通过打包下载zip或附件 API 逐项获取资产。默认保留全部附件如需自动清理设置环境变量MAC_AUTO_CLEAN_ATTACHMENTS1仅在 Session 完成后删除attachments/目录。更长期的归档/清空策略如 cron/job由部署者自行制定仓库本身不删除WareHouse/下的历史文件。4. 角色导航按身份找到入口4.1 解决方案工程师 / Prompt 工程师从 工作流编排 入手掌握 YAML 编写顶层仅含version、vars、graph三键节点类型见下表再按需阅读 Memory 与 Tooling 模块节点类型描述关键字段详细文档agent调用 LLM支持工具、记忆、thinkingprovider,model,prompt_template,tooling,thinking,memoriesagent.mdpython执行 Python 代码脚本或指令共享code_workspace/entry_script,inline_code,timeout,envpython.mdhuman在 Web UI 阻塞等待人工输入prompt,timeout,attachmentshuman.mdsubgraph嵌入子 DAG复用复杂流程graph_path或内联graphsubgraph.mdpassthrough透传节点默认只传递最后一条消息only_last_messagepassthrough.mdliteral被触发时输出固定文本消息忽略输入content,roleuser/assistantliteral.mdloop_counter限制环路执行次数的控制节点max_iterations,reset_on_emit,messageloop_counter.md典型的agent human人工审阅循环可直接参考yaml_instance/net_example.yaml等示例通过边上的keyword条件none: [ACCEPT]实现“不满意则回到 Agent 重写”的闭环edges: - from: Article Writer to: Human Reviewer - from: Human Reviewer to: Article Writer condition: type: keyword config: none: - ACCEPT case_sensitive: false4.2 扩展开发者扩展开发者应结合 FIELD_SPECS 与 Tooling 模块 了解注册流程新增节点/配置类型在entity/configs/node/定义 dataclass并在runtime/node/registry.py注册执行器新增 Memory Store继承runtime/node/agent/memory/memory_base.py在runtime/node/agent/memory/registry.py调用register_memory_store(my_store, config_cls..., factory..., summary用途)新增 Thinking 模式继承runtime/node/agent/thinking/thinking_manager.py中的基类用register_thinking_mode()注册新增边条件用register_edge_condition注册默认的function类型兼容旧写法直接填写函数名字符串导出模板注册完成后运行python -m tools.export_design_template或调用 Schema API让前端动态表单自动感知新枚举。调试前端与 Schema 交互时可参考 配置 Schema API 契约/api/config/schema(*)请求示例与 breadcrumbs 协议英文版见 docs/user_guide/en/modules 系列文档。5. 常用术语速查Session一次完整运行的 ID由“时间戳 名称”组成贯穿 Web UI、后端与WareHouse/目录是资产隔离与附件鉴权的基本单元。code_workspacePython 节点共享的工作目录位于WareHouse/session/code_workspace/包含自动同步的附件attachments/子目录。Attachment用户上传或运行期间注册的文件通过 REST/WS API 可查询/下载上传接口为POST /api/uploads/{session_id}元数据记录在attachments_manifest.json。Memory Store / Memory AttachmentMemory Store 定义存储实现simple、file、blackboard、mem0Memory Attachment 是模型节点引用 Memory Store 的规则retrieve_stage、top_k、similarity_threshold、read/write等运行期由MemoryManager统一装配。Tooling模型节点绑定的工具执行环境分 Function同进程调用functions/function_calling/内的 Python 函数与 MCPRemote HTTP 直连或 Local stdio 拉起子进程两类统一挂载于AgentConfig.tooling。Artifact对附件事件的抽象用于实时监听WebSocket 事件类型artifact_createdREST 轮询见/api/sessions/{session_id}/artifact-events。Dynamic 边配置了dynamic的边按 Split 策略将消息拆分为并行单元Map 模式打平输出List[Message]Tree 模式按group_size递归归约输出单个Message详见 Dynamic 并行执行。6. 阅读路线建议第一次上手后端先读 Web UI 快速入门再对照 工作流编排 修改yaml_instance/中的示例排查循环/并发问题精读 图执行逻辑 与 Dynamic 并行执行为 Agent 赋予记忆与工具阅读 Memory 模块、Thinking 模块 与 Tooling 模块集成文件系统阅读 附件与工件 API动手改后端以 FIELD_SPECS 规范 为契约起点配合entity/configs/同名 dataclass 与yaml_template/design.yaml自动生成的基准模板完成扩展并用python -m tools.export_design_template同步前端模板。如发现本指南内容缺失或过时可在仓库提交 Issue/PR或在docs/目录内直接补充并同步至前端模板。【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/Dennis_Huang/ChatDev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考