利用人工智能代理团队进行负责任的软件开发
- Rifx.Online
- Programming , Machine Learning , Ethics
- 19 Jan, 2025
软件开发长期以来依赖于手动操作和孤立的工具链来构建产品。我们逐渐引入自动化来处理持续集成 (CI) 流程中的重复任务,并使用像 ReSharper 和 CodeRush 这样的代码生成工具来加速编码中的重复任务。然而,随着 AI 的发展,我们可以获得工具来帮助从提示中创建小型 POC,现在我们可以想象一个未来,在这个未来中,“自主 AI” 系统将在我们的软件开发生命周期 (SDLC) 中发挥关键作用。这些自主系统将生成的不仅仅是简单的功能。它将能够协调任务、执行安全检查、跨职能沟通,并动态适应复杂的需求。
然而,这一转变并不会来自于单一的“银弹”提示,这种提示将创建完美的应用程序。相反,AI 将被纳入软件交付的规划和执行中。它将遵循我们结构化的流程,并在我们的软件团队中承担角色;它可以采取系统思维的心态,我们可以确保开发的人性化方面始终处于中心,同时利用自主 AI 的计算优势。接下来,我们将探讨如何为 AI 驱动的劳动力设置团队和角色,并借鉴正在进行的研究——包括 ChatDev Paper 中提出的“用于软件开发的沟通代理”模型——以展示软件架构师、开发人员、产品经理和安全专业人员如何与这些自主 AI 代理协作。
1. 重新审视系统思维
“设计系统的组织被限制为产生这些组织的沟通结构的复制品。”
— 梅尔文·康威(康威定律)
在最近的一篇Medium文章中,我讨论了系统思维如何使我们不仅将软件视为技术,而是作为社会技术系统——汇聚代码、组织结构和人际互动。系统思维提醒我们,如果我们改变开发的“谁”或“如何”,我们不可避免地会改变软件本身。
当我们考虑到代理型AI——能够进行规划、决策和自我组织的软件代理——时,我们必须考虑这些代理如何融入我们的组织结构。如果我们对康威定律的应用过于狭隘,可能会在现有团队上直接添加AI,而不调整流程或沟通路径,从而导致摩擦。相反,应用系统思维使我们能够设计一种架构,在AI自主性与人类“指挥与控制”模型之间取得平衡。
2. 拥抱代理型人工智能劳动力
代理型人工智能可以被视为超越聊天机器人或代码补全工具的下一个进化步骤。这些人工智能系统承担角色,而不仅仅是任务,它们可以:
- 规划和设定目标:将高层次的目标细分为较小、可管理的里程碑。
- 协调:与其他人工智能代理或人类同事沟通,以有效地安排任务顺序。
- 适应和学习:观察结果(例如,来自测试失败或用户反馈)并自主改进系统组件。
- 自主行动:执行多步骤任务,例如编码新的微服务、设置CI/CD管道、验证符合安全政策的要求,或根据实时变化重写设计规格。
然而,责任必须始终放在首位。艾米·埃德蒙森关于心理安全的研究告诉我们,如果团队成员(包括人工智能“成员”)在没有问责或开放沟通的情况下运作,错误将会 spirals。确保我们拥有正确的角色和“制衡”是关键。
3. 从单一 AI 查询到协作 AI 代理
过去对基于 GPT 的工具的实验——如 GPT-Engineer 或代码生成方法——通常依赖于一个接收提示并输出代码的单一代理。虽然这些方法可以快速见效,但它们容易出错,并且在设计、审查和测试方面缺乏深度。
最近的研究,例如关于“软件开发的交互代理”的 ChatDev 论文,强调了一种替代方案:多代理协作,遵循经典的瀑布或迭代 SDLC 阶段——需求、设计、编码和测试——由专业代理进行管理。一个例子是 ChatDev,它使用:
- “CEO”或“需求分析师”代理:收集并澄清用户故事和接受标准。
- “CTO”或“架构师”代理:规划系统设计、领域模型、威胁模型和高级组件。
- “程序员”代理:编写和完善实际代码,回应深入评论,并实施 TDD。
- “审查员”代理:进行代码审查并检查是否符合最佳实践。
- “测试员”代理:执行静态和动态测试,与构建管道集成,以确认代码的正确性和安全基线的遵循。
通过多轮自然语言和代码级反馈的对话,这些代理可以完善并收敛到可行的解决方案,同时相互解释逻辑。至关重要的是,他们的协作必须与既定流程和工具无缝集成——如Azure DevOps 或 Jira——以记录对话、跟踪更改,并为利益相关者提供完全透明度。
4. 结构化团队与代理角色
一个繁荣的AI驱动软件开发环境依赖于对人类和AI代理的明确角色以及良好的协作模式。除了设计和编码专业外,确保合规性、安全要求、可验证性和以人为本的可用性至关重要。以下是一个潜在的结构:
1. 技术写作人员(文档与需求)
- 角色: 起草用户故事、验收标准、使用文档和合规性参考(例如,医疗保健的HIPAA,数据隐私的GDPR)。
- AI协作: “技术写作人员”代理审查会议记录和用户请求,然后与“架构师”代理澄清模糊部分。它还可以将需求声明与已知的法规或内部政策库进行交叉检查。
- 人性化接触: 真实的产品经理和合规官会对最终措辞进行签字,以确保用户故事和文档符合监管标准和业务结果。
2. 开发人员(功能实现)
- 角色: 按照设计规范实现功能并编写代码,同时确保安全要求(例如,输入验证、加密模块)得到集成。
- AI协作: “开发人员”代理向“安全”代理咨询应用安全最佳实践的指导,例如特权账户或标准授权流程。AI开发人员还可以运行本地测试和代码扫描以查找已知漏洞。
- 人性化接触: 高级开发人员负责关键模块——如账单——以确认复杂业务逻辑的正确性。
3. 安全专家(安全与合规集成)
- 角色: 识别威胁,提出缓解措施,确保零信任原则,纳入合规检查,并咨询安全编码。
- AI协作: “安全”代理扫描代码以查找已知漏洞——如SQL注入或不安全的依赖项——使用更新了相关框架(例如,OWASP Top 10)的知识库。
- 它还可以解析合规指南(例如,ISO 27001,PCI-DSS)并将其与系统日志、代码注释或配置文件进行比较,标记系统可能不足的地方。
- 人性化接触: 安全黑带审查最终的威胁模型,并与现实世界的安全上下文或专业渗透测试工具进行交叉验证。
Bruce Schneier说,“安全是一个过程,而不是一个产品。” 这个过程需要持续的人类反馈循环,以进行关键的签字。
4. 合规与审计代理(确保法规标准)
- 角色: 专注于验证代码更改、数据使用和部署实践是否符合相关法规或内部治理规则。
- AI协作: “合规”代理可以运行自动化检查清单。例如,它可能确认个人数据字段是否已匿名化,或WAF是否保护端点。
- 它还可以定期向“开发人员”代理或“安全”代理请求证据,例如,“给我看看你用SHA-256或更好的算法对密码进行哈希处理的证明。”
- 人性化接触: 审计员或法律团队验证边缘案例并签署正式报告。
- 由于法规标准通常会演变,因此人类必须确保AI的内部知识库不断更新最新的法律先例。
5. 软件架构师(系统与基础设施)
- 角色: 监督领域模型、架构模式(例如,微服务与单体)、数据库选择和部署拓扑。
- AI协作: “架构师”代理自动生成设计图并检查可扩展性、可靠性以及与现有解决方案的集成,同时参考合规约束(例如,GDPR的数据本地性)。
- 它与“安全”代理互动,以确保新的架构提案,如事件驱动的微服务,遵循传输中的加密政策。
- 人性化接触: 架构决策必须权衡成本、供应商锁定或组织战略。这包括理解AI可能无法完全掌握的业务上下文。
6. 产品经理(待办事项管理与利益相关者对齐)
- 角色: 确保所有故事和功能与业务目标对齐,优先处理项目,并与真实用户建立反馈循环。
- AI协作: “产品经理”代理可以根据速度数据和测试发布的用户反馈预测时间表,并确保安全或合规项目在待办事项中保持高优先级。
- 人性化接触: 真正的产品意识——决定下一个战略功能——仍然需要深刻的人类视角。AI可以提出建议,但人类必须确认最终的路线图。
7. 测试工程师(质量保证与验证)
- 角色: 专注于验收测试、集成测试、回归套件,并验证安全要求和合规约束是否按预期工作。
- AI协作: “测试工程师”代理运行自动化扫描以确认安全配置是否得到执行。例如,它验证用户令牌是否正确过期,或日志是否掩盖敏感数据。
- 它协调端到端测试,将结果与合规基准进行比较。
- 人性化接触: 工程师仍然进行可用性、性能或压力场景的手动测试。这确保了主观反馈——如用户界面的清晰性或多区域性能——不会被忽视。
8. 用户体验/客户体验设计师(用户与客户体验)
- 角色: 确保以人为本的界面,进行用户研究并验证人们是否理解系统的目的和交互设计。这包括*“功能发现”*——在小范围内进行渐进式用户测试——以收集关于布局和流程的早期反馈。
- AI协作: “用户体验/客户体验设计师”代理可以汇编用户反馈数据,模拟用户旅程,并验证最终产品是否符合产品经理的批准。
- AI可能会将设计模型或故事板与已部署的界面进行比较,标记不一致或缺失的功能。
- 人性化接触: 真正的同理心和对用户需求的洞察仍然需要面对面的测试、访谈和迭代设计会议。为了确保品牌身份和清晰性的一致性,用户体验设计师必须确认最终产品屏幕和用户流程。
5. 协调阶段与多智能体协作
5.1 设计:自然语言讨论
在设计阶段,自然语言对话占主导地位。例如,“架构师”代理询问“安全专家”有关威胁向量的问题,而“合规与审计”代理则引用特定的监管文本。使用通俗易懂的语言确保所有利益相关者(技术和非技术人员)理解设计的理由,从而减少后期的混淆。
5.2 编码:以代码为中心的审查和安全检查
在编码阶段,代理切换到更以代码为导向的沟通。一名“开发者”代理可能会生成一个框架,而“安全”代理或“审查者”代理可以促使他们添加更严格的验证。同时,“合规”代理可能会扫描代码,以确保在需要的地方存在适当的匿名化或加密调用。关注正确性和合规性使编码过程更加稳健。
在这些阶段中,已建立的流程和工具如Azure DevOps或Jira可以作为记录详细对话、将任务链接到合规检查的持久支撑,并确保所有利益相关者的完全透明。
5.3 测试:自动静态和动态验证
在测试阶段——包括静态代码分析(代码审查)和动态测试——“测试工程师”和“安全”代理依赖于持续反馈来最终确定解决方案。每个代理都可以解析编译器错误或运行时异常,自动将其输入相关的政策检查,并确保任何不合规或安全缺陷被标记并纠正。该周期仅在满足合规阈值和安全基线时结束。
6. 治理、安全与伦理监督
当我们说“自主”或“代理”时,并不意味着“无需负责”。就像DevSecOps将自动检查与人工监督相结合一样,代理型AI劳动力需要强有力的治理。以下是一些实用策略:
- 沙盒测试:确保AI驱动的变更在生产环境之前在安全、隔离的环境中进行测试。
- 安全边界与可观察性:实施日志记录、版本控制和“审计模式”,捕捉AI的推理步骤,特别是在数据处理和加密方面。
- 合规性验证:将自动检查(例如HIPAA、PCI-DSS)的合规项直接构建到管道中。
- 受控自主:限制AI在没有人工批准的情况下可以执行的操作,特别是数据库模式更改或敏感数据迁移。
- 隐私与数据处理:如果数据用于训练或指导AI,需验证是否符合类似GDPR的法规,并应用数据最小化或匿名化实践。
7. 朝向后SaaS敏捷性
我们常常听到“ SaaS的终结”,组织正在构建模块化、驱动AI的解决方案,这些解决方案结合了内部代码、开源和专门的微服务。Agentic AI 可能不会完全取代SaaS,但可以作为一个适应性层,实时协调许多外部和内部服务。结果是一个动态的、“可组合”的架构——其中每个部分(包括AI劳动力)都可以独立演变。
“SaaS正在消亡的说法可能被夸大了。更准确地说,SaaS正在演变为更加敏捷、集成,并由智能编排驱动。”
— 改编自多篇关于SaaS终结的文章
在这个新环境中,“内部开发”和“SaaS集成”之间的界限变得模糊。AI劳动力充当持续的集成者,确保团队保持足够灵活,以根据实时性能指标或用户需求采用或停用服务。
8 结论:构建负责任的未来
负责任的软件开发与具有自主性的 AI 劳动力建立在几个关键支柱之上:
- 系统思维:认识到人类角色、AI 代理、合规要求和组织结构之间的相互作用。
- 角色定义:正如人类有角色,AI 代理也有角色——技术写作、开发、安保专家、合规与审计、架构师、产品经理、测试人员——确保特定领域的制衡。
- 多代理协作:超越单次代码生成。以自然语言进行设计对话,并在代码中进行安全性讨论,参考 ChatDev Paper 等方法不断完善。
- 治理、隐私与安全:保持对代理决策的可见性,采用零信任方法进行代码合并,纳入合规检查,并确保从开发初期就保护数据。
- 敏捷集成与工具:为持续演变架构解决方案——使团队能够在需求变化和新自主工具出现时进行调整。拥抱已建立的平台(例如,Azure DevOps, Jira)记录每次交互,从而为所有利益相关者创建透明、可审计的事件链。
就像学习骑自行车一样,这个过程开始时可能笨拙,并可能在过程中遭遇挫折。每一次失败都是完善流程、角色或沟通的机会。随着时间的推移,人类的创造力与 AI 的动态能力之间的协同作用将引导我们朝着更强大、可扩展和伦理基础扎实的软件应用迈进。
“软件即服务的终结”讨论并不是完全抛弃 SaaS,而是更多地利用这些自主模型来创建灵活、可扩展的子系统,以满足不断变化的人类需求。通过平衡的角色、明确的边界和强有力的反馈循环,我们可以确保不仅仅是通过自主 AI 更快地构建——而是负责任地构建。
行动呼吁
- 从小开始:在您的 DevOps 流水线中尝试一个 AI “程序员”或“安全”代理。观察其在审查 PR 或标记漏洞时的表现。
- 应用多代理模式:借鉴 ChatDev 论文中的想法,为一个小型侧项目定义您的“设计师”、“编码员”、“安全”和“合规”代理。
- 及早嵌入安全与合规:从第一天起就涉及“安全专家”和“合规与审计”代理,而不仅仅是事后的考虑。
- 分享反馈与学习:在使用您已建立的工具和流程(如 Azure DevOps 或 Jira)引入这些 AI 角色时,记录摩擦点,以保持完全透明和清晰的可追溯性。
通过接受这些步骤并与强大的组织对齐相结合,我们可以共同展望一个未来,在这个未来中,AI 驱动的团队与人类共同构建下一波安全、合规和有影响力的软件。
参考文献与进一步阅读
- 系统思维与人工智能:重新定义软件产品开发
- Wardley 映射与系统思维:塑造人工智能辅助软件开发的未来
- ChatDev 论文 — 软件开发的交流代理
- Anthropic 关于构建有效代理的文章
- 艾米·埃德蒙森: 正确的错误 — 失败的科学
- 向前跌倒:在安全中拥抱脆弱性
- MetaGPT 和 GPT-Engineer
“复杂性常常意味着混乱,而系统思维提供了清晰的视角。” — 摘自我在 Medium 上关于系统思维的文章
通过认识更大的图景并平衡人工智能和人类的优势,我们可以塑造一个未来,使软件开发变得更加灵活、负责任,并最终更加以人为本——即使人工智能作为我们技术过程的共同创造者。