ChatDev 2.0 如何用 Python SDK 以编程方式执行 YAML 工作流并获取结果?

ChatDev 2.0 如何用 Python SDK 以编程方式执行 YAML 工作流并获取结果? ChatDev 2.0 如何用 Python SDK 以编程方式执行 YAML 工作流并获取结果【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDevChatDev 2.0DevAll内置了一个轻量 Python SDKruntime.sdk.run_workflow()。当你需要把 YAML 工作流接进脚本、测试或批处理流程而不是每次打开 Web 控制台手动点击 Launch 时可以直接在进程内执行工作流并拿到最终节点的消息、token 用量和输出目录。前提是你已经在本地装好 ChatDev 2.0 环境Python 3.12、macOS / Linux / WSL / Windows、uv并在项目根目录配置了.env。准备工作安装依赖并配置 .env按 README.md 的 Quick Start 完成两步# 1. 后端依赖Python 由 uv 管理 uv sync # 2. 环境变量为 LLM 提供方设置 API_KEY 与 BASE_URL cp .env.example .envYAML 工作流里用${VAR}例如${API_KEY}引用环境变量run_workflow()加载配置时会通过项目内的load_dotenv_file()读取.env见 entity/config_loader.py所以.env必须放在运行脚本时的当前目录即项目根目录。${VAR}引用的变量也可以用参数variables在调用时覆盖。run_workflow 的参数与路径解析规则run_workflow定义在 runtime/sdk.pydef run_workflow( yaml_file: Union[str, Path], *, task_prompt: str, attachments: Optional[Sequence[Union[str, Path]]] None, session_name: Optional[str] None, fn_module: Optional[str] None, variables: Optional[Dict[str, Any]] None, log_level: Optional[Union[LogLevel, str]] None, ) - WorkflowRunResult:各参数的实际行为以源码为准yaml_file路径解析规则是——绝对路径直接使用相对路径若在当前工作目录下存在则直接使用否则拼到yaml_instance/下YAML_DIR默认值Path(yaml_instance)见 server/settings.py。所以从项目根目录运行脚本时yaml_filedemo_file_memory.yaml实际指向yaml_instance/demo_file_memory.yaml。task_prompt任务提示词必填见下面的空提示词限制。attachments可选的文件路径列表。带附件时SDK 会把任务输入构建成消息列表并把附件落到会话目录的code_workspace/attachments下见 runtime/sdk.py 的_build_task_input。session_name可选。不传时自动生成sdk_yaml文件名去后缀_时间戳作为会话名。variables与 YAML 中的vars合并并覆盖同名项对应load_config(..., vars_overridevariables)见 check/check.py。README 示例中的用途是覆盖.env变量例如variables{API_KEY: sk-xxxx}。fn_module可选提供工作流中边条件函数引用的 Python 模块与run.py --fn-module的--fn-module对应。log_level可选接受LogLevel枚举或字符串会写入图配置。注意task_prompt不能是空白字符串且没有attachments否则抛出ValidationError: Task prompt cannot be empty。执行一个工作流并读取结果最短主路径如下从项目根目录运行替换为你自己的 YAML 文件与任务描述from runtime.sdk import run_workflow # 执行工作流并获取最终节点消息 result run_workflow( yaml_filedemo_file_memory.yaml, task_promptSummarize the attached document in one sentence., attachments[/path/to/document.pdf], # 可选按需替换为真实文件路径 variables{API_KEY: sk-xxxx}, # 可选覆盖 .env 中的变量 ) if result.final_message: print(fOutput: {result.final_message.text_content()})其中yaml_filedemo_file_memory.yaml按上面的规则解析为yaml_instance/demo_file_memory.yamlyaml_instance/下还有demo_code.yaml、deep_research_v1.yaml等可直接参考的工作流README 中的示例文件名demo.yaml请替换为真实存在的文件。text_content()是 entity/messages.py 中Message的方法返回消息内容的字符串表示如果工作流最终节点没有产出消息final_message会是None所以要像示例那样先判空再取文本。result的类型是WorkflowRunResult除final_message外还有meta_infoWorkflowMetaInfo可用于核对执行结果print(result.meta_info.session_name) # 会话名 print(result.meta_info.log_id) # 日志 workflow_id可能为 None print(result.meta_info.token_usage) # token 用量统计 print(result.meta_info.output_dir) # 本次会话的输出目录WareHouse/ 下所有会话产物统一输出到项目根目录的WareHouse/SDK 中OUTPUT_ROOT Path(WareHouse)meta_info.outputs汇总了各节点的输出适合在自动化流程里做断言或落盘。验证执行是否成功判断依据来自代码中真实存在的校验与输出配置校验run_workflow内部调用load_configcheck/check.py工作流结构检查通过时会打印Workflow OK.。这是执行前 YAML 通过语法与 schema 校验的直接信号。返回消息执行完成后检查result.final_message非空且text_content()有内容说明最终节点产出了结果。产物目录到meta_info.output_dirWareHouse/下按会话名组织的目录查看本次运行的文件产物。若工作流本身需要用命令行单独校验可运行make validate-yamls检查yaml_instance/下所有 YAML 的语法和 schema 错误。常见报错及对应的处理现象来源说明FileNotFoundError: YAML file not found: ...runtime/sdk.pyyaml_file按上述规则解析后不存在。确认相对路径是相对于当前工作目录或yaml_instance/的文件名写对。ValidationError: Task prompt cannot be emptyruntime/sdk.pytask_prompt为空白且未提供attachments。Design validation failed for ...DesignErrorcheck/check.pyYAML 未通过 schema 或工作流结构检查错误信息中会列出具体条目按提示修正 YAML。可选路径通过后端同步接口调用同一个 SDK如果脚本本身不方便直接 import 项目代码而 ChatDev 后端已经在运行例如uv run python server_main.py --port 6400可以直接调用同步接口POST /api/workflow/run实现见 server/routes/execute_sync.py请求体字段与 SDK 参数一一对应yaml_file、task_prompt、attachments、session_name、variables、log_level取值DEBUG、INFO、WARNING、ERROR、CRITICAL。默认不声明 Accept返回 JSON包含status、final_message、token_usage、output_dir四个字段YAML 不存在返回 404log_level非法返回 400。请求头Accept: text/event-stream时返回 SSE 流依次推送started、log逐条日志、completed或error事件。# 文档示例非流式调用task_prompt 需自行替换为真实任务描述 curl -X POST http://localhost:6400/api/workflow/run \ -H Content-Type: application/json \ -d {yaml_file: demo_file_memory.yaml, task_prompt: 你的任务描述}返回的output_dir同样是WareHouse/下本次会话的绝对路径可与 SDK 的meta_info.output_dir相互印证。小结与边界批量/自动化脚本里用session_name传有业务含义的名字例如订单号方便到WareHouse/里定位产物不传则自动生成带时间戳的名字重跑不会互相覆盖。密钥优先走.env只有测试或临时覆盖时才用variables传入variables会覆盖 YAMLvars中的同名项。每次执行都会打印Workflow OK.再进入运行配合meta_info.token_usage和final_message判空就构成了一条从“发起 → 校验 → 执行 → 核对产物”的完整可编程链路。【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考