为什么 OpenAI 开发了 Symphony 并免费开源

BBetter Stack
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00这是 OpenAI 的 Symphony,一个用于编排长期运行代理的开源工具,它使用
00:00:05现有的问题追踪器(如 Linear)来帮助您的代理在没有任何
00:00:10人类监督的情况下自主完成任务。但为什么代理在使用它之前不需要从头开始构建呢?
00:00:14它是否仅支持 Codex CLI?这是否意味着 OpenAI 将推出更多
00:00:18开源工具?点击订阅,让我们一起一探究竟。
00:00:25Symphony 的出现是因为 OpenAI 遇到了人类注意力瓶颈,这意味着工程师
00:00:30在上下文切换开始负面影响生产力之前,只能同时监督 3 到 5 个 Codex 会话。
00:00:35当然,这无法进行规模化。那么猜猜 OpenAI 是如何解决
00:00:41“代理快、人类管理慢”的问题的?他们裁掉了人类管理员。某种程度上是这样。
00:00:47因为有了 Symphony,人类只需将任务放在看板上,一个新的代理就会被启动来完成该任务,
00:00:52代理只有在需要审查时才会让参与进来。
00:00:55但 Symphony 与 Multica 和 Conductor 等类似工具相比如何呢?那么,
00:00:58观看演示,一切都会变得非常清晰。不过在开始之前,我只想说
00:01:03Symphony 的安装过程是我这辈子见过最诡异的。或者,它也可能是
00:01:07安装某种东西最天才的方式。我们稍后再谈。
00:01:10首先,让我们看一个基础示例。现在 Symphony 正在运行,
00:01:14轮询 Linear 中的任务。在 Linear 中,我将创建一个新问题,
00:01:18内容是使用 TypeScript 和 BUN 构建一个 Hello World 应用。
00:01:22目前 Symphony 还没有配置为处理积压任务。所以我把状态改为“待办”
00:01:27并点击“创建问题”。请记住该任务的 ID,即 SYN7。
00:01:31过了一会儿,Symphony 识别到了该任务的 ID。几秒钟后,
00:01:36我们遇到了一个 GraphQL 验证错误,这不是什么大事,Codex 很容易就能修复它。
00:01:41在那之后,我们可以看到 Codex 已经完成了工作,并将问题状态
00:01:45从“待办”改成了“已完成”,并由 Symphony 在此留下了一条评论。这意味着如果我们去
00:01:49我们的 Symphony 工作区目录(稍后会详细介绍),我们可以看到有一个
00:01:53与我们问题 ID 相同的新工作区。进入该工作区,可以看到为
00:01:58Hello World TypeScript BUN 应用创建的文件列表。如果我们进入 source 目录,
00:02:04可以看到应用的代代码就在这里。这基本上就是 Symphony 的核心概括。
00:02:08现在让我们看看如何设置它。根据这个代码库,有两种方式
00:02:12可以安装 Symphony。选项二是我们习惯的方式:设置 Elixir,
00:02:16克隆代码库,然后构建代码并使用现有的工作流文件运行它。
00:02:20然而选项一可能是最诡异、也可能是最超前的安装方式。
00:02:25你基本上只需给你的编程代理发送这个提示,它就会读取规范文件,
00:02:30该文件长达 2000 多行。但它基本上为你的代理提供了
00:02:34关于如何构建 Symphony 的详细说明,这太疯狂了,因为如果大家都走这条路,
00:02:39没有两个版本的 Symphony 会是一模一样的。有些人的版本可能会有
00:02:43不同的功能和语言,这对于 OpenAI 来说简直是维护和支持的噩梦。
00:02:47但它也有点天才之处,因为如果你构建了自己的 Symphony 版本,
00:02:51你会对它有责任感。你会修复漏洞,添加功能,
00:02:55并实质性地维护它。如果你不想让 Symphony 使用 Linear 或
00:02:59Codex,那全凭你决定。有人构建了在 Charm CLI 上运行的 Go 版本 Symphony,
00:03:04还有人构建了一个由 Claude SDK 驱动的版本。我没那么有创意,
00:03:09所以我把默认提示放入使用 GPT 5.5 Low Effort 的 Codex 中,它给了我一个 Python 版本的
00:03:15Symphony,这很合理,因为大语言模型非常擅长 Python。一旦完成,
00:03:19你需要一个 Linear 个人 API 密钥,你可以从“安全与访问”中获取,
00:03:23点击这里即可创建一个。然后你需要将该密钥添加到你的工作配置文件中,
00:03:28这个文件告诉 Symphony 如何工作,包含一些 YAML 前置数据,
00:03:32其中当然包括 API 密钥、让代理知道何时可以处理任务的激活状态,
00:03:37以及工作区根目录和 Codex 命令,这是 Symphony
00:03:42用来启动编程代理的 shell 命令。下面是发送给编程代理的
00:03:46针对每个问题的 Markdown 提示。如果你感兴趣,可以在 OpenAI 的代码库中访问他们的 workflow.yaml 文件。
00:03:51但就目前而言,这个工作流还不适合真正的项目。假设我想修改
00:03:56我一直在开发的电影仿真应用。我需要添加一个 create-after 钩子,它在
00:04:01Symphony 为问题创建工作区后运行,这个钩子会先将代码库克隆到
00:04:06工作区目录,然后在该库中切出一个新分支。我还添加了一个 run-after
00:04:10钩子,在 Codex 完成问题处理后运行。它会暂存文件,然后
00:04:15创建一个新提交,随后推送分支并使用这些值创建一个新的拉取请求 (PR)。
00:04:20现在如果我使用 UV 运行 Symphony(UV 也被 OpenAI 收购了,那是另一个
00:04:25视频的主题),它正在轮询新问题。如果我创建一个新问题来更新 README,只需
00:04:30在显示批量处理的部分,使用通配符而不是显示多个文件,同样,
00:04:35我会将它从“积压”改为“待办”,然后点击“创建问题”。现在 Symphony 已经识别到了
00:04:40该问题。如果我们查看 Symphony 工作区目录,可以看到有一个匹配
00:04:45我们问题 ID 的新文件夹,其中包含克隆的项目。既然 Symphony 已经完成了
00:04:49问题的处理,它已将状态更改为“已完成”,并创建了一个带有 Linear 工单链接的新 PR
00:04:54以及我要求的具体更改。当然,我可以修改我的 Symphony 代码来添加
00:04:59更好的 PR 描述,并在评论中放入 PR 链接,但我确信这对
00:05:04Codex 来说非常容易。这就是 Symphony 的简要概述。如果你已经熟悉或者在
00:05:08使用 Linear 的公司工作,那么你会对这个界面感到驾轻就熟。如果你是 Codex 用户,
00:05:13你可以使用你已经安装的技能、MCP 工具和插件。我个人不
00:05:18使用 Codex,但我完全能理解 OpenAI 对 Symphony 的愿景。想象一下
00:05:22你有一个开发团队都在用 AI 开发同一个项目。与其让他们各自
00:05:28拥有自己的工作流套件,不如有一个核心代理,具备核心技能、核心
00:05:33工具、核心工作流和插件。每个开发者都可以通过给它
00:05:37分派任务来与之交流,他们可以看到其他人在做什么,使用了哪些提示,并能
00:05:41一眼看出其他功能是否会影响到他们正在开发的功能。尽管
00:05:46很难想出一个完全不触及别人正在开发的代码部分的功能。
00:05:49但尽管 Symphony 很酷,但在我看来,Multica 做得更好,因为它
00:05:54更容易设置、创建和添加不同的代理,你甚至可以安排任务。尽管如此,
00:05:59我完全能看到 Symphony 的一席之地。它就像是 Multica 的基础版本,你可以
00:06:04添加你想要的精确功能,而不是拥有一个为你构建好的产品。所以可以
00:06:08把 Symphony 看作是 Pi 套件,而把 Multica 或 Conductor 等其他工具看作是成衣代码。如果
00:06:13你对 Multica 一无所知,那就看看这个视频,它会带你
00:06:18了解你需要知道的一切。

Key Takeaway

OpenAI 开源的 Symphony 通过将任务管理工具 Linear 与自主代理结合,让工程师从繁琐的会话监督中解脱,实现代理自动领取工单并提交拉取请求的规模化开发流程。

Highlights

  • Symphony 解决了工程师在上下文切换影响生产力前只能同时监督 3 到 5 个 Codex 会话的注意力瓶颈。

  • 系统通过轮询 Linear 中的任务 ID(如 SYN7)并自动将状态从“待办”更改为“已完成”来独立执行任务。

  • 安装方式包含向编程代理发送一份超过 2000 行的规范文件,由代理根据指令自行构建出 Python 或 Go 等不同语言版本的 Symphony。

  • 工作流配置文件 workflow.yaml 通过 YAML 前置数据管理 API 密钥、激活状态、工作区根目录以及 Codex 启动命令。

  • 通过设置 create-after 和 run-after 钩子,Symphony 可以实现自动克隆代码库、切换分支、提交代码并推送拉取请求 (PR)。

Timeline

解决人类注意力瓶颈的自动化方案

  • 单个工程师在生产力受损前只能同时管理 3 到 5 个 Codex 会话。
  • Symphony 允许人类仅在看板上投放任务,随后由系统自动启动代理完成工作。
  • 代理仅在需要人工审查的特定环节才会介入并通知人类。

人工管理代理的速度跟不上代理本身的执行速度,导致开发规模无法扩大。Symphony 的设计核心在于移除持续的人工监督,利用看板系统作为人机协作的缓冲带。这种模式将人类的角色从“操作员”转变为“审查者”,从而提升整体产出效率。

基于 Linear 任务追踪的自动化工作流演示

  • 系统持续轮询 Linear 中的任务,并在识别到特定 ID 后开始构建 TypeScript 和 BUN 应用。
  • Codex 在处理过程中能自主识别并修复 GraphQL 验证错误等技术故障。
  • 任务完成后,Symphony 会自动创建以任务 ID 命名的工作区目录并存储生成的源代码。

在实际操作中,当 Linear 上的任务状态切换为“待办”时,Symphony 会立即介入。即便遇到代码错误,Codex 也会尝试自我修复并更新任务状态。最终产出的文件结构清晰地组织在对应的工作区内,并由代理留下执行反馈评论。

基于提示词的分布式安装与构建方式

  • 除了传统的 Elixir 克隆安装,用户可以通过向代理发送 2000 行规范文件来生成自定义版本。
  • 这种灵活的构建方式允许用户根据偏好生成 Python、Go 或基于不同 SDK(如 Claude)的 Symphony。
  • 配置文件需要 Linear API 密钥以及定义代理行为的 Markdown 提示词模版。

这种“诡异”的安装方式实际上赋予了用户对工具的责任感。由于每个人的实现版本可能在语言和功能上有所不同,它既是维护的挑战,也是定制化的机会。大语言模型在 Python 上的强势表现使其成为构建此类自动化工具的首选目标语言。

高级钩子配置与团队协作愿景

  • create-after 和 run-after 钩子支持克隆代码、创建分支、暂存文件以及推送 PR 等复杂 Git 操作。
  • Symphony 作为一个核心代理,为团队提供统一的技能、工具集和工作流,避免工作流碎片化。
  • 虽然 Multica 在设置便捷性和任务调度上更具优势,但 Symphony 提供了类似硬件套件的高自由度定制空间。

通过扩展工作流,Symphony 能够处理真实的工程项目而不仅仅是简单的文件生成。它将整个团队的 AI 交互透明化,让每个开发者都能观察到他人的提示词和任务进度。这种中心化的代理模式旨在解决多人协作中可能出现的代码冲突和逻辑重叠问题。

Community Posts

View all posts