尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

多智能体工作流新范式:模型自己写流程并执行

多智能体工作流新范式:模型自己写流程并执行 最近在 Hacker News 的 Show HN 里看到一个项目标题写得像一句需求文档但信息量很大Gigacode – the model writes its own multi-agent workflow, then runs it。翻译过来是模型自己写多智能体工作流然后自己把它跑完。这句话看起来轻描淡写但它说的恰恰是当前 Agent 开发里最耗人、也最容易被低估的环节——工作流编排。过去一年Multi-Agent 的讨论热度一直很高技术方案从 AutoGen、LangGraph 到各类可视化编排平台层出不穷。但真正到了自己项目里你会发现最大的工作量不是“调用模型”而是“设计流程”任务怎么拆Agent 之间怎么传参哪个步骤可以并行哪个步骤必须等待出错之后重试谁上下文怎么传递。如果 Gigacode 的设想能成立意味着这些原本需要开发者手工完成的工作会逐步变成模型的“运行时行为”模型看到任务先给自己画一张流程图再照着流程图把活干完。人的角色则从“写流程的人”变成“定义目标和验收结果的人”。这篇文章不打算把它吹成下一代技术革命而是想回答几个更实际的问题它到底解决了什么痛点它背后的架构逻辑是什么你可以怎么理解、怎么评估、怎么上手这一类工具以及动态生成工作流这件事当前有哪些坑。1. 这篇文章真正要解决的问题先说一个我观察到的普遍现象。很多团队接触 Multi-Agent 的第一步是兴奋的架构图画得漂亮角色设定一栏一栏写满。真正开始写代码后问题就来了——流程是写死的。任务 A 进来了先调 Agent1再调 Agent2最后调 Agent3如果 Agent2 的结果不如预期整个链路都要重新处理。换个任务往往就要重新构图、重新编排、重新测试。这种“人写流程”的模式把三类成本压在开发者身上。第一是拆解成本。一个真实业务任务往往比“写一段代码”复杂得多它包含信息收集、分析、方案设计、编码、测试、复查等多个环节。人手拆解时边界怎么划、粒度多粗都需要反复试探。拆粗了单个 Agent 的上下文爆炸拆细了Agent 之间的通信和编排又变得极其繁琐。第二是编排成本。Multi-Agent 不是简单把几个 prompt 串起来中间涉及状态传递、任务依赖、并行分支、异常分支。用代码写死意味着每次需求变动都要改代码用配置中心管理又要把大量精力花在“配置结构设计”上。很多团队最后发现写 Multi-Agent 系统的时间一大半花在了与业务无关的编排逻辑上。第三是调试成本。模型输出有随机性同一个流程跑十次可能有八次结果不一样。到底是 prompt 没写好、流程顺序不对还是模型偶发抽风排查起来非常痛苦。更麻烦的是一次失败往往要重跑整个链路成本高、定位难。Gigacode 这类“模型自写工作流”的项目瞄准的正是这三类成本。它的基本想法是与其让开发者在代码里手写编排逻辑不如把任务描述、可用工具、约束条件交给模型让模型在运行时生成一份工作流再用一个通用的执行引擎去跑这份工作流。换句话说开发者提交的不是“代码里的流程”而是“任务目标 运行环境描述”。中间的流程怎么组织由模型自己决定。这个方向的好处很容易理解同样的工具面对“分析一个代码仓库”和“批量处理一批 CSV”两个完全不同的任务模型可以生成完全不同但各自合适的工作流。人不需要为每个任务重写一遍编排代码。当然从“想法很好”到“可用”之间还有很长的路。后面我会具体分析它的架构逻辑和使用边界。2. Multi-Agent 工作流的基本概念在深入 Gigacode 之前先把基础概念对齐一下。这几个词在中文社区里经常混用但含义差别不小。Agent智能体一个可以自主完成某类任务的程序单元。在 LLM 语境下它通常由模型驱动通过调用外部工具完成具体操作比如读文件、执行命令、请求接口。Multi-Agent多智能体多个 Agent 组成的系统各 Agent 承担不同角色通过分工协作完成一个整体任务。这里的核心不是“多个模型实例”而是“多个职责单元之间的配合”。Workflow工作流对“谁在什么条件下做什么、结果如何传递”的结构化描述。在 Multi-Agent 系统里工作流就是这些 Agent 的执行顺序和依赖关系。用一个例子区分这三层概念。假设你要让 AI 写一篇带代码示例的技术博客。单 Agent 的做法是给一个助手模型完整任务它自己读完参考资料、写出内容、再自己检查一遍。看起来简单但上下文一长模型容易忘记前期结论后面步骤的质量也难保证。Multi-Agent 的做法是拆成“调研员、写作者、审校者”三个 Agent。调研员先收集资料并整理成结构化的“事实清单”写作者只基于清单写正文审校者最后检查事实引用和代码正确性。每个 Agent 上下文更短、职责更单纯结果更容易控制。而工作流要做的就是把这三个人怎么配合固定下来谁先启动、谁接收谁的输出、如果写作者输出不合格要不要重新触发调研。理解了这个例子就能理解 Gigacode 标题里的关键动作——让模型自己写工作流。它的意思是开发者不预定义“调研员到写作者到审校者”这个顺序而是把任务丢给模型由模型产出执行步骤来完成任务。从工程角度看这相当于把“程序逻辑”从开发者代码中抽离出来变成了“模型运行时产物”。这一步改变了 Agent 应用的开发模式。3. 为什么“模型自己写工作流”值得关注如果把时间线拉长一点会发现这是 Agent 开发范式演进的必然方向。早期用 LLM 写代码核心是“单次生成”。你写一个 prompt模型返回一段文本或代码。这很好理解但能力有限模型只能基于给定的上下文做一次推理没有反复试错和反馈的机制。后来出现了 Agent Loop模型不是生成一次就结束而是可以反复调用工具、观察结果、再决定下一步。这种模式下模型有了“执行循环”能处理更复杂的任务但循环内的步骤还是由代码写死模型只能在预设轨道里选择方向。再到 Multi-Agent多个 Agent 组成团队模型开始承载角色分工。角色之间的配合方式比如谁先跑、谁汇总仍然由人定义。而 Gigacode 这类项目把最后这块也交了出去流程结构本身就是模型输出的一部分。模型根据任务目标自行决定要拆多少个 Agent、每个 Agent 做什么、先执行哪个、结果如何汇总。这就像编译器的发展历程最早的工程师手写汇编后来有了编译器人和机器之间多了一层抽象。这里的抽象是把“流程设计”从人的工作时序中挪到了模型推理里。但“让模型写流程”能成立依赖几个前提条件。前提一模型需要有足够强的规划能力。这个领域发展很快现在的模型普遍具备一定的 task planning 能力但复杂任务的推理深度依然不够。如果模型生成的工作流本身就是错的后面的执行相当于在错误地图上开车跑得越远错得越多。前提二执行引擎要足够稳定。模型生成出来的流程语法上能不能被正确解析步骤之间数据格式能不能对齐会不会出现循环、死锁、重复执行都需要执行引擎兜底。动态生成意味着流程事先不可预知执行引擎必须容忍更多异常。前提三要有可见性和可控性。开发者不能接受一个黑盒流程——跑失败了也不知道中间发生了什么。好的动态工作流工具必须能把模型生成的流程“摊开”给人看允许人工干预、修改、重试甚至是替换某个节点。从目前公开信息来看Gigacode 更接近“演示并验证方向”的阶段它展示了“模型生成工作流、执行工作流”这条路是通的但距离生产级应用还有稳定性、可控性、成本这三道坎要过。对开发者来说现在最值得做的不是急着换工具而是理解这套逻辑把它当作评估新一代 Agent 框架的坐标系。4. 典型架构模型自写工作流是怎么跑起来的一个“模型自写工作流”系统一般会有这么几层。虽然不同项目的实现细节不同但整体逻辑大差不差。任务解析层接收用户的任务描述把模糊需求转化为结构化目标。比如用户说“分析这个仓库并写 README”解析层要把它转成“扫描仓库结构、分析主要模块、对比现有 README、生成新 README”这样的明确目标。这一层很关键因为模型后续生成的工作流质量直接取决于目标拆解得是否清晰。工作流生成层这是 Gigacode 这类系统的核心。模型被要求输出一份工作流定义而不是直接输出答案。工作流定义一般是一份结构化的数据包含节点列表、依赖关系、每个 Agent 的角色和输入输出格式。这个阶段消耗的推理资源往往比普通问答高很多因为它要求模型同时做“方案设计”和“结构生成”两件事。执行引擎层拿到工作流定义后执行引擎负责调度。它创建每个 Agent 的实例、注入上下文、调用模型、传递中间结果并根据依赖关系决定并行还是串行。到这里系统相当于一个“解释器”把模型画好的图纸变成实际执行。结果聚合与反馈层所有节点跑完后把结果汇总给用户。如果某个节点失败或输出不满足校验条件反馈层触发重试或让模型重新生成局部工作流。这一层直接决定系统在真实任务里的可用性因为它决定了失败后是“全链路重跑”还是“局部修补”。还有一层常被忽略的是安全与权限边界。动态生成的流程会调用工具、写文件、执行命令如果不做权限控制风险比固定流程更大。这个问题后面第 8 节会专门讲。从实现上看工作流生成层和执行引擎层通常是解耦的。也就是说模型负责“画图纸”执行引擎负责“按图纸施工”。这样带来的好处是图纸画错了人可以改图纸再施工不用重写整个系统。这也是我在评估这类项目时最看重的一点——工作流生成和执行是否解耦。如果解耦系统的调试和可观测性就会好很多如果耦合在一起出了 bug 很难定位是“模型想错了”还是“执行器跑错了”。5. 一个最小工作流配置、生成、执行前面讲了很多概念现在用一个通用示例把它落地。需要提前说明Gigacode 目前公开信息有限下面我按当前主流工作流编排工具的通用约定来写重点演示“流程结构化 引擎执行”的思路。假设我们要完成这样一个任务给定一个 GitHub 仓库路径让 AI 分析代码结构并生成一份中英文 README。传统 Multi-Agent 做法是开发者写一段类似下面的编排代码。这个过程不是不行但问题在于每来一种新任务你几乎都要改编排逻辑流程和业务逻辑耦合在一起。传统做法示意# 说明这是传统手写编排的简化示意 def run_old_way(repo_path: str): code_reader Agent(rolecode_reader, promptREADER_PROMPT) analyzer Agent(rolecode_analyzer, promptANALYZER_PROMPT) writer Agent(roledoc_writer, promptWRITER_PROMPT) structure code_reader.run(repo_path) analysis analyzer.run(structure) docs writer.run(analysis) return docsGigacode 式思路的不同在于不提前定义这三个 Agent而是让模型先产出一个 workflow 定义再由执行引擎运行。结构化的 workflow 定义通常会长这样示意# workflow.yaml示意模型运行时生成的动态工作流 version: v1 task: analyze repo at ./my-repo and generate README nodes: - id: read_repo agent: code_reader input: repo_path: ./my-repo - id: analyze agent: code_analyzer input: source: ${read_repo.output} - id: write_readme agent: doc_writer input: analysis: ${analyze.output} output: file: ./my-repo/README.md dependencies: - from: read_repo to: analyze - from: analyze to: write_readme执行器拿到这份 YAML 后会解析依赖关系按拓扑排序依次执行。这个解析和调度逻辑在很多工作流引擎里都是通用能力不一定需要绑定某个特定框架。一个极简执行器示意# executor.py示意按依赖关系执行动态工作流 import yaml from collections import defaultdict, deque workflow yaml.safe_load(open(workflow.yaml)) # 构建依赖图 indegree defaultdict(int) children defaultdict(list) for dep in workflow[dependencies]: children[dep[from]].append(dep[to]) indegree[dep[to]] 1 # 拓扑排序并执行节点 queue deque([n[id] for n in workflow[nodes] if indegree[n[id]] 0]) outputs {} while queue: node_id queue.popleft() node next(n for n in workflow[nodes] if n[id] node_id) output run_agent(node, outputs) # 调用模型、注入上下文、解析结果 outputs[node_id] output for child in children.get(node_id, []): indegree[child] - 1 if indegree[child] 0: queue.append(child)这里需要强调上面的 YAML 和 Python 不是某个项目的官方示例而是用来展示“模型生成工作流、引擎执行工作流”这条链路在工程上长什么样。真正有趣的是第二部分在 Gigacode 这类系统里这份 YAML 不是人写的而是模型根据任务描述现场生成的。所以核心问题变成了模型能不能生成一份语法正确、依赖合理、输入输出能对齐的工作流这个问题目前没有完美答案但它比“人写死的流程”有更高的上限——因为模型可以根据任务变化实时调整流程而不是让开发者一次次手工修改编排代码。6. 怎么验证一个动态工作流跑得好不好使用这类工具最怕的就是“看起来跑了但结果不可信”。我建议从四个维度验证。第一个维度是流程合理性。模型生成的工作流是否符合任务逻辑任务明明只需要一个步骤模型却拆出五个互相等待的 Agent这是过度设计。反过来任务很复杂模型却只生成一个“super Agent”什么都能干这是拆分不足。合理的工作流应该和任务复杂度匹配而不是一味追求“Agent 数量多”。第二个维度是执行成功率。一次完整流程从开始到结束各节点是否都能正常跑通。动态生成的流程里最常见的失败是节点间数据契约对不上——上一个 Agent 输出的是 JSON下一个 Agent 的 prompt 里却按 Markdown 表格来解析。这种错误不会在第一次跑就暴露往往要等到真实任务执行到中间环节才出现。第三个维度是结果质量。这是最主观也最重要的维度。可以设计一套简单的验收指标比如生成文档是否包含关键模块说明、代码是否通过静态检查、结果是否可复现。如果连续跑三次结果差异很大说明流程还不够稳定需要回到工作流生成层去约束模型。第四个维度是人工干预成本。当流程跑偏时你能不能看清楚是哪一步错了能不能只修改某一步、然后从那里继续可观测性和干预能力直接决定这个工具能不能进生产环境。如果一个失败只能“全量重跑”那无论模型规划能力多强工程上都很难接受。如果要用现成的开源方式辅助验证可以在工作流里加一个 validator 节点专门检查上游输出是否符合约定比如字段是否存在、类型是否匹配、内容长度是否合理不合格就触发重跑。这种做法虽然增加了模型调用次数但能把“悄然出错”变成“显式失败”对调试帮助很大。7. 常见问题与排查思路从高频报错说起动态工作流工具因为要串联模型、配置、文件、网络好几个环节实际使用中出错的概率比普通单次调用高不少。最近在一些 AI 编程终端工具的讨论里有一批报错出现频率非常高我把它们整理成了排查表。这些报错虽然来自不同的 AI 编码工具但反映的问题在 Gigacode 这类动态工作流工具里同样会遇到。问题现象可能原因排查方式解决方案无法加载 config.toml提示修复 config.toml:model配置文件路径不对或 model 字段缺失检查配置文件位置确认 model 字段是否填了正确模型名用模板重建配置文件先填最小可用配置再逐步增加项提示某个模型名称不被当前工具支持工具版本与模型名单不匹配或模型名拼写错误查看工具支持的模型列表对比实际填写的模型名改成工具支持范围内的模型名或升级工具版本提示 selected model is at capacity所选模型服务端负载过高无法新开请求查看上游服务状态页稍后重试换成备用模型或选择错峰时段重试提示 ran out of room in the models context window单次会话上下文超过模型窗口上限查看上下文占用确认为何塞入过多内容新开线程精简输入或改用支持更大窗口的模型提示 reasoning_content must be passed back to the api使用了思维链模式但推理内容未按服务方要求回传查看 API 文档中关于 reasoning_content 字段的约束在请求中按规则回传该字段或关闭思维链模式提示 trouble connecting to the model provider网络连接不通或上游服务短时故障检查网络连通性查看服务状态页面等待后重试切换到备用网络环境或备用模型通道提示 this is a gguf model, but no executable llama.cpp runtime使用了本地 GGUF 模型但缺少 llama.cpp 运行时检查本地模型运行时是否安装、是否在 PATH 中安装或指定 llama-server 运行路径确保模型文件可读自动生成的步骤之间数据格式对不上上游 Agent 输出结构未按约定传给下游在节点间打印中间结果检查字段名称和格式增加校验节点或在生成工作流时给出更严格的输出格式约束这张表里的很多问题本质都是同一件事动态工作流把“配置、模型、网络、数据格式”四个最容易出错的环节串在了一起任何一个环节有波动都会让整条链路的报错变得难以定位。建议排查时不要只看最后一个报错而是从模型调用记录、节点日志、配置文件三层同时看先定位是“哪个环节”出问题再判断“为什么”出问题。8. 最佳实践与工程建议如果你打算在一个真实项目里尝试“模型自写工作流”这类思路下面几条建议值得认真对待。第一条先从固定流程开始。不要一上来就完全放权给模型生成整张流程图。更稳妥的做法是先用手写流程跑通一个任务记录下人工设计的 Agent 数量、职责、依赖关系再逐步让模型参与局部环节的生成比如只自动生成“某两个环节之间怎么衔接”最后再放开整个流程的生成权限。这种渐进方式能让你在每增加一个自由度时都能清楚知道是哪个环节发生了变化。第二条给模型足够的约束模板。动态生成不等于放任自由。好的做法是在生成工作流时给模型提供一份“约束范围”比如最多允许 5 个 Agent输入输出必须用 JSON禁止无限重试循环所有写文件操作必须在指定目录内。这相当于在模型自由发挥和工程可控之间画一条安全线。约束不是为了让模型发挥更差而是为了让意外更少。第三条把上下文管理当成一等工程问题。动态工作流的每一次节点执行都可能把上游结果放入新的上下文。随着链路变长上下文占用增长很快。建议在 workflow 定义中明确每个节点的“输入摘要策略”——不需要把上游全文传给下游只需要传递结构化摘要或关键字段。这能显著降低上下文溢出概率也能节省模型调用的 token 成本。第四条重视日志和可观测性。模型生成的流程是动态的意味着每次任务的流程图都不一样。如果没有完整日志出了问题根本无从复盘。建议在每个节点执行时记录节点 ID、输入摘要、模型调用 token 数、耗时、输出摘要、是否成功。有条件的话把整个 workflow 定义和执行轨迹都存档方便事后对比不同版本流程的效果。这是动态工作流和固定流程最大的区别之一固定流程可以靠代码 review 保证质量动态流程只能靠完整日志追踪质量。第五条设置安全与权限边界。动态生成的流程会调用工具如果权限边界太宽一次 prompt injection 或一次错误的流程设计就可能造成破坏。建议遵循最小权限原则工作区目录隔离、外部命令白名单、写操作需确认、高影响动作单独授权。在真实代码库上运行时先用只读模式跑一遍确认流程没有越界再放开写权限。这一步在任何生成式工具里都是底线要求。第六条控制成本防止“流程爆炸”。模型生成工作流本身就要消耗推理资源执行每个节点又要再次调用模型。一个原本一次调用就能完成的任务如果被拆成 8 个 Agent成本可能翻好几倍。建议在生成工作流时加入预算约束比如“节点数不超过 N”“同一类任务必须复用已有流程模板”并在执行引擎侧做调用次数配额。动态生成的价值在于“按需适配”而不是“无限拆解”。9. 总结与后续学习方向回到这篇文章的题目Gigacode 让我看到的不是一个马上能用到生产环境的成熟工具而是一个值得认真对待的方向——多智能体工作流正在从“人的设计产物”变成“模型的运行时产物”。我个人的判断是这种转变会像编译器和自动化测试一样逐步改变 Agent 应用的开发方式。但它现在还处在早期真正成熟的标志是三个模型生成的工作流足够稳定执行引擎具备完整的可观测性和干预能力安全边界足够清晰。目前这三个条件都还没有完全满足所以生产环境大规模落地仍需谨慎。如果你想沿着这个方向继续学习建议按下面三步走。第一步先掌握传统工作流编排。把 LangGraph、Dify、Coze 这类工具的手工编排能力用熟。只有你对“流程由人编写”的优缺点有切身感受才能理解“流程由模型编写”到底改变了什么。这一步的核心目标是建立工作流拆解的感觉什么任务适合拆成几步、每一步之间传递什么数据、哪些步骤可以并行。第二步实践“半自动”模式。选择一个小型项目让模型先生成流程草案你再人工修改节点和依赖然后执行。这个过程能直观看到模型规划能力强在哪里、弱在哪里。你会发现不同模型在流程生成上的差距比在代码生成上的差距更明显——因为流程生成对全局推理的要求更高模型既要理解任务又要产出可执行的结构。第三步搭建自己的最小验证环境。你可以不依赖某个特定工具而是用一套“提示词生成工作流定义 通用执行引擎”的组合自己做一个小型 demo。前面第 5 节给出的 YAML 结构和 Python 调度伪代码就是这个 demo 的骨架。自己动手实现一次你对“动态工作流”的理解会比看十篇分析文章都深。最后提醒一句无论用什么工具都要把“验证结果”作为流程的一部分而不是事后操作。模型自己写的流程跑得再流畅也不等于结果正确。对动态生成的流程保持足够的警惕是使用这类工具的基本素养。建议把这篇文章收藏备用等你要动手尝试动态工作流时直接从第 5 节的示例开始跑会比从零摸索快很多。
返回列表