别告诉智能体怎么做,只声明做成什么样|AI Engineer × OpenProse

中文深度整理,非逐字翻译
原始标题
Stop Telling Agents How — Dan Barrett, Raymond Weitekamp & Jose Montes de Oca, OpenProse
节目 / 来源
AI Engineer
嘉宾
Dan Barrett、Raymond Weitekamp、Jose Montes de Oca
原始发布日期
2026-10-19
时长
约 50 分钟
内容类型
会议分享 / 声明式多智能体合同与事件驱动编排
原始内容
前往原始来源 ↗

Dan Barrett 是 OpenProse 的创建者,做了 12 年软件工程。同台的是 Raymond Weitekamp 和 Jose Montes de Oca。字幕把产品听成 Open Pros,把 Raymond 做的托管入口听成 run.pro.md、run.pros、run.process。下文按 OpenProse,托管入口按 run.prose.md。判断模型 Jev 被听成 Jeff、Jeb,下文按 Jev。Jose 在字幕里没有单独的长段发言,只保留 Dan 的介绍:他早年在 Google Cloud,影响了他们看这个问题的方式。Raymond 是博士、两次创业,Dan 说他做 Harness 工程的时间和自己认识的任何人一样长。Harness 是包住模型、让它能调用工具并维持运行的那一层。

2021 年 4 月,Dan 说自己曾在一个 Discord 里被叫成当时最好的提示词写手。字幕把那个社区听成 Aluther AI 的 back rooms,对不上可以核对的公开写法,下文不改成另一家机构。这项手艺的寿命,他估成大约两年到三年。提示的写法、手工填上下文、Harness 往窗口里塞材料,这几层都换过。他看到没换的是:还是得把脑子里要的东西交出去。

OpenProse 把这件事写成 Markdown 合同。合同声明目标态:输入、输出、技能、工具,以及怎样才算做成。Claude Code、Codex 或其他宿主去找做法。Raymond 说整份技能,也就是系统提示,上次查看接近 7 万到 8 万 token,他们正在清理。Dan 把现场打开的那份操作说明称为内核,并说模型更聪明了,就可以写短一点。字幕没有一句把「内核」和这个 token 数钉在同一个名词上,下文按同一层叙述,两个口径都留下。Raymond 用这套程序给自己的 GitHub 拉请求做对抗式评审,有的一轮就过,有的大约 14 轮,评审智能体看起来对齐了才放行。他们拿得出金额的例子是量化模型文档:一家大银行大约 4000 个模型要按年重新写文档,Dan 把这个问题估到每年 1000 万到 5000 万美元。

原始来源:Stop Telling Agents How — Dan Barrett, Raymond Weitekamp & Jose Montes de Oca, OpenProse。中文深度整理,非逐字翻译。本文依据 YouTube 自动生成的英文字幕,专有名词和数字可能有识别误差。

意图还在,层往上抬了一级

Dan 把过去五年收成几层。模型还在逐个 token 往下接的时候,提示有好写法和坏写法。再过几年,人开始手工填上下文:检索结果、工具调用、搜索结果,塞进窗口,这被叫做上下文工程。再往后,Harness 自己做这件事。最近 8 到 10 个月,他又看到一批论文把抽象再往上推,脚下的 Harness 也在换。当天上午 Anthropic 讲了 flows。他的转述是:一种会自己改拓扑的 Harness,去管理子智能体。他说这种管法,一年前还想不到。

他把提示、上下文和 Harness 都说成已经解决。下一问变成:怎样给想要的东西起名。他要借的是旧工程习惯。提示要能组合,组合优先于继承。写法是声明式的:写出结果、目标和终态。他把这份终态叫做合同。名字一旦能说清,任何 Harness 都可以自己变形、扇出、打循环,直到走到那里。

把做法一并写死,他看成把成本和智能留在桌上。更强的模型本可以自己找出做法。这句在开场是原则。降本的操作在后面的提问里才说清:先用贵的模型跑通,再把那次轨迹收成一份做法,成本才往下走。

合同要能彼此组合。系统跨团队、跨公司时,复杂度留在局部,块和块还能接上。

两句话:全是文本,由事件驱动

Raymond 只要听众记住两句。第一句:它就是 Markdown。他们有时叫它面向智能体的编程语言,有时叫框架,落下来是文本,是一份很长的提示。第二句:它是事件驱动的。工作由事件触发。他会另找一个智能体来写这些程序,那一步仍然可以聊天。程序跑起来的时候,没有一轮对话。

开源,可以在本地用 npx skills 跑。托管版是他做的 run.prose.md。字幕后面那句安装命令被听成 npx skills add,包名又听成 open pros。下文不补一条完整安装命令。不想自己装,也可以找他们做。演讲当时,托管版里可选的模型,他称是 OpenAI 里靠前的三个,以后再加。

他按房间里的三类人讲为什么要管。受监管的行业,他点了银行和其他金融服务。卖点是发出去的只有 Markdown:沿用已经在用的编程智能体、推理、护栏和技术栈,不必为了这层再部署一套运行时。他直接说不必经过采购部门,也不必经过 IT 部门。这是他们的分发主张。采购和 IT 会不会因此免掉,现场没有展开成制度结论。

自己不写代码的人,他的标准是:能读合乎逻辑的英文,就能读 OpenProse。它在技术上是一门有语法的语言。他们故意不讲语法。文件给人读、给人改,不指望人手写一整份模式。你描述工作,智能体写出程序,你看着再改,改完的程序变成可复用的工作流。命令行里这个动作叫 pros write。托管应用里,是一个智能体在替你驱动。

对 AI 工程师,他的说法是:这是一个不像框架的框架。连框架的编译器和虚拟机,本身也是一份很长的提示。你是在让 Claude Code 或 Codex 把这份程序编译出来。字幕把这两家听成 cloud code、codecs,下文按 Claude Code 和 Codex。Anthropic 那种动态智能体工作流,他当作类比:同类的复杂编排,可以写成一份 Markdown 合同,放进任何一个编程智能体里跑。

你是编译器。这不是比喻

合同里可以声明的东西,他不展开类型,只列能力。可以建子智能体。可以给某个子智能体指定技能。可以限定工具。他点名搜索用 Exa,理由是对他更快、更便宜,不要走普通网页搜索。后面字幕把 Exa 听成 excess,下文按 Exa。技能可以是公司自己的。依赖不齐,就不要跑。他把它说成编译:依赖没齐,就不要编译。

然后是这份程序的输入,以及合同必须交出来的输出。

运行时本身也是一份很长的提示。他喜欢里面的一句:你是编译器。这不是比喻。他说这句看起来能工作。

内核是 Markdown,给智能体读,不给人读。他们原来排过一版好看的,有人抱怨看不懂。它像引导程序,也像一条解析路径:告诉智能体会遇到什么,以及去哪里找下一份文档。程序是另一份 Markdown,写的是终态要满足的条件。Dan 在 Codex 里演示量化文档时,传进去的就是这两样。内核他说已经公开,现场可以下载。字幕没有念出地址,本文不补。

他们刻意不去改宿主自己的子智能体系统。Claude Code 有一套,Codex 是另一套。提示不能写成只认其中一家。Raymond 的位置是元 Harness:你自带 Harness。OpenProse 要被这个 Harness 编译,自己不做那个 Harness。

Markdown 的前置信息里放着云上要发生的事。程序可以导出成纯 Markdown,发给别人,对方上传之后按同样的方式跑。他用这个来守住「可组合,而且仍然只是 Markdown」。

语法上,Dan 用三级标题承载类型。Raymond 说,让人学会这套再从头写,不是入口。入口是那个会写程序的智能体。会花钱或能花钱的动作,必须有人确认。他说这是一条最佳实践。

先放开做法,再把黄金会话收成做法

有人问:为什么有时还是要插手做法。Dan 把「要什么」和「怎么做」放在一条谱上。先把结果声明得很松,让强的智能体自己走通。走通之后,拿出那次轨迹,收成一份做法,他叫作钉死,或者收缩包装。起点用贵的模型。做法变具体、变确定之后,成本下来。Markdown 可以从声明式起步,再走到更过程化的指令。

Raymond 补了两层现实。这些东西不确定。人们展示过的、号称钉死的稳定端点,他也看到在变,因为各家算力吃紧。另一层是预期。第一次用某个模型时觉得惊人,就想每次都这样。字幕把那个模型听成 Fable,下文不改成另一个模型名。用久了,预期自己在变,某次不再出现,不全是可靠性。所以一边可以把一次特别好的会话收成可复用的工作流。他举的原话是:这是我用过最好的一次 Claude Code 会话,把它做成以后都能跑的流程。另一边,人看见的 Markdown 只是冰山一角。整份技能,或者说系统提示,上次查看接近 7 万到 8 万 token。他们在清理。Dan 说模型更聪明了,这份可以短一点。

这 7 万到 8 万下面,是他们盖在 Markdown 上的类型系统,加上一份很具体的提示,用来让智能体交出复杂的多智能体结果。能对上的缩短理由是 Dan 那句:模型更聪明了,就可以短一点。现场没有给缩短前后的 token 对照。后面谈到前缀时,Raymond 又说大约 10 万 token。两个数没有被收成同一个口径,下文分开留着。

新会话拿合同当对照

他们要离开「一切都是对话」。触发可以是定时任务,可以是 GitHub 上新开的 issue 或拉请求,也可以是一条 webhook。他随口举的例子是 Stripe 出了问题。触发之后,跑已经写好的工作流,一直做到合同交付。

在 run.prose.md 里,一份工作等于一份合同加上一个触发器。定时可以简单到每天跑一次。演讲当时,应用里真正接上的两类触发是 webhook 和 cron。Slack 应用和 GitHub 他都看成 webhook。还要别的触发,他说可以加。

他用这套程序开发这套程序,为的是当天要演示的 GitHub webhook。两条主线。一条:进来一个 GitHub issue,就按一份程序去处理。输入是这条 issue,输出是一个提交,中间可以是多智能体,可以限定技能或模型。另一条是拉请求评审,事件驱动的对抗式评审。

对抗来自当天上午 Anthropic 工坊里的一个问题:自我复查。你在 Claude Code 里准备推上生产,再让它检查一次。它偏向认为自己做得不错。人也这样。Raymond 的做法是让建造的智能体从应用本身接到压力,压力经过拉请求回来。

他给观众看的是量,不是某一页 diff 的内容。界面向回大约 3 天,也有 4 天前的。这几天里拉请求一场接一场。他连说了三遍 dozens,下文不收成一个整数。他每要一个和这次演示有关的功能,就会开火一轮评审智能体。有的明显一次就过,只有一轮。有的大约 14 轮,评审智能体看起来对齐了,才放行。14 轮是他看着界面说的,不是一份公开评测表。

当天他还改过触发方式,并要求只用这套系统自己改,而且别动生产,改在预发上。开发版和生产版会给出不同的评审。跑着的智能体不能把自己的工作当成完成,除非开发智能体把这些反馈吸收进去。字幕把 incorporate 听成 corporation。能留下的是:完成以把反馈吸收进去为准。

Dan 把差别说成:这些结果都在对一份合同。每一轮可以想成一个新会话,拿去对你声明式写下的合同。这把模型拉出自我确认的循环。他的原话是,不想让同一个模型检查自己刚做完的东西。现场做到的是:新开会话,拿结果去撞合同。换一个更便宜的模型来裁定过没过,是下一节的缺口,演讲时还没做进产品。

它说做完了,还缺一个便宜的判断

听众问,这像不像一次性分类器的机会,并点了 Jev。Dan 承认:拿一份理想状态的合同,去对凌乱的真实状态,判断过还是不过,正是这类决策模型该做的。他说这个还没在眼前这版里,但在来的路上。

Raymond 把缺口说得更直。OpenProse 的弱点是:你让智能体自己说,合同我已经满足了,东西在这里。意图上,它和 DSPy 同类,都想要一层抽象,用来表达复杂工作流。字幕全程说 DSP,下文按 DSPy。实现是反过来的。DSPy 把每一次模型调用收成黑箱,用确定的代码和类型接口把黑箱圈住。OpenProse 认定模型已经强到可以当编译器,于是把事情留在模糊的语言里。后果有两面。跑在 Haiku 上,和跑在更强的模型上,结果会差很多。字幕把更强的那个听成 Fable,和前面听到的是同一个名字,下文不改名。另一面就是它还可以自己宣布做完。

他给 Jev 这类决策模型、他称为系统一的模型,留了两个位置。一个在任务末尾当核验者,要快、要便宜。一个当路由:GitHub 事件进来,issue 走处理工作,拉请求走评审工作,不必再有人去点那一下。路由是他想做的,演讲时还要人自己选工作。

语言本身他不放进 Jev。那些模型不生成。生成语言、理解语言,不是它们的位置。

同一段提问里还有人问:这些对着合同的运行已经在了,为什么不直接拿去强化学习。Raymond 的回答分两半。对人来说,全是文本,就可以进 Git,也可以放进 Notion 或 Jira,团队里的人都能用。对工程来说,全是文本也适合以后做强化学习。他们现在没做,在和一些潜在客户谈。量还没大到必须处理长前缀。真到了自己托管模型、前面挂着大约 10 万 token 前缀的时候,可以把这段前缀压成更省 token 的表示。他随口说,真有人要在 OpenProse 里跑到万亿 token,他们乐意做这件事。紧接着的限定是:还没到这个量重要的时候。

组合合同,路径留在中间态里

Dan 后来把「继承」改口成组合。框架里的核心能力,是同一次运行注入多份合同,智能体得同时满足它们。

事件驱动的那一半,看起来有点像继承。他更愿意比成 React 那种记忆化:组件仍是组合,上游的数据变了,变化会走到下游。他们曾经让智能体判断上游状态变了没有、要不要触发下游。这很贵。Jev 在这里变成便宜的语义分类器,或者语义上的记忆化,像一层缓存:由它决定什么过期了,再踢下游。他说这块还在建,现在的框架里没有 Jev 这一截。

这和填模板不一样。编码器也可以按前缀把空填上。这里能模板化的是整段多智能体工作流。他举的简单形状:输出是一篇文章,带上类型、长度和其他约束;输入是题目;父级智能体决定什么叫好,并决定何时退出。退出判断上,更强的模型会好过更弱的。研究员子智能体带着 Exa 的命令行和技能,因为他不要随便哪一种网页搜索。写作者子智能体带着他过去写得好的 10 篇文章,照这个味道写。再加一个文字编辑子智能体。整份他说大约 100 行 Markdown。后面「可能要花 10 小时」那句被截断,下文不把 10 小时当成一条主张。

沿路还可以放中间合同。他把合同想成一张有向无环图。中间一步满足自己的合同,才引起下一步,直到最后那份也满足。路径可以用这些中间合同声明出来。每一步里面,智能体仍然可以灵活地找做法。

形状也能模板化。Claude 的动态工作流出来时,有一篇博客列了六种类型。他当场点了三种:带子智能体的扇出再扇入,对抗式评审,以及循环直到某个条件成立。这些都可以写进一份程序,再放到任意智能体上跑。他没有把六种都念完,下文不补另外三种。前提是智能体已经善于管理自己,而且宿主大多有子智能体。字幕说 plain vanilla pi 至少在他上次看的时候没有子智能体,复杂工作流会想要子智能体。下文不把 pi 改成另一个产品名。他收成的硬条件主要是子智能体。有人提到上下文。Bash 他随后说可以不要,也可以在虚拟机隔离里的代码模式中跑。

内核里的某条路径放着最佳实践和反模式,讲的是声明结果时该做什么、不该做什么。人可以不自己把整份合同打出来,而让另一个智能体按这份指南迭代。Raymond 演示的就是这个。Dan 说,把意图从人脑子里弄出来,仍是难的那部分。这只是其中一块。

有听众拿规格驱动来对。Dan 说自己之前没把它叫成规格驱动开发,但这东西几乎天生就是。他愿意拿别人的规格,配上启动内核再跑程序,看结果如何。他明确说还没拿一份规格驱动开发的合同试过,想看两份规格是互相覆盖,还是互相带偏。Raymond 描述的接法是:把整段工作流放进一份程序,每个阶段让子智能体加载序列里的下一个技能。字幕把这套规格的作者听成 Matt PCO,开场那步听成 girl me。下文不改成人名。

内核为什么长成这样,Dan 把它归到多年和需求表达打交道的经验:有的人很不善于把要求说清,有的人很善于。另外他们在内部做基准。他称之为某种进化算法:看输出还符不符合,再把内核削短。现场没有给出削短前后的 token。依据是实践和实测。他说这里没有魔法,就是英文,就是语言。

4000 个模型,每年 1000 万到 5000 万美元

量化文档之前,Dan 先把部署说完。云上能跑。更想讲的是可以在机构内部、在开源模型上、在你自己的 Harness 上建。OpenProse 放在应用层。数据不必送到实验室。他把更要紧的东西说成机构的操作知识,也就是标准作业程序:连作业程序也不必送到大实验室。他们发布的是开放核心,许可证是宽松的。他说已有若干大公司在内部这么用,没有点名。模型用公司已经批准的那些。

他展示的工作流,是在给一个客户做量化模型文档。熟悉这件事的人知道,监管要求模型文档按周期更新:每三年,或每一年,或在某些事件变化时。他的经验是,这通常吃掉很聪明的白领的时间。要写的包括模型用来做什么、在什么条件下测试过、上游还有哪些模型引用它,以及监管、内部审计和内部合规要的其他项。监管文档在他看来就像一份 OpenProse 程序:要求本身写成了程序。

演示放在 Codex 里。他说换 Claude Code 或你自己的 Harness 也行,这层与 Harness 无关。步骤是启动内核,再跑一份具体程序。他选了一个相对便宜的模型,为了跑得更快。跑的时候文档还在生成,随后看起来收尾了。这份文档写的是 SOFR 曲线。字幕听成 sofer。这是一个公开模型,他强调没有展示银行内部数据。他问房间里有没有量化人员愿意当场看质量。有人接话,他说会后去找。麦克风上没有一份打分。

数字在这之后。一家大银行大约有 4000 个模型,要按年重新写文档。对其中一些更大的银行,他把这个问题估到每年 1000 万到 5000 万美元。他们说自己在用低得多的成本做,而且做得好到让他们吃惊。这是他们的说法。现场没有准确率,也没有节省比例。他主动留的限制是:过合规、审计和监管是另一段工作。字幕把这段听成 paddle,意思是还没走完。能做的对照,他说是历史文档,以及团队自己做要花多久。在场的量化人员可以打分,让他们知道模型做得怎样。量化人员去建模型。监管文书不是他们该耗着的那部分。

还不知道要什么,就继续聊天

Raymond 解释聊天为什么长得那么快:你不必先知道自己在找什么,就可以开始。生成模型把东西递回来。他是很早的 DSPy 用户。他的笑话是:糟了,我现在得知道自己要什么。DSPy 要你先写出想要的那个签名。他不认为 OpenProse 适合那个阶段:你还不知道形状,甚至不确定自己在找什么。被人类反馈调成会聊天、会说服人的智能体,也不必然是最好的那一类。有些工作流里根本没有人在对话。

Dan 把边界说成用例。一次性的事不要用这个。探索的时候,聊天正好。OpenProse 要接的是你得做很多次的事。它得可靠,得可重复,得可审计。这里隐含一句:你知道自己需要什么。

收尾时他说,确实有软件工程师在用 OpenProse 开发软件。更多用户在用它做运维、产品管理,以及量化模型文档,也就是软件工程以外的事。他说 Markdown 文档对非工程师更有吸引力。合同满不满足,演讲时仍由执行的智能体自己宣布。便宜的判断模型被放在核验、路由和语义缓存三个还没交付的位置。