微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 伊利诺伊大学厄巴纳-香槟分校发明了一种"流程图语言",让AI助手变得更听话、更透明

伊利诺伊大学厄巴纳-香槟分校发明了一种"流程图语言",让AI助手变得更听话、更透明

2026-04-30 11:06
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-04-30 11:06 科技行者

这项由伊利诺伊大学厄巴纳-香槟分校(University of Illinois Urbana-Champaign)联合威斯康星大学麦迪逊分校(University of Wisconsin–Madison)和贝勒医学院(Baylor College of Medicine)共同完成的研究,以预印本形式于2026年4月14日发布,论文编号为arXiv:2604.13346。有兴趣深入了解的读者可通过该编号在arXiv平台上查询完整论文。

**一、当AI助手变得"任性":问题从哪里来**

你有没有试过让手机语音助手帮你完成一项复杂任务?比如说:"帮我查一下最新的机票价格,然后比较各个航空公司的服务评价,再结合我的出行日期给我推荐最划算的选择。"通常情况下,助手要么只回答了第一步就停下来了,要么绕了一大圈给你一堆不相关的信息,要么干脆就"跑偏"了,做了一堆你没有要求它做的事情。

这背后的根本原因,在于目前大多数AI助手的工作方式——研究者们把这种方式叫做"反应式提示"(Reactive Prompting)。通俗地说,就是你给AI一段文字指令,AI就根据这段指令自己摸索着往下走,一步接着一步,凭自己的"直觉"决定下一步做什么。这就好像你雇了一个临时工,只给他一句话:"帮我把这间屋子整理好。"然后他就自己决定:先扫地、还是先整理书架、还是先擦窗户,你完全不知道他接下来会做什么,也没法在中途及时纠正。

这种做法在简单任务上还勉强凑合,但碰到需要多个步骤、需要根据情况判断、需要反复检查结果的复杂任务,问题就暴露出来了。AI的行为难以预测,中间状态对用户来说是一个黑盒子,一旦出了问题也很难找到究竟是哪一步走错了。更糟糕的是,每次任务的执行过程都可能不一样,重复性很差。

面对这些问题,工程师们自然想到了一个解决办法:既然AI自己安排工作流程靠不住,那就由人来画好"流程图",明确告诉AI第一步做什么、第二步做什么、什么情况下走哪条路。LangGraph、DSPy、CrewAI这些工具就是沿着这个思路开发出来的——它们让开发者用Python编程语言来精确定义AI的工作流程。

然而,这又带来了新的麻烦。Python是一种编程语言,普通用户根本看不懂,就连非技术背景的领域专家(比如医生、研究员、教师)也很难直接上手。更头疼的是,当你想修改某个步骤的时候,工作流程逻辑和Python代码缠绕在一起,改一处就可能牵一发而动全身。就像一碗乱麻面条,你想挑出其中一根来调整,结果把整碗都搅乱了。

正是为了解决这个两难困境,这支研究团队提出了AgentSPEX——一种专门用来描述AI工作流程的语言,以及配套的执行系统。

**二、AgentSPEX是什么:用"食谱"代替"即兴发挥"**

核心比喻可以这样理解:AgentSPEX就是一本写给AI看的"食谱"。

普通厨师根据自己的经验即兴发挥,每次做出来的菜可能都不一样,偶尔惊艳,偶尔翻车。而一本好食谱则把每个步骤写得清清楚楚:第一步准备食材,第二步按顺序下锅,第三步根据颜色判断火候,第四步尝味道、如不够咸就加盐,如此循环直到完成。任何人拿着这本食谱,都能做出相同的菜,而且中途出了什么问题也能立刻定位到是哪个步骤出了差错。

AgentSPEX就是这样一本食谱,只不过它不是用来指导厨师,而是用来指导AI完成复杂任务。它采用YAML这种格式来书写——YAML是一种对人类非常友好的文本格式,看起来就像普通的提纲或笔记,而不是密密麻麻的代码。

一个典型的AgentSPEX工作流程长这个样子:你给它起一个名字,写明它的目标是什么,设定一些初始参数(比如"研究话题"和"输出文件路径"),然后逐步描述整个工作流程——第一步生成搜索关键词,第二步调用一个专门负责搜索和汇总的子模块,第三步根据搜索到的内容写成一份报告保存到指定位置。整个过程用自然语言写成,不需要任何编程知识就能读懂。

这种方式兼顾了两个目标:一方面,工作流程足够精确,AI会严格按照每一步执行,不会随意"发挥";另一方面,指令用自然语言书写,领域专家可以自己动手修改,不需要每次都找程序员帮忙。

**三、语言积木:AgentSPEX里都有哪些"食谱指令"**

好的食谱不只是线性的步骤列表,它还会告诉你:"如果蛋糕表面变金黄了就降温""把面团揉到光滑为止""每隔五分钟翻一次面"。AgentSPEX同样如此,它提供了一套完整的"指令词汇表",覆盖了AI完成复杂任务时可能遇到的各种情况。

在最基本的执行层面,AgentSPEX有两种不同性质的步骤类型。"任务"(task)相当于开启一次全新的对话,AI从一张白纸开始,完成这个特定目标。"步骤"(step)则不同,它会保留之前的对话记录,适合需要多轮来回、反复琢磨的情形,就像和一个顾问来来回回讨论方案,每次谈话都在上次的基础上继续深入。

在控制流程层面,AgentSPEX提供了类似日常逻辑判断的工具。"如果-否则"(if/switch)让AI根据条件选择走不同的路径,就像食谱里写的"如果你的烤箱功率不足,就多烤五分钟"。"循环"(while)让AI重复某个操作直到满足某个条件为止,就像"继续揉面,直到面团不再粘手"。"遍历"(for_each)则让AI对一个列表里的每个项目都执行同样的操作,就像逐一处理篮子里的每一个苹果。

在模块组合层面,"调用"(call)指令让一个工作流程可以随时调用另一个独立的工作流程作为子模块,就像大食谱里可以引用"酱汁制作详见第32页"一样。这种设计让复杂的工作可以被拆分成一个个可复用的小模块,每个模块可以独立开发、独立测试,再组合到更大的流程里。

在并发执行层面,"并行"(parallel)和"汇聚"(gather)让AI可以同时处理多个相互独立的子任务,最后把结果汇总在一起。这就好比你在厨房里一边煮汤、一边烤面包、一边切菜,而不是等汤煮好了再开始烤面包。

在状态管理层面,"设置变量"(set_variable)、"累加"(increment)、"输入"(input)、"返回"(return)这些指令负责在不同步骤之间传递信息、保存中间结果、向用户请求输入,以及把最终结果返回给调用者。

这些指令组合在一起,让AgentSPEX能够表达出几乎所有常见的AI工作模式,而且全部用YAML格式书写,存储在一个或几个独立文件里,非常方便版本管理、修改和分享。

**四、信息的精准传递:上下文管理是个大学问**

食谱里有一个经常被忽视的细节:厨师在某个步骤需要知道多少前面步骤的信息?做糖醋排骨的时候,腌制步骤需要知道排骨的重量,但不需要记得三天前你买菜时的购物清单。信息过多会让厨师分心,信息不够又会导致操作出错。

对AI来说,同样的问题更加突出。每次和AI对话,AI能"看到"的上下文是有限的,如果把所有历史信息都堆进去,不仅成本高昂,而且信息噪音会让AI的回答质量下降——研究者把这种现象形象地称为"上下文腐烂"(Context Rot),就像冰箱里放了太久的食物,新鲜度越来越差。

AgentSPEX对这个问题给出了明确的解决方案:每个步骤只接收它明确需要的信息,不多也不少。

在AgentSPEX里,每个步骤的输出可以被保存到一个具名变量里,用类似"{{变量名}}"这样的占位符在后续步骤中引用。这就像食谱里写的:"把步骤三做好的酱汁(即'酱汁'变量)在步骤七时加入锅里。"步骤七并不需要知道步骤一到步骤六发生了什么,它只需要拿到"酱汁"这个结果就够了。

这种精准的信息传递方式,一方面减少了AI处理无关信息的负担,另一方面也让工作流程的数据流向变得清晰可查:你可以一眼看出每个步骤依赖哪些前置结果,产生哪些输出,整个信息流就像一张清晰的配管图,而不是一团乱麻。

与此同时,这种设计也明确区分了"任务"和"步骤"的适用场景。当你需要把中间结果干净地传给下一个环节时,用"任务"更合适,因为它开启全新的对话,不会带入前面的噪音。当你需要AI在多轮交互中持续深入同一个问题时,用"步骤"更合适,因为它保留了完整的对话历史,让AI能在上下文中持续推理。

**五、执行引擎:食谱如何变成真正的一餐**

有了食谱,还需要一个厨房和一个会烹饪的厨师。AgentSPEX的"执行引擎"就是这套系统里的厨房加厨师。

整个执行系统由两个核心部分组成:解释器(Interpreter)和执行器(Executor)。解释器负责读取YAML食谱,检查结构是否正确,把参数填入正确的位置,然后按顺序把每个步骤交给对应的处理模块。碰到嵌套结构——比如循环里面还有条件判断,条件判断里面还有子模块调用——解释器会妥善处理这种层叠关系,确保变量在正确的作用域内传递,不会出现"张冠李戴"的情况。每个操作步骤都会被分配一个层级编号,比如"3.2.1"代表"第三步操作里的第二次循环中的第一个子步骤",这个编号后续用于检查点和日志记录。

执行器则负责具体实现AI和工具之间的互动循环。当轮到某个"任务"或"步骤"执行时,执行器会向AI模型发送当前的消息历史,AI模型回应后,执行器会检查AI是否调用了某个工具(比如搜索网页、运行代码、操作文件),如果是,就通过一种叫做MCP(Model Context Protocol,模型上下文协议)的标准接口调用该工具,把结果追加到消息历史,然后再次请求AI模型继续推理。这个循环会一直持续,直到AI模型不再调用任何工具(表示它认为任务完成了),或者达到了预设的工具调用次数或令牌数量上限。

整个工作流程在一个基于Docker容器的沙盒环境里执行——Docker是一种隔离的虚拟环境,就像一间专门搭建的临时厨房,里面配备了浏览器、文件系统和超过50种工具,涵盖文件操作、网页搜索、代码运行、浏览器自动化等各个类别,同时和外部系统隔离,不会对运行环境造成意外影响。

**六、"万一断电了怎么办":持久性机制让长任务不再令人担忧**

有一种做菜的噩梦:你辛苦做了两个小时,就差最后一步,突然停电了,一切从头再来。对于需要运行几十分钟甚至几个小时的AI任务来说,这种噩梦是真实存在的——API调用超时、网络断连、服务限流……任何一个意外都可能让辛苦积累的中间结果付诸东流。

AgentSPEX为此设计了一套完整的持久性机制。

检查点(Checkpoint)功能会在每个步骤完成后自动保存当前状态,包括已完成的步骤编号、所有上下文变量的值、步骤级别的统计数据,以及当前沙盒环境的快照。一旦任务中断,系统可以从任意一个检查点恢复:加载保存的上下文,跳过已完成的步骤,重新连接到原来的沙盒会话,从中断的地方继续执行。这就像烹饪节目里的"保鲜冷藏"功能——半成品放进冰箱,明天继续做,口感不打折。

执行追踪(Execution Tracing)功能记录了每次工作流程运行的完整轨迹,包括AI的每一个回应、工具调用的每一个结果,以及每个步骤的对话状态。更实用的是"选择性回放"(Selective Trace Replay)功能:当开发者想修改某个步骤的指令时,通常需要重新跑一遍整个流程才能看到效果,既耗时又费钱。有了选择性回放,开发者可以指定"从第N步开始回放之前的记录,从第N+1步开始实时执行新指令",这样就能精准测试某一步的改动对后续行为的影响,而不必重跑所有前置步骤。

**七、还能做形式化验证:AI行为也能被数学证明**

这是AgentSPEX里一个颇具前瞻性的能力,值得专门说一说。

形式化验证(Formal Verification)是数学和计算机科学里的一种方法,简单来说就是用严格的数学语言证明一个系统的行为满足某些预定义的规则,而不只是靠测试来猜测。这种方法在飞机控制系统、核电站软件等安全攸关的领域早已广泛应用。

AgentSPEX的YAML格式让工作流程的控制流程、变量依赖关系和步骤边界全都变成了明确的、可分析的结构,而不是隐藏在复杂代码里的隐式逻辑。这意味着,理论上可以为每个步骤定义"前置条件"和"后置条件",然后用Lean(一种数学证明语言)或Isabelle这类形式化工具来验证:整个工作流程在逻辑上是否自洽,每个步骤的输出是否确实满足下一步骤的输入要求,整个执行轨迹是否符合预期的语义规则。

研究团队以其AI科学家工具里的"提取单篇引用信息"模块为例,展示了这个过程:首先从YAML计划里推断出每个变量在每个步骤前后应该满足的属性(比如"论文标题必须是非空字符串"、"BibTeX格式引用必须是合法的BibTeX"),然后根据任务计划推导出实际执行轨迹,最后通过形式化工具或外部工具验证每个节点的前置条件和后置条件是否都得到了满足。验证结果会明确告诉你每个条件是通过"形式推导"证明的,还是通过"工具调用返回值"验证的,整个流程透明可审查。

**八、还有一个可视化编辑器:用"拖拖拽拽"来写食谱**

不是每个人都喜欢手写文字,就像有人更喜欢用图形界面而不是命令行。AgentSPEX为此配备了一个可视化编辑器,把工作流程显示成一张交互式流程图,每个节点对应一个操作步骤(任务、步骤、条件判断、循环等),节点之间用箭头连接表示执行顺序。

这个编辑器最有意思的特点是"双向同步":当你在图形界面里拖动节点、添加连线或修改参数时,右侧的YAML文本会实时更新;反过来,当你直接在YAML文本里修改内容时,左侧的图形也会同步刷新。两种视图随时保持一致,你可以根据自己的习惯选择用哪种方式工作,甚至可以交替使用。编辑完成后,可以直接在可视化编辑器里点击运行,无需切换到其他工具。

**九、三个现成的AI助手:研究助手、科学家助手、导师助手**

研究团队为AgentSPEX准备了三个可以直接使用的AI助手,每一个都针对特定的实际需求场景,并且以此展示AgentSPEX能够支持多复杂的实际工作流程。

第一个是"深度研究助手"。给它一个研究主题,它会自动生成一份详尽的Markdown报告,功能上类似于OpenAI Deep Research或Google Gemini Deep Research这类商业产品。其工作流程实现了一种多层次搜索策略,由两个可配置参数控制:广度(breadth)控制每一层级探索多少个查询方向,深度(depth)控制要进行多少层追问和展开。在每个层级上,助手会生成有针对性的搜索查询,并行执行这些查询,然后提炼出中间发现,再根据这些发现生成下一层的追问方向,如此递进,直到达到指定深度后汇总成报告。

第二个是"AI科学家助手"。它接受一个初步的研究意图,然后通过两阶段流水线生成一份完整的学术研究提案。第一阶段(思考者阶段):对输入进行安全分类,生成搜索查询,通过OpenAlex学术数据库检索相关文献,然后迭代地生成和打磨研究想法,直到产生一个足够新颖的提案。第二阶段(写作者阶段):按顺序撰写论文的各个章节,同时并行启动多个引用查找工作流,为每个章节补充完整的参考文献。这个助手的工作流程本身就是基于TinyScientist系统的实现,在AgentSPEX框架下被重新表达和执行。

第三个是"AI导师助手"。它接受一份研究提案或论文,生成一份基于评分标准的审阅报告,连同可操作的改进建议。工作流程遵循GUIDE系统的实现思路:首先解析输入文档,将其切分成语义片段;然后对每个片段生成结构化的JSON摘要;最后综合所有片段的摘要,生成覆盖摘要、新颖性、重要性、严密性、优势、不足和建议等维度的全面评审。

**十、在七个测试场景里,它的表现如何**

研究团队在七个公认的测试基准上对AgentSPEX进行了系统评测,横跨科学、数学、写作、论文理解和软件工程五个领域。对于其中大多数基准,他们还设置了两个对照组进行比较:一个是"链式思维"(CoT)基准,即把所有必要信息塞进一个单一提示,让模型一次性推理完成;另一个是"ReAct"基准,即把AgentSPEX的工作流程放进提示词,但不强制执行,让模型自己决定是否按照流程走。

在化学领域,有三个基准涉及STEM多步定量推理。SciBench包含大学级别的科学题目(使用其化学子集,共213道题),AgentSPEX的得分是90.61%,比CoT基准的85.92%和ReAct基准的87.79%都高出不少。StemEZ是MMLU-Pro里物理化学的一个子集,需要复杂的公式推导和多步计算,AgentSPEX得86.57%,而CoT是82.87%,ReAct是84.72%。ChemBench覆盖本科生和研究生课程的化学知识与推理,包含2700余道题,研究团队随机从9个领域各抽了10题共90道,AgentSPEX得83.30%,而CoT是78.90%,ReAct反而只有77.80%,低于CoT。

在数学领域,AIME 2025基准来自美国数学邀请赛,共30道整数答案题。AgentSPEX取得了100%的完美成绩,而OpenAI官方报告的GPT-5(无工具)CoT成绩是94.60%,GPT-5(配备Python工具)是99.60%。

在论文理解领域,ELAIPBench包含从137篇AI研究论文中提取的403道多项选择题,考查深度理解而非表面检索。AgentSPEX得43.70%,CoT得37.22%,而ReAct只有33.80%,比CoT还低了3.4个百分点。

在写作领域,WritingBench横跨6个主领域和100个子领域,评估风格、格式、长度等各方面写作要求的满足情况,共采样120道题,使用"AI担任评委"的方式评分。AgentSPEX得81.00%,ReAct得80.30%,CoT得79.90%,三者差距相对较小。

在软件工程领域,SWE-Bench Verified包含500个经人工验证的真实GitHub问题,AI需要生成能通过隐藏单元测试的代码补丁。AgentSPEX得77.10%,优于mini-SWE-agent的76.20%和Live-SWE-agent的74.60%。值得关注的是,研究团队还测试了不同版本的Claude Opus(4.5和4.6)对各系统性能的影响:AgentSPEX从Claude-Opus-4.5切换到Claude-Opus-4.6时,分数几乎没有变化(77.2%→77.0%),而Live-SWE-agent则大幅下滑了6.8个百分点,说明AgentSPEX的显式结构让它对底层模型版本变化有更好的鲁棒性。

从整体规律来看,AgentSPEX在需要处理大量输入材料或协调多个推理步骤的任务上优势最为明显,这恰好印证了显式上下文管理的价值:当任务足够复杂、信息量足够大时,精准控制每个步骤接收哪些信息比把所有信息都堆给AI要有效得多。ReAct基准的表现也揭示了一个有趣现象:把结构化流程放进提示但不强制执行,反而可能不如不放,因为这给AI增加了"既要理解流程又要解决问题"的双重负担,不如让解释器直接接管控制流逻辑更干净。

**十一、真实用户怎么说:一项小型调查的发现**

研究团队招募了23名参与者,通过Google表单开展了一项用户研究。每位参与者看到同一个AI工作的两种实现方式:一种用AgentSPEX,一种用LangGraph,但不告诉他们哪种是哪种(匿名化处理)。参与者需要回答背景问卷、多项偏好选择,以及开放式的优缺点描述。

结果呈现出一个清晰的对比格局:参与者普遍认为AgentSPEX更易读懂,更容易看清楚AI在哪里用了什么提示词,从零开始创建新工作流程时更方便上手,用"对非程序员友好"和"更容易理解"来形容它。而LangGraph则被认为在构建复杂多步骤工作流程时更胜一筹,被形容为"可定制性强"和"更严谨"。

这个结论其实并不让人意外,但它明确说明了AgentSPEX在可及性和可读性方面的优势,同时也诚实地承认了参与者对其能否支撑真正复杂工作流程的疑虑——而研究团队用三个现成的复杂AI助手来回应这种疑虑。

**与同类工具的比较**

研究团队还系统梳理了AgentSPEX与现有工具在三个维度上的差异:是否支持用自然语言书写工作逻辑、是否支持显式的用户可控上下文注入、是否提供图形化编辑界面。在他们比较的工具里,AutoGen不支持这三项;DSPy也不支持;CrewAI对自然语言有部分支持,但不支持其他两项;LangGraph配合LangFlow可以提供图形界面,但工作流逻辑不是自然语言;n8n提供图形界面,但不支持自然语言和显式上下文;ADL支持自然语言,但没有图形界面和显式上下文;PDL支持自然语言和部分显式上下文,但没有图形界面。只有AgentSPEX同时支持这三项。

**未来还能做什么**

研究团队在结论中提出了几个值得期待的发展方向。一方面是自动化方向:训练AI模型自动生成和使用AgentSPEX工作流程,让AI能够自己"学会写食谱"。另一方面是端到端训练方向:把整个AgentSPEX执行框架融入到AI模型的训练流水线里,让模型在训练阶段就与结构化工作流程紧密结合。此外,多智能体协作编排、更强的长上下文推理支持和更鲁棒的上下文压缩方法,也都是值得深入探索的领域。形式化验证的方向则尤其具有潜力——如果能把对AI行为的数学级别的验证变成常规工具,对那些在高风险场景下部署AI的应用(医疗、法律、金融等)来说将会是一个重要的安全保障。

归根结底,AgentSPEX做的事情可以用一句话概括:它把AI的"即兴发挥"换成了"按谱演奏",让AI的行为从难以预测变成可以审查、可以调试、可以验证。这不仅让AI助手更可靠,也让更多没有编程背景的人有机会真正参与到AI工作流程的设计和调整中来。在AI越来越深入各个专业领域的今天,这种可及性和可控性的提升,或许比单纯的性能提升更值得关注。

有兴趣进一步了解技术细节的读者,可以通过arXiv编号2604.13346找到完整论文,或访问研究团队在GitHub上公开的代码库(ScaleML/AgentSPEX)查看实际实现。

Q&A

Q1:AgentSPEX和LangGraph、DSPy这些工具有什么本质区别?

A:AgentSPEX的核心区别在于用YAML自然语言格式定义工作流程,而不是Python代码。LangGraph和DSPy的工作流逻辑与编程代码高度耦合,非程序员很难读懂或修改。AgentSPEX让领域专家可以直接用文字描述AI的工作步骤,同时配备了图形化编辑器,降低了使用门槛。此外,AgentSPEX支持显式的上下文管理,每个步骤只接收它需要的信息,这是大多数现有框架不具备的能力。

Q2:AgentSPEX在软件工程任务上为什么比其他工具更稳定?

A:在SWE-Bench测试中,当底层AI模型从Claude-Opus-4.5升级到4.6时,AgentSPEX的性能几乎没有变化(只下降0.2%),而Live-SWE-agent下降了6.8%。这是因为AgentSPEX把控制流逻辑和工作步骤放在YAML文件里,与模型调用代码分离,模型版本变化不会影响工作流程结构本身。紧耦合系统的提示词和执行逻辑混在代码里,模型行为稍有改变就可能需要协调修改多处。

Q3:AgentSPEX的检查点和回放功能具体怎么用?

A:检查点在每个步骤完成后自动保存,记录已完成步骤、所有变量的当前值和沙盒状态。任务中断后可从任意检查点恢复,系统自动跳过已完成步骤继续执行。选择性回放则用于开发调试:当你想修改第五步的提示词时,不必重跑前四步,只需指定"从记录里加载前四步的结果,从第五步开始用新指令实时执行",大幅节省调试时间和API调用成本。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-