后端架构导览:从文档地图到工作流调度、Provider 抽象与可观测性)
ChatDevDevAll 2.0后端架构导览从文档地图到工作流调度、Provider 抽象与可观测性【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev本指南以 docs/user_guide/zh/index.md 为骨架面向需要部署、编排或扩展 DevAll 后端的读者系统梳理后端产品全貌工作流调度引擎、多 Provider 抽象、实时可观测性与运行资产管理并给出从 Web UI、CLI 到 SDK 的完整运行链路与角色化学习路径。读完本文你将掌握后端各模块的职责边界、一次工作流从入口到出资产的完整生命周期以及如何按角色定位找到对应文档与源码。1. 后端用户文档地图docs/user_guide/zh/目录是 DevAll 后端的统一文档入口。作为导航页index.md 将全部子文档组织成一张主题表覆盖从「打开界面」到「自定义模块」的完整链路。下表为转换到仓库根目录后的完整文档地图英文版镜像位于 docs/user_guide/en/主题内容提要仓库路径Web UI 快速入门前端界面操作、工作流执行、人工审阅、故障排查docs/user_guide/zh/web_ui_guide.md工作流编排YAML 结构、节点类型、Provider/边条件、设计模板导出、CLI 运行docs/user_guide/zh/workflow_authoring.md图执行逻辑DAG/循环图执行策略、Tarjan 环路检测、超级节点构建、递归式环路执行docs/user_guide/zh/execution_logic.mdDynamic 并行执行Map/Tree 模式、Split 拆分策略、并行处理与层级归约docs/user_guide/zh/dynamic_execution.mdMemory 模块Memory 列表架构、内置simple/file/blackboard行为、嵌入配置、排障docs/user_guide/zh/modules/memory.mdThinking 模块思考增强机制、自我反思模式、扩展自定义思考模式docs/user_guide/zh/modules/thinking.mdTooling 模块Function / MCP 模式、上下文注入、内置函数清单、MCP 启动方式docs/user_guide/zh/modules/tooling/README.md节点类型详解Agent、Python、Human、Subgraph、Passthrough、Literal、Loop Counter 等节点配置docs/user_guide/zh/nodes/附件与工件 API上传/列举/下载接口、manifest 结构、清理策略、安全限制docs/user_guide/zh/attachments.mdFIELD_SPECS 规范UI 表单与模板导出的字段元数据标准自定义模块必读docs/user_guide/zh/field_specs.md配置 Schema API 契约/api/config/schema(*)请求示例、breadcrumbs 协议docs/user_guide/zh/config_schema_contract.md其中「节点类型详解」docs/user_guide/zh/nodes/下分别收录了 agent、human、literal、loop_counter、loop_timer、passthrough、python、subgraph 等独立文档与源码中内置节点一一对应见下文第 4 节。2. 产品概览后端视角2.1 工作流调度引擎后端核心是一个 YAML 驱动的调度引擎解析 DAG有向无环图定义在统一上下文中协调agent、python、tooling、human等节点并把节点输出写入WareHouse/session/目录。这一职责由 workflow/graph.py 中的GraphExecutor承担其执行入口run()依次完成通过GraphManager.build_graph()构建图层结构与环路检测调用_prepare_edge_conditions()编译全部边条件与载荷处理器runtime/edge/conditions/ 与 runtime/edge/processors/根据图的性质选择执行策略普通图走DagExecutionStrategyworkflow/runtime/execution_strategy.py含环路走CycleExecutionStrategy多数投票场景走MajorityVoteStrategy。每次运行都会创建独立的 Session输出统一落入 run.py 定义的WareHouse/根目录下WareHouse/session/实现运行资产的按次隔离。2.2 多 Provider 抽象runtime/node/agent/providers/层把 LLM 调用抽象为统一的 Provider 接口支持在节点级别切换模型与鉴权。从 builtin_providers.py 可以看到内置注册了两个实现openai基于官方 OpenAI SDKresponses API的OpenAIProvidergemini基于google-genai的GeminiProvider且采用延迟导入——当google-genai库未安装时优雅降级打印提示而不注册不会因缺依赖导致启动失败。在模型节点上除了选择 Provider 与模型还可以叠加额外的thinking与memories配置分别触发 Thinking 管理器与 Memory 管理器详见 docs/user_guide/zh/modules/thinking.md 与 docs/user_guide/zh/modules/memory.md。2.3 实时可观测性后端基于 FastAPI WebSocket 提供实时观测节点状态、stdout/stderr、工件artifact事件都会被推送到 Web UI同时结构化 JSON 日志写入logs/便于集中收集与排障。相关实现位于WebSocket 推送通道server/services/websocket_manager.py、server/services/websocket_logger.py结构化日志utils/structured_logger.py定义了REQUEST、RESPONSE、ERROR、WORKFLOW、SECURITY、PERFORMANCE等LogType统一输出 JSON 格式日志。server_main.py启动时默认在logs/下生成server.log同时输出到标准流--log-level支持debug/info/warning/error/critical五档。2.4 运行资产管理每次运行创建独立 Session附件、Python workspace、context snapshot、输出摘要等均可下载。目录约定WareHouse/session/单次运行的全部资产根目录WareHouse/session/code_workspace/Python 节点共享的工作目录WareHouse/session/code_workspace/attachments/自动同步的用户附件。这些目录的实际创建可在 run.py 的build_task_input_payload()与 server/services/attachment_service.py 中确认。3. 架构与运行流详解原文档给出了五步运行流结合源码可以还原出完整的调用链3.1 入口Web UI 与 CLI 调用 FastAPI服务入口是 server_main.py对应 FastAPI 应用定义于 server/app.py应用名为DevAll Workflow Server。HTTP 侧前端通过POST /api/workflow/execute提交执行请求见 server/routes/execute.py请求体WorkflowRequest定义于 server/models.py携带session_id、yaml_file、task_prompt、attachments等字段服务端先ensure_known_session()校验 WebSocket 连接再以asyncio.create_task异步启动WorkflowRunService.start_workflow()立即返回{status: started}执行结果通过 WebSocket 异步回推。CLI 侧则完全绕开 HTTP直接调用执行引擎见第 5 节。3.2 验证与入队server/services/workflow_run_service.py 中的WorkflowRunService承担验证与编排_resolve_yaml_path()通过validate_workflow_filename()server/services/workflow_storage.py校验文件名禁止路径穿越且只允许读取配置目录YAML_DIR下的 YAML校验task_prompt与attachments至少提供其一否则抛出ValidationError调用attachment_service.prepare_session_workspace()准备code_workspace/attachments/随后create_session()创建 Session 记录发送workflow_started事件后进入_execute_workflow_async()load_config()解析 YAML →GraphConfig.from_definition()构建配置 → 构造WebSocketGraphExecutor执行。执行期间任何WorkflowCancelledError/ValidationError/ 其他异常都会被捕获并转换为对应状态CANCELLED/ 错误通过 WebSocket 以workflow_cancelled/error事件通知前端finally中调用session_controller.cleanup_session()清理资源。3.3 执行阶段调度器在 workflow/graph.py 的GraphExecutor中运行 DAG。关键点依赖解析与上下文传递GraphManagerworkflow/graph_manager.py构建图层节点按拓扑顺序触发边上的条件管理器condition_manager与载荷处理器决定消息是否放行、如何变换策略式节点执行器NodeExecutorFactory.create_executors()runtime/node/executor/factory.py遍历节点注册表为每种节点类型创建对应执行器_process_result()按node.type分发按需触发的扩展能力_build_memories_and_thinking()在运行开始时为每个引用全局 Memory Store 的 agent 节点构建MemoryManager为声明了thinking的节点构建ThinkingManagerToolingFunction/MCP由ToolingConfig在模型节点内按需挂载三者共同构成「模型节点 工具 记忆 思考」的增强执行环境。3.4 可观测性回传执行过程中server/services/websocket_executor.py 通过WebSocketGraphExecutor把节点开始/结束、输入输出摘要、stdout/stderr、artifact 事件实时推送到 Web UI同时 utils/logger.py 的WorkflowLogger记录结构化日志logs/ 存放 JSON 日志WareHouse/保存运行资产。3.5 清理与下载Session 结束后运行资产保留在WareHouse/session/可选择整体打包下载也可通过附件 APIserver/routes/attachments.py接口规范见 docs/user_guide/zh/attachments.md逐项获取具体保留策略由部署者自行制定。WebSocket 侧的会话控制与状态机见 server/services/session_store.py 与 server/services/session_execution.py。4. 节点类型与执行器注册后端采用「注册表 工厂」模式组织节点类型。内置节点集中注册于 runtime/node/builtin_nodes.py每个节点通过register_node_type()绑定配置类、执行器类与能力描述节点类型配置类执行器能力要点agentAgentConfigAgentNodeExecutor由 LLM/工具 Provider 驱动支持 tooling、memory、thinking 扩展humanHumanConfigHumanNodeExecutor暂停图执行等待人工响应资源上限 1pythonPythonRunnerConfigPythonNodeExecutor执行仓库内 Python 片段资源上限 1subgraphSubgraphConfigSubgraphNodeExecutor通过文件路径或内联配置嵌入另一个命名子图passthroughPassthroughConfigPassthroughNodeExecutor原样转发上游节点输出literalLiteralNodeConfigLiteralNodeExecutor每次被触发时发出固定文本消息loop_counterLoopCounterConfigLoopCounterNodeExecutor阻塞下游直到达到迭代上限后释放循环loop_timerLoopTimerConfigLoopTimerNodeExecutor阻塞下游直到达到时间上限后释放循环此外subgraph 支持两种来源configYAML 内联定义配置类SubgraphInlineConfig与file引用外部 YAML 文件配置类SubgraphFileConfig对应register_subgraph_source()的两次注册。每种节点的配置字段详解见 docs/user_guide/zh/nodes/。5. 三种运行方式5.1 Web UI 方式通过POST /api/workflow/execute提交session_id yaml_file task_prompt执行过程经 WebSocket 实时回传。界面操作、人工审阅与故障排查见 docs/user_guide/zh/web_ui_guide.md。前端源码位于 frontend/Vue 3 Vite配置模板参考 frontend/public/design_0.4.0.yaml。5.2 CLI 方式run.py 提供了最直接的命令行入口python run.py --path yaml_instance/demo_human.yaml --name my_project常用参数参数默认值说明--pathyaml_instance/net_loop_test_included.yamldesign_0.4.0工作流 YAML 文件路径--nametest_project项目名称同时用作 Session 名--fn-module无提供边辅助函数的可选模块--inspect-schema关闭输出配置 Schema 后退出--schema-breadcrumbs无JSON 数组形式的 schema breadcrumbs如[{node:DesignConfig,field:graph}]--attachment无附加到初始用户消息的文件路径可重复CLI 会交互式询问任务提示词Please enter the task prompt:随后执行GraphExecutor.execute_graph()并在结束时打印graph_context.final_message()。仓库内提供了大量可直接运行的示例 YAML位于 yaml_instance/例如demo_human.yaml、demo_loop_counter.yaml、demo_mcp.yaml、deep_research_v1.yaml等。5.3 SDK 方式后端还暴露了 Python SDK 入口 runtime/sdk.py可在 Python 代码中以函数调用方式运行工作流from runtime.sdk import run_workflow result run_workflow( yaml_instance/demo_human.yaml, task_prompt完成一次示例任务, session_namesdk_demo, ) print(result.final_message.text_content())run_workflow()返回WorkflowRunResult含final_message与WorkflowMetaInfo含session_name、output_dir、token_usage、outputs。若未指定session_nameSDK 会自动生成sdk_yaml名称_时间戳形式的 Session 名支持通过attachments参数注入文件内部经AttachmentStore与TaskInputBuilder组装为多消息输入也可用variables覆盖 YAML 中的变量。6. 角色化学习路径6.1 解决方案工程师 / Prompt 工程师起点docs/user_guide/zh/workflow_authoring.mdYAML 结构、节点类型、Provider 与边条件、模板导出、CLI 运行需要跨节点保留上下文时阅读 docs/user_guide/zh/modules/memory.mdsimple/file/blackboard三种内置存储需要让 Agent 调用外部能力时阅读 docs/user_guide/zh/modules/tooling/README.mdFunction 与 MCP 两种模式需要思考增强时阅读 docs/user_guide/zh/modules/thinking.md。6.2 扩展开发者先读 docs/user_guide/zh/field_specs.mdFIELD_SPECS 字段元数据标准UI 表单与模板导出的契约再结合 docs/user_guide/zh/modules/tooling/README.md 了解函数/MCP 注册流程调试前端与 Schema 交互时参考 docs/user_guide/zh/config_schema_contract.md/api/config/schema(*)请求示例与 breadcrumbs 协议Schema 路由实现见 server/config_schema_router.py 与 utils/schema_exporter.py扩展节点的注册机制源码位于 runtime/node/registry.py内置节点示例见 runtime/node/builtin_nodes.py。7. 常用术语速查Session一次完整运行的 ID由时间戳名称组成贯穿 Web UI、后端与WareHouse/。code_workspacePython 节点共享的目录位于WareHouse/session/code_workspace/包含自动同步的附件。Attachment用户上传或运行期间注册的文件可通过 REST/WS API 查询与下载。Memory Store / Memory AttachmentMemory Store 定义存储实现Memory Attachment 是模型节点引用 Memory Store 的规则检索阶段、读写策略等。Tooling模型节点绑定的工具执行环境Function 或 MCP。breadcrumbsSchema 解析的路径协议用于定位嵌套配置字段见 docs/user_guide/zh/config_schema_contract.md。8. 排障与下一步若文档内容缺失或过时可以在仓库提交 Issue/PR或直接在 docs 目录内补充并同步至前端模板后端 Field 元数据与前端表单由 FIELD_SPECS 规范联动修改字段时必须同时同步详见 docs/user_guide/zh/field_specs.md。开发调试时server_main.py提供--reload参数支持热重载其默认只监听后端源码目录而排除WareHouse/、logs/等输出目录避免运行中产生的文件触发不必要的重启详见该文件头部注释与build_reload_kwargs()实现建议安装watchfilespip install uvicorn[standard]以获得--reload-exclude的完整过滤能力。至此从「文档地图 → 产品概览 → 五步运行流 → 节点注册 → 三种运行方式 → 角色导航 → 术语表」的闭环已经走通。接下来可按角色选择对应子文档深入或直接阅读 workflow/graph.py、server/services/workflow_run_service.py、run.py 三个核心文件继续研读实现细节。【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考