代理开发生命周期已登陆 Cloudflare

工程经理们过去几十年一直在寻找让众多程序员在共享代码库上协作的方法。这项工作可以追溯到“系统开发生命周期”(兰德公司,1975年)——如今通常被称为“软件开发生命周期”(SDLC),它定义了以下阶段:
- 计划
- 设计
- 实现
- 测试
- 部署
- 维护
- 退役
人工智能让曾经最慢、最昂贵的步骤——实现——变得最快、最便宜。这反过来又对下游产生了影响:让负责SDLC中所有其他步骤的人员不堪重负。从被成千上万个拉取请求和问题轰炸的开源维护者,到随着软件交付速度提高几个数量级而试图拯救生产系统免于崩溃的生产工程师。
我们都在努力拯救我们的系统、我们的客户和我们自己,免于陷入混乱。

答案——矛盾的是——是让代理做更多的事情。这才公平!你绝不会让你团队中的工程师写代码,却指望别人去验证、合并、部署它,在生产环境中拿着寻呼机,并分类处理进来的错误。但这就是大多数公司现在对代理的做法。模型已经显著改进,代理运行的时间跨度更长,能够承担更大的任务。但它们尚未在SDLC中均匀使用。
Cloudflare将代理视为我们的客户。它们可以购买域名、创建
临时账户。我们知道代理需要API和工具,以便代表我们的客户管理完整的SDLC——不仅仅是开始阶段。
__使用整个Cloudflare API__因此,今天我们推出了一套新工具的开端,让代理能够超越仅仅生成代码,承担更多SDLC工作。我们分享我们为解决自身问题而构建和学到的东西:
— 一种在数百万个仓库上运行CI/CD的新方式,可以自我修复并生成代理来执行更复杂的任务,构建在Cloudflare Workflows之上。@cloudflare/ci— 为代理提供与生产环境相同的可观测性,内置于Wrangler和Cloudflare Vite插件中。本地开发中的OpenTelemetry追踪— 一个围绕代理的OpenTelemetry追踪来观察、维护和改进代理的新家园。推出:Cloudflare Agents和Agent Traces— 我们自己在所有产品和系统的仓库及规范中强制执行最佳实践的经验。Cloudflare如何使用AI强制执行工程标准— 我们自己的经验,构建系统来自动分类、复现、验证和修复大型且不断增长的开源项目的问题。我们如何构建软件工厂将Astro的GitHub问题数降至零
不过,这里还有更大的问题。当我们审视SDLC时,即使拥有最好的自动化,其假设也无法适应智能体所能编写的代码量以及软件团队为保持竞争力所必须达到的速度。我们认为,是时候用ADLC——智能体开发生命周期——来取代SDLC了。
SDLC适用于软件团队,ADLC适用于软件工厂。
现在,每个人都在谈论构建“软件工厂”——即由智能体驱动的系统,它们接收输入并自主构建、改进、部署和管理软件。无论是生产错误、客户提交的缺陷报告,还是新功能的想法,都可以作为输入,完全委托给智能体处理。
即使有了智能体,大多数软件项目仍然受到人在环路步骤的制约。人类提示智能体,告诉它们继续,指示它们应用代码审查中的反馈,不断监督众多智能体并给予指令。在大多数软件团队中,人类仍然管理着SDLC模型中的每一步——唯一的变化是他们将每个步骤中的任务委托给了智能体。
因此,软件工厂背后的梦想是:如果你重新构想这种方法,并为构建软件的整个流程建造一个工厂,会怎样?我们如何将更多人类时间转移到真正需要人类灵感、品味和判断力的事情上?这将为我们留出更多时间来设计、与客户交谈,并拥有更远大的梦想。
软件工厂必须管理SDLC中的相同步骤,但它对其所构建的平台提出了更高的要求。因为当你交出钥匙,让智能体驾驶时,每一个以前依赖人工的手动步骤都必须适应为:
可编程的——“点击操作”对人类来说是不良实践,但对智能体来说则完全行不通。每一个操作都需要智能体可以调用、调试和依赖的API。水平可扩展的——当人类在构建时盯着屏幕,或手动接管暂存服务器以在生产前发现问题时,预览部署是一种可有可无的功能。对于智能体驱动,每个智能体都必须拥有与生产环境匹配的预览环境。可重现的——如果有一个bug只能在iPhone 15上模拟4G时重现,或者只能从某个国家的IP重现,该怎么办?典型的单元测试和集成测试工具在这里无济于事。实时的、基于推送的——依赖人类查看正确的仪表盘来判断系统是否正常,这从来都不是好方法,但对于智能体来说,这完全行不通。你需要一个事件来触发智能体执行工作。原子的——每个更改都需要独立可测试、可发布、可观察和可回滚,而不影响无关行为。有权限的——你知道可能不应该,但今天你会给几个信任的工程师SSH进入生产环境的权限,以防万一出现严重问题。你不可能让智能体这样做——但如果没有升级和获取更多权限的能力,它怎么能完成工作呢?自我改进的——人们从经验中学习。第一周发布或第一次值班轮换时,人类很慢,需要跟随他人学习,但之后会变得更好更快。智能体也需要从经验中学习的方法。
如果我们想让软件工厂对真实的生产软件安全可用,我们需要一些新的东西。软件工厂面临着与自动驾驶汽车等其他自主系统相同的挑战——从80%的成功率提升到超过99%的多个九的可靠性。
要让代理驱动SDLC,你不能给他们一辆为人类设计的汽车
自动驾驶汽车配备了普通汽车没有的传感器和技术。激光雷达传感器、摄像头、用于运行推理的强大计算能力,以及与中央指挥系统的连接,以便在需要时进行远程接管。
要让自动驾驶汽车在驾驶方面达到人类80%的水平,我们可能不需要所有这些。自动驾驶在10年前就达到了人类80%的水平。但这不是要跨越的门槛——门槛是要比人类驾驶员更好、更安全。这就是当我们把钥匙交给机器时所期望的,以便在101号公路上以60英里/小时的速度行驶时能安心打盹。这就是为什么自动驾驶汽车拥有专为自动驾驶设计的技术——这能建立信任,并处理那些无法预先设计的边缘情况。
自动驾驶软件也是如此。问问自己——为什么你还没有让你的代理自动批准并合并它自己的拉取请求到你的生产服务?你构建的东西风险越高,你的理由清单几乎肯定就越长。
当你开始拆解不仅在这个过程中可能灾难性出错的所有事情,而且还有为客户构建正确产品所必需的事情时,它非常复杂。它不适合GitHub Actions YAML文件中的线性步骤,也远远超出了运行传统自动化测试的范围。即使是对仪表板的小改动也可能跨越角色、专业领域和组织结构,而主观的改动是最难测试和委托的。这些中的大多数可能今天根本不在你的CI/CD管道中。但如果你希望它们仍然发生,同时将完全控制权交给运行软件工厂的代理,它们就需要被包含在内。
要让代理驱动整个过程,我们需要一种更好的方式来编排这些动态的步骤序列。我们认为这是一个工作流,具有生成容器、代理和浏览器的能力。一个可以设置功能标志并为测试用户启用它们、调查日志和追踪、观察生产指标随着变更逐步推出,以及做其他一切安全发布所需的事情的工作流。
CI/CD管道只是一个工作流。但工作流可以远不止是CI/CD管道。
Cloudflare工作流允许你将多个步骤链接在一起,自动重试失败的任务,并持久化状态数分钟、数小时甚至数周。它们旨在以逻辑清晰、易于理解的程序来编码复杂动态的业务流程。
这篇博客文章, 使得定义和触发CI/CD管道从根本上更简单。例如:
工件
import { CIWorkflow } from `@cloudflare/ci`
const deps: CiRunnerResult = await ci.runner({"}
name: 'install', command: 'bun install --frozen-lockfile', cache: { inputs: ['package.json', 'bun.lock'] }, }); await Promise.all([
deps.runner({ name: 'lint', command: 'bun run lint' }), deps.runner({ name: 'test', command: 'bun run test' }), deps.runner({ name: 'typecheck', command: 'bun run typecheck' }), deps.runner({ name: 'build', command: 'bun run build' }), ]); await deps.runner({
name: 'deploy', command: 'bun wrangler deploy', cloudflareCredentials: {
accountId: this.env.CLOUDFLARE_DEPLOY_ACCOUNT_ID, }, });
然而,工作流不仅仅是线性步骤的序列。它们可以动态定义,并且可以生成代理或其他工作流。
展示了一个工作流,它审查过去一天的新数据。该工作流完全控制代理何时以及如何被提示,并可以在步骤之间传递上下文:
此示例```
import { WorkflowEntrypoint, type WorkflowEvent, type WorkflowStep } from 'cloudflare:workers'; import { init } from '@flue/runtime'; import { Reviewer } from './agents/reviewer.ts'; import { collectFindings } from './shared/nightly.ts'; type Params = { date: string }; export class NightlyReview extends WorkflowEntrypoint {
async run(event: WorkflowEvent
const findings = await step.do('collect findings', () => collectFindings(event.payload.date)); const agent = init(Reviewer, { id: nightly-${event.payload.date} }); const receipt = await step.do('dispatch review', () =>
agent.dispatch(Review these findings:\n${findings}), ); const review = await step.do('read review', async () => {
const reply = await agent.read(receipt); return { text: reply.text, data: reply.data }; }); // ...
}
}
一旦你看到这种模式,并且像 Cloudflare 一样“工作流中毒”,你就会开始问:我还能让 Workflow 为我处理什么?还有哪些人类瓶颈步骤可以委托给 Workflow + [Flue agents](https://flueframework.com/) 的组合?
## 完整的 ADLC,在 Cloudflare 栈上
借助 [Workflows](https://developers.cloudflare.com/workflows/) 编排复杂步骤,以及
[作为代码的存储层,当你审视 SDLC 阶段时,代理拥有构建、交付和维护软件整个流程所需的一切都在 Cloudflare 上:](https://developers.cloudflare.com/artifacts/)
__Artifacts__SDLC 阶段 | Cloudflare |
---|---|
计划 设计 实现 |
|
[Browser Run](https://developers.cloudflare.com/browser-run/)——云中的可编程无头浏览器[Vitest](https://developers.cloudflare.com/workers/testing/vitest-integration/)——在 Workers 运行时中运行测试[Flagship](https://blog.cloudflare.com/flagship/)——每次更改都有其自己的功能标志[渐进式部署](https://developers.cloudflare.com/workers/versions-and-deployments/gradual-deployments/)——将代码更改逐步发布到一定比例的流量,随时间逐步增加退役
[Workers Logs](https://developers.cloudflare.com/workers/observability/logs/)——让代理跟踪实时日志或进行临时查询以识别问题并自动修复[Agent Traces](http://blog.cloudflare.com/agents-on-cloudflare)——捕获每个代理会话并用于改进[Cloudflare MCP Server](https://blog.cloudflare.com/code-mode-mcp/)- 由 Code Mode 和[Dynamic Workers](https://blog.cloudflare.com/dynamic-workers/) 提供支持[Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine/)——基于 Clickhouse 的高基数分析,让代理查询谁在使用什么## 构建你的软件工厂的基元
目前,处于前沿的人们正在构建未来的软件工厂。最终,软件工厂将像代理和 AI 一样,成为人们构建软件的常规方式。但对于大多数人和大多数组织来说,我们还没有达到那个阶段。
我们想要改变这一点。
为此,我们问自己的问题是:我们如何让事情变得简单易用,让互联网上的每个人都能从这样的范式转变中受益?我们可以向所有人开放哪些基础层基元,从最小的初创公司到世界上最大的平台?
在这种情况下,我们认为基元已经就绪。还有更多工作要做,以连接它们,继续构建我们自己的软件工厂并从中学习,但现在,今天,我们已准备好让你在 Cloudflare 上构建你的“制造机器的机器”。从 [@cloudflare/ci](https://blog.cloudflare.com/ci-workflows) 开始,[看看你能让 SDLC 的多少部分实现自动化。](http://blog.cloudflare.com/agents-on-cloudflare)
__构建一个代理__
