ARTICLE · 988414
人工智能工程技能图谱:软件工程基础知识
人工智能工程技能图谱:软件工程基础知识随着智能体编码的出现,软件工程的基本原理发生了哪些变化?即使你使用智能体来编写所有代码,理解软件基础知识仍然至关重要,它能引导智能体做出你想要的权衡——甚至能帮助你了解有哪些权衡需要权衡。此外,在构建人工智能应用时,人工智能的核心通常会通过一个更广泛的软件应用来体现,而你需要参与构建或完善这个应用。 一个对软件基础知识一知半解的新手,即使编写代码也能创建简单的应用程序,但这往往会导致代码代理在延迟、可用性、一致性、可靠性、可维护性、简洁性和/或成本等方面做出糟糕的权衡。在这种情况下,开发者甚至不知道这些权衡的存在,因此也无法引导代理根据应用程序的实际情况做出正确的决策。 构建全栈应用程序。 智能编码使许多以前扮演更专业角色(例如前端开发人员或移动开发人员)的开发人员能够承担更广泛的全栈角色。编码代理可以帮助您处理开发过程中您可能不太熟悉的部分。然而,了解全栈的实际工作原理至关重要。熟练的开发人员了解前端和后端系统的关键组件和概念,包括 UI 组件、缓存、页面渲染、API 选择和设计、身份验证、状态和会话管理、异步处理、数据持久化、测试、安全性和可访问性。 数据管理至关重要。 数据值得特别关注,因为它是软件构建的基础,而且相对难以更改(即使有代理程序协助迁移)。掌握数据管理之道,您便能洞悉访问模式,并据此决定存储哪些数据以及存储时长。您可以识别合适的数据模型,并选择相应的存储类型(例如关系表、文档、键值或图)和基础设施,这反过来又会影响速度、可扩展性、可用性、可靠性和成本。您了解事务、并发,以及如何确保数据的干净、一致和最新。必要时,您可以确保适当的隐私、治理和合规性。您懂得如何管理数据生命周期。 随着应用程序的演进,您也需要知道如何随之演进数据架构。决定如何管理数据需要大量的人工提供背景信息。您的人工智能系统会从数据源获取自身的输入背景信息,因此,如果数据架构选择不当,人工智能就无法了解自身的信息盲区。正因如此,需要具备相关背景信息且精通人工智能工程的专家——也就是您!——进行专业干预,才能使其正确运行。如何为智能体(而不仅仅是传统软件或人类)构建数据基础设施也是一个快速发展的领域,您应该随着该领域的演进不断调整您的最佳实践。 设计系统架构。 当你理解了软件和数据全栈的主要组成部分后,就能更好地决定如何将这些组件组合在一起。优秀的系统设计需要了解软件的预期用途(用户数量?延迟有多重要?成本有多重要?等等),这样才能选择合适的应用平台、前端和后端之间的边界、系统分解、应用状态放置以及架构粒度(单体架构还是微服务架构)。你还需要选择技术栈(编程语言、运行时环境、组件/前端/后端框架、数据技术)——有时需要通过实验来评估各种方案,最终确定一个方案。 此外,合适的架构是一个动态变化的目标,取决于项目所处的阶段。您为快速构建原型而选择的简单架构可能并不适合构建第一个生产系统,而且随着应用程序规模的扩大,架构本身也可能需要调整。做出这些决策需要对软件组件和应用程序上下文都有深入的技术了解,这样才能设计并不断改进架构,从而更好地权衡利弊。 确保系统安全可靠。 要构建可靠的系统,您应该了解如何制定测试策略来验证系统的正确性:单元测试和集成测试的组合、使用的框架以及测试覆盖率。您还应该知道如何针对潜在故障进行设计——如何处理故障(例如 API 达到速率限制)、构建优雅降级机制以及最大限度地缩小故障的影响范围。此外,与其先编写软件再考虑安全问题,“左移”策略将安全工作提前到生命周期的早期阶段(在传统项目时间线中向左移动)。正如所有开发人员都在向全栈开发人员转型一样,许多开发人员现在也兼任安全工程师。您现在可以使用 AI 工具扫描代码中的漏洞、检查依赖项是否存在供应链注入攻击以及检查云配置是否存在攻击面。但要做好这些工作仍然需要一定的安全知识。 扩展和生产环境运维。 为了服务真实用户,您必须了解如何将软件部署到生产环境。了解如何执行软件开发生命周期 (SDLC) 将对您大有裨益,SDLC 除了构建和测试之外,还包括配置部署环境、制定发布策略、应用部署自动化 (CI/CD) 以及理解基础设施即服务 (IaaS)。 生产环境运行需要部署可观测性工具、设置警报并管理事件。此外,为了扩展应用程序,您应该了解实际负载,并知道如何扩展服务器、进行负载均衡,以及如何调整数据基础设施(例如通过分片、索引和复制),或者进行架构更改以使系统能够适应扩展。最后,了解版本控制、代码审查、依赖项维护以及技术债务管理等编码最佳实践,有助于您随着时间的推移不断改进系统。 编码智能体改变了我们构建软件的方式,包括那些不包含任何人工智能组件的软件。一些编码知识——例如记忆编码语法——正在变得过时。但是,那些对软件工作原理有深刻理解的开发者,其表现远远优于那些只凭感觉编写代码而不理解其原理的开发者。 除了人工智能之外,了解软件基础知识还能帮助你弄清楚软件能做什么和不能做什么。这使得它们成为你如何使用编码代理和构建软件的重要背景知识。我将在以后的文章中讨论这些内容
本文阐述了我们对人工智能工程技能的研究,结果表明软件工程领域最重要的知识点是什么。这些知识点包括:
Building full-stack applications构建全栈应用程序
Managing data数据管理
Designing system architectures设计系统架构
Making systems secure and reliable确保系统安全可靠
Scaling and operating in production生产规模化和运营