原文首发于我的微信公众号 TaohongMaxwell:查看原文
前言
如今,写代码早已经不是门槛极高的事情。普通人只要有一点计算机基础,外加部分产品设计的能力,已经完全可以通过AI的协助创造出一份下限极高的代码。哪怕没有数据结构或软件工程基础,也可以凭借AI的能力,把简单逻辑的程序优化得有模有样。
但直到今天,很多人都以为利用AI进行代码编写与开发是一件很高端、很有难度的事情。于是被种种原因拖住了尝试的脚步,例如害怕配置环境、对新鲜事物的本能畏惧、对AI回复的不满意等。
今天,以用于设计、分析和优化电磁(EM)组件及系统的高性能 3D EM 分析软件CST Studio Suite的Python二次开发为例,和大家分享我近期总结出来的AI协助代码创作的基本流程。
通过脚本控制CST Studio Suite,工程师可以将这些重复性的工作交给计算机自动完成,例如编写相应的算法让计算机自动寻找最优解,从而大大提高求解计算的效率。
其中,涉及的工具都是最简单的网页对话,不需要配置任何环境,也不需要安装任何软件,供大家参考、讨论。(CLI等高级功能的使用不在本文的讨论范围内哈)
核心方法
- 需求收集。尽可能详细地收集并描述用户需求。如demo模型(原始CAD模型和处理好的CST模型)、手动操作流程(文档或视频)、开发要求等详细信息。
- 拟定程序架构。形成抽象需求的工程方案,明确文件如何操作,数据如何流动。
- API测试。结合文档及API说明,找出程序运行需要的必要API,明确其操作方法和参数说明。
- 最小实施例编写。结合实际需求及开发文档,手动编写一个最小实施案例,完成最小功能实现。
- 完整代码编写。 a. 结合上述步骤1-4,将必要信息作为提示词发送给LLM,利用AI进行代码创作(提示词可包含:客户需求、程序架构、API/Method示例代码片段、最小实施例程序代码片段等)。 b. 根据测试、运维等需求进行迭代与版本管理。
省流版方案可以查看这张表。
| 开发阶段 | 工作内容 | 输出产物 | AI参与度 |
|---|---|---|---|
| 1.需求收集 | 尽可能详细描述用户需求,并形成详细的需求规格说明书 | 需求说明 | 建议人工完成,尤其是利益相关者 |
| 2.拟定程序架构 | 形成抽象需求的工程方案,明确文件如何操作,数据如何流动 | 系统框图和/或流程图 | 人工/AI皆可 |
| 3.单元/API测试 | 结合文档及API说明,找出程序运行需要的必要API,明确其操作方法和参数说明 | 涉及API的代码片段 | 建议人工完成 |
| 4.最小实施例编写 | 结合实际需求及开发文档,手动编写一个最小实施案例,完成最小功能实现 | 最小实施例代码片段 | 建议人工完成 |
| 5.完整代码编写 | 结合上述步骤1-4,将必要信息作为提示词发送给LLM,利用AI进行代码创作 | 相对完整的程序代码 | AI Copilot |
各环节内容
一、需求评估环节
这个部分主要评估项目在技术、经济和社会条件等方面的可行性,确定项目目标和范围,进行投资效益分析,并制定初步的开发计划。同时与客户或利益相关者深入沟通,明确软件必须实现的功能、性能指标、可靠性等要求,并形成详细的需求规格说明书。
由于涉及到开发细节以及成本核算,这部分建议完全由人工完成,且尽可能让所有利益相关者都参与。
二、架构设计环节
这部分工作主要涉及将需求转化为具体的技术蓝图,包括系统架构设计(模块划分、接口设计等)和详细设计(算法、数据结构等),构建一个相对完整的系统框架,为编码工作提供依据。
以往的工作中,技术架构设计的工作由软件架构师/高级工程师完成,但如今AI在计算机程序设计的能力突飞猛进,这部分工作也可以让AI完成了。
具体工作流程:将客户需求与预期作为提示词发送给LLM,并明确工作量限制,让AI生成合适的架构,甚至输出系统框图和/或流程图。
1┌─────────────────────────────────────────────────────────────────┐
2│ CST SNP文件处理系统架构 │
3└─────────────────────────────────────────────────────────────────┘
4│
5▼
6┌─────────────────────────────────────────────────────────────────┐
7│ 主控制模块 │
8│ (FileSelectorGUI) │
9└─────────────────────────────────────────────────────────────────┘
10│
11┌───────────────────────┼───────────────────────┐
12│ │ │
13▼ ▼ ▼
14┌───────────────┐ ┌───────────────┐ ┌───────────────┐
15│ 文件管理模块 │ │ CST处理引擎 │ │ 参数验证模块 │
16└───────────────┘ └───────────────┘ └───────────────┘
17│ │ │
18▼ ▼ ▼
19┌───────────────┐ ┌───────────────┐ ┌───────────────┐
20│ ∙ 文件扫描 │ │ ∙ CST连接管理 │ │ ∙ 阻抗验证 │
21│ ∙ 格式验证 │ │ ∙ 项目操作 │ │ ∙ 采样点验证 │
22└───────────────┘ │ ∙ 结果处理 │ └───────────────┘
23 └───────────────┘
24│
25▼
26┌─────────────────────────────────────────────────────────────────┐
27│ 数据处理流水线 │
28└─────────────────────────────────────────────────────────────────┘
29│
30┌───────────────────────┼───────────────────────┐
31│ │ │
32▼ ▼ ▼
33┌───────────────┐ ┌───────────────┐ ┌───────────────┐
34│ 文件预处理 │ │ CST仿真处理 │ │ 结果后处理 │
35│ ∙ SNP文件读取 │ │ ∙ Touchstone │ │ ∙ S参数导出 │
36│ ∙ 参数解析 │ │ 配置 │ │ ∙ TDR结果保存 │
37│ ∙ 格式转换 │ │ ∙ 阻抗设置 │ │ ∙ 数据合并 │
38└───────────────┘ │ ∙ 采样设置 │ └───────────────┘
39 └───────────────┘
1用户输入
2↓
3参数验证 → 错误反馈
4↓
5文件扫描 → 文件列表
6↓
7CST连接 → 连接状态
8↓
9文件处理循环
10│
11├── Touchstone配置 → 配置状态
12│
13├── 阻抗设置 → 阻抗参数
14│
15├── 采样设置 → 采样参数
16│
17├── 工程保存 → 保存状态
18│
19├── 结果更新 → 更新状态
20│
21└── 数据导出 → 导出文件
22↓
23临时文件生成
24↓
25合并处理 → 最终结果文件
三、代码实现环节
开发者根据设计文档,选择合适的编程语言和工具,编写出实现软件功能的代码,并进行单元测试。
这个部分是系统开发的重点,具体我们一条一条来说。
API测试
结合文档及API说明,找出程序运行需要的必要API,明确其操作方法和参数说明。必要时附上API的文档说明信息。
功能模块编写
结合实际需求及开发文档,手动编写关键模块的最小实施案例。如循环内部的动作、处理单个文件的操作等。
最小实施例编写时尽可能写得规范,同时写明详细得注释,供内部人员和LLM参考。
同时,建议内部人员熟知最小实施例的运行逻辑。
AI完善框架
将必要信息作为提示词发送给LLM,利用AI进行代码创作,快速完成框架补充,得到一个相对完整的程序代码。
可选的AI有很多,如DeepSeek、千问、元宝、豆包等,最简单的网页版也可以完成这些内容,在这里就不赘述了。
提示词可包含:客户需求、程序架构、API/Method示例代码片段、最小实施例程序代码片段等。具体提交哪些内容,可以根据工程进行评估。
如果是对CST Studio Suite进行二次开发,只要软件版本大于等于CST 2025 SP3,就可以在帮助文档中找到Python Tutorial页面,里面有完整的脚本案例。
这里的案例可用于最小模块的参考,也可以直接当作最小模块投喂给AI。
代码调试与修改
将局部需求的修改内容作为提示词,并将完整代码文件作为附件,发送给LLM。提示词中包含以下信息:
- 目标操作逻辑:如通过API/从磁盘获取数据;
- 程序修改方式:如现有数据处理过程是否改变,是否允许引入新的方法和类;
- 成果展示方式:直接生成完整代码,或只生成需要修改的部分并一步一步指导如何修改。
代码审核
利用IDE或开发工具提供的文件比较功能,将AI修改后的代码和原始代码进行比较,快速找出差异部分,并对其进行评估。可有效避免代码盲改的后果。
版本控制
使用git或SVN等工具完成代码版本控制,避免版本混乱和代码冲突。除了上GitHub之外,还可以在本地部署私有化的git/SVN服务,如gitlab、gitea等。
四、完整测试环节
对编写好的系统进行全面测试,包括功能测试、性能测试、安全测试等,以发现和修复缺陷,确保软件质量。
由于自己写出的代码自己很难查找出错误(程序员迷之自信~),建议由不同的人进行交叉测试。
五、部署与验收
将测试通过的软件发布到生产环境,包括部署准备、系统安装配置、用户培训和交付验收。
项目验收后,同时完成内部归档工作。
六、运维环节
在软件使用过程中,持续修复发现的问题、根据需求变化更新功能、进行性能优化,直至软件生命结束。
七、一点想法
对于纯软件项目,AI尚可独立完成测试工作;然而,工业软件的二次开发往往涉及功能调用、操作权限等复杂因素,加之通用AI未必能完全理解其特有的操作逻辑(某些场景下还需与硬件联动),因此,完整的测试与运维工作目前仍需人类工程师的深度参与。
因此,可以坦然地得出结论:在工业软件二次开发领域,人类工程师目前还不会很快地被AI大面积取代。
总结
- 尽可能收集并详细描述软件/系统的具体需求,并获取完整的手动操作流程(文档或视频);
- 编写代码前,先设计系统架构,并结合实际需求及开发文档,手动编写一个最小实施案例,完成最小功能实现;
- 将必要信息(客户需求、程序架构、API/Method示例代码片段,最小实施例程序代码片段等)作为提示词发送给LLM,利用AI进行代码创作,快速完成框架补充,得到一个相对完整的程序代码,后续再完善和迭代;
- 在整个开发过程中,善用软件开发与管理工具,如git/SVN/diff等。