阿森毛不多
Published on

AI 时代的软件工程应该是什么样子?

Authors
  • avatar
    Name
    浩森 Hansen
    Twitter

最近看到几篇关于 AI 时代的计算机工程的文章,很有感触,分享一下。

关于如何使用 Claude 工作流的最佳实践

X 上的 Vishakha Singhal

Vishakha 在 X 上分享了关于如何使用 Claude 建立工作流,并将其接入到自己项目的思考总结,我觉得非常好。

她将自己的使用方法,总结为五点:

  • CLAUDE.md 项目说明:记录和当前项目有关的所有说明和操作指南,包含项目是做什么的,项目地图,还有具体应该用什么命令来操作项目。是一个对整体项目的指导性说明。
  • .claude/skills:可复用的能力,也就是经常要重复的一些操作。例如 code review,重构说明,调试流程,release 部署方式。我个人认为,skills 实际上就是能力的抽象+封装,其核心思维仍然是软件的模块化封装。
  • .claude/hooks:“护栏”或者是“钩子”。一些经常运行的脚本代码,例如代码检查,测试用例,脱敏脚本等。这是将知识或流程,以代码的方式保留下来并复用。
  • docs/:文档,也是 Agent 的更新记录。每次关键修改和关键技术决策,都可以让 Agent 记录成说明放在这里,供今后进一步查询。
  • 各个目录下的本地 CLAUDE.md:这里记录了模块化的修改记录,也是对各个模块的进一步详细说明。当 Agent 在修改某个模块的时候,它可以进一步参考这里的文档。

以上的方法,实际上也是软件开发的 Harness,也就是将软件需求更好地提供给了 Agent,组织更多的信息,并且持续记录操作路径。得到“更可控”的 Agent 输出结果。

关于 Agent 应用的“分布式”困难

X 上的 Ashpreet Bedi:“Agentic Software Engineering” / X

Ashpreet 在构建 Agent 应用时发现,Agent 应用的构建方式,和传统的计算机软件大不相同。因为 Agent 的运行模式并非传统的“请求、响应式”的,而是更加持续,更加自主的运行。

Ashpreet 将其特征总结为:

  • 持久性。Agent 运行时间很长,并跨越多个步骤,一旦 Agent 执行失败,需要从中间步骤可以直接恢复,而不是从头开始
  • 隔离性。Agent 总是多用户运行的,那么同时运行的不同 Agent 之前需要数据隔离和逻辑隔离。因为 Agent 的执行有其自主性,所以隔离执行在 Agent 软件中显得更加重要。
  • Agent 治理。如何避免 Agent 执行毁灭性的操作?经常能在社交媒体上看到 Agent 工具误删除了用户数据且无法恢复的情况,这样的操作明显是无法接受的。
  • 持久化。数据永远是 Agent 能够正确执行任务的关键,而在 Agent 产品中,数据更加重要。没有数据的持久化,Agent 就只能是一个总是在遗忘信息的对话机器人。
  • 规模化。合理的 Agent 架构环境应该是分布式的,并且是规模化可拓展的。
  • 可组合性。Agent 也应该能和外部世界互动,包括被其他的 app 调用,被其他的 agent 调用。因为 Agent 使用的协议和传统计算机系统完全不同,所以通信协议也需要重新设计。

我的感受是,Agent 的颠覆性不仅体现在产品端,更体现在工程端。因为 Agent 的自主运行的特征,其运行的计算机基础设施也需要完整的重新设计一遍。

Ashpreet 的其实就是将“传统的软件工程方法”,更新成为了“AI 时代的软件工程方法”

Agent 执行环境和当前基础设施(云原生)的差异

Agentic AI: A Comprehensive Survey of Architectures, Applications, and Future Directions

以上是一篇关于 Agentic AI 的文献综述。

对当代的 Agent 的核心观点为:“现在的 Agentic AI 的集成化已经不仅仅局限于 LLM,而是更强调 Agent 及其环境的完整度,包括工具、记忆、反馈回路和运行环境的结合”。

做一个总结:Agent 的到来,从计算机工程的角度上来讲,是一个工程领域的巨大变革。计算机工程师,在这里蕴藏了巨大的机会。