news 2026/9/10 22:09:44

ChatDev 2.0 如何上传文件附件、在执行中引用并下载 Session 产物?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ChatDev 2.0 如何上传文件附件、在执行中引用并下载 Session 产物?

ChatDev 2.0 如何上传文件附件、在执行中引用并下载 Session 产物?

【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev

在 ChatDev 2.0(DevAll)中运行工作流时,常见的任务链路是:把数据文件、图片、需求文档等作为**附件(Attachment)上传,让 Agent 节点在执行中引用它们;运行结束后,把节点生成的工件(Artifact)**或整个 Session 产物下载回来。界面操作由 Web UI 完成,自动化场景则走 REST/WS 接口。本文基于仓库内的附件与工件 API 指南与Web UI 快速入门指南,给出这两条路径的完整操作方式和验证方法。

前提条件:前后端服务已启动,后端为uv run python server_main.py,前端为npm run dev,浏览器访问http://localhost:5173进入 Web UI(以上启动方式来自 Web UI 指南的故障排查表)。

在 Web UI 中上传附件并启动工作流

主操作在Launch View(启动页):

  1. 选择工作流:从左侧列表选择yaml_instance/目录下的 YAML 文件。
  2. 上传附件(可选):点击输入框旁的上传按钮添加文件(文档示例为 CSV 数据、图片等)。也可以直接把文件拖拽进输入区或在输入框中粘贴文件(前端 LaunchView.vue 实现了按钮、拖拽、粘贴三种入口)。上传成功后按钮旁会显示已上传数量,悬停可见文件列表,单个文件可点×移除。
  3. 输入任务提示(Task Prompt):在文本框中输入指导工作流执行的提示词。
  4. 点击 Launch:启动执行。

两个界面约束需要注意(见 LaunchView.vue 的实现):

  • 上传按钮要求 WebSocket 已连接且 Session 已创建,否则按钮处于禁用态;
  • 工作流正在执行时,只有在状态为Waiting for input...(即human节点等待人工输入)时才允许上传附件;其余执行阶段上传入口不可用。

点击 Launch 后,前端把已上传文件的attachmentId列表放入执行请求的attachments字段。对应后端接口为POST /api/workflow/execute,请求体包含yaml_filetask_promptsession_idattachments(见 models.py 的WorkflowRequest与 execute.py)。根据 API 文档,attachmentstask_prompt需要同时提供——即便你只是想上传文件,也要带一个非空的task_prompt

在 human 节点交互中追加附件

当工作流执行到human节点时,界面会暂停并显示输入提示。此时输入框旁的上传按钮同样可用:填写审阅意见或操作指令、上传附件后提交,即可继续执行。前端提交的是 WebSockethuman_input消息,其中data.attachments为附件 ID 数组,消息内容中会列出附件名称以便核对(LaunchView.vue)。这与 REST 路径的规则一致:human_input中引用附件时也必须带task_prompt文本。

附件在执行中如何被引用

上传不是“存个文件”就结束。按附件 API 文档与运行服务实现,文件的生命周期是:

  1. 上传落盘:文件写入WareHouse/<session>/code_workspace/attachments/,并在attachments_manifest.json中记录sourceworkspace_pathstorage等字段(code_workspace即 Python 节点共享目录)。
  2. 注入任务输入:启动执行时,WorkflowRunService 用build_attachment_blocksattachment_id解析为消息块(按 MIME 推断 image/audio/video/file 类型),与task_prompt一起构建为初始任务输入交给图执行器。
  3. 运行期注册新文件:Python 节点或工具可调用AttachmentStore.register_file()把 workspace 中新生成的文件注册为附件;WorkspaceArtifactHook会将其同步到工件事件流,前端输出面板实时可见。
  4. 保留策略:默认保留所有附件,便于运行结束后下载。若希望自动清理,设置环境变量MAC_AUTO_CLEAN_ATTACHMENTS=1,它只在 Session 完成后删除attachments/目录。

下载 Session 产物:界面按钮与 API

方式一:Web UI 的 Download 按钮

执行完成后,点击右侧输出面板的Download按钮,下载完整的 Session 压缩包,包含context.json、附件、日志等。输出面板在执行期间也会实时展示节点生成的工件(与执行日志、节点输出共用同一面板)。

方式二:REST 接口逐项获取

适合 CLI 或自动化脚本,接口见 artifacts.py 与 sessions.py:

1. 实时获取工件事件(长轮询):

# wait_seconds、after、include_mime、include_ext、max_size、limit 均为可选 Query 参数 # 例如只关心 json/png 文件: curl "http://localhost:8000/api/sessions/<session_id>/artifact-events?include_ext=png,json&limit=10"

响应含events[]next_cursorhas_moretimed_out。每条事件带artifact_idattachment_idnode_idpathsizemimehashtimestamp(文档示例):

{ "artifact_id": "art_123", "attachment_id": "att_456", "node_id": "python_runner", "path": "code_workspace/result.json", "size": 2048, "mime": "application/json", "hash": "sha256:...", "timestamp": 1732699900 }

WebSocket 会镜像该事件(类型artifact_created),前端即靠它刷新附件列表。

2. 下载单个工件

# meta:仅元数据;stream:返回文件内容,download=true 时附带 Content-Disposition curl "http://localhost:8000/api/sessions/<session_id>/artifacts/<artifact_id>?mode=stream&download=true"

3. 打包下载整个 Session

curl -OJ "http://localhost:8000/api/sessions/<session_id>/download"

该接口把WareHouse/<session>/打包为 zip 一次性下载,不会删除服务器上的原文件;如需归档或清空,需要部署者另行用 cron/job 策略处理。

验证与故障排查

  • 上传是否成功POST /api/uploads/{session_id}成功时返回attachment_id、文件名、MIME 与大小(文档示例响应含att_bxabcd,实际值每次不同)。拿到 ID 后可用GET /api/uploads/{session_id}列举该 Session 的全部附件元数据核对。
  • 工件事件是否到达:确认 WebSocket 已连接;若断开,可在 REST 事件接口中用after游标重拉。
  • 下载链接 404:检查session_id拼写(仅允许字母、数字、-_),并确认 Session 目录未被清理。

附件 API 文档给出的常见问题表:

问题排查步骤
上传 413 Payload Too Large调整反向代理或 FastAPIclient_max_size,确认磁盘配额
下载链接 404确认session_id拼写(仅允许字母/数字/_-),检查 Session 是否已被清理
工件事件缺失确认 WebSocket 是否连接,或在 REST 事件接口中使用after游标重拉
附件未在 Python 节点可见检查code_workspace/attachments/是否被清理、或_context['python_workspace_root']是否正确

关于大小限制:后端未硬编码附件大小上限,需要在反向代理设置client_max_body_sizemax_request_body_size,或在自定义分支的AttachmentService.save_upload_file中添加校验。文件类型基于 MIME 推断消息块类型,可结合事件接口的include_mime过滤。生产部署还应在校验层确认调用者身份,避免越权下载——附件 API 的权限边界依赖 Session ID。

两条路径怎么选

界面路径适合日常使用:上传、Launch、human 节点追加、Download 按钮都已完成接口对接,你不需要记忆任何 URL。API 路径适合两类场景:一是脚本化批量运行,运行结束后调用/download拉取 zip,或结合artifact-eventsinclude_ext只取特定文件;二是自定义前端,按文档建议用artifact-events长轮询或 WebSocket 实时刷新附件列表,并在节点成功后提供“下载全部”入口。文档同时说明,一般场景下前端会自行处理附件/工件交互,直接调用 API 属于高级用法。

【免费下载链接】ChatDevChatDev 2.0: Dev All through LLM-powered Multi-Agent Collaboration项目地址: https://gitcode.com/GitHub_Trending/ch/ChatDev

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 22:09:31

傅立叶光学Matlab实现:从理论到工程实践

1. 傅立叶光学与Matlab结合的实用价值 傅立叶光学作为现代光学的重要分支&#xff0c;其核心在于用傅立叶变换的数学工具分析光的传播、衍射和成像过程。这种分析方法让我们能够用频域视角理解光场特性&#xff0c;在光学系统设计、图像处理、全息技术等领域具有不可替代的作用…

作者头像 李华
网站建设 2026/9/10 22:07:44

Nat Immunol期刊级柱状图绘制全指南

1. 项目概述&#xff1a;Nat Immunol 图表复现中的柱状图绘制在科研论文图表制作领域&#xff0c;Nature Immunology&#xff08;Nat Immunol&#xff09;作为顶级期刊&#xff0c;其图表以严谨规范和视觉表现力著称。最近我在复现一篇Nat Immunol论文中的柱状图时&#xff0c;…

作者头像 李华
网站建设 2026/9/10 22:07:32

互动艺术装置中的机械传动与传感技术实践

1. 项目背景解析"哭泣天使"这个标题乍看充满神秘色彩&#xff0c;实际上在当代艺术创作和互动装置领域有着特殊含义。我第一次接触这个概念是在伦敦的某个新媒体艺术展上——那些看似静止却暗藏玄机的雕塑作品&#xff0c;通过机械结构与数字传感的融合&#xff0c;创…

作者头像 李华
网站建设 2026/9/10 22:06:22

C语言学习大纲:从基础语法到实战应用

1. 为什么需要一份C语言学习大纲&#xff1f;在编程学习的道路上&#xff0c;C语言就像是一把打开计算机世界大门的钥匙。作为一门接近硬件层面的高级语言&#xff0c;它既不像汇编语言那样晦涩难懂&#xff0c;又不像某些现代语言那样过度封装。我见过太多初学者在没有系统规划…

作者头像 李华
网站建设 2026/9/10 22:05:55

Cobalt 如何配置 FREEBIND_CIDR 让每次下载使用随机出口 IP?

Cobalt 如何配置 FREEBIND_CIDR 让每次下载使用随机出口 IP&#xff1f; 【免费下载链接】cobalt best way to save what you love 项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt 如果你自托管了一个 Cobalt 实例&#xff0c;希望每一次下载任务都从不同出…

作者头像 李华