读李宁《AIGC 自动化编程》:大模型时代的复杂问题分解与合并
提到李宁,除了体操王子,计算机图书领域也有一位同名作者。早年读过他写的《Python 从菜鸟到高手》,深入浅出,理解深刻,行文易懂,因此对这位作者一直怀有敬意。
近期翻阅了他于 2023 年 10 月出版的《AIGC 自动化编程 -- 基于 ChatGPT 和 GitHub Copilot》。虽然时光荏苒,技术进步飞速,书中部分细节已显陈旧,但其中核心思想——解决复杂问题的通用做法就是先分解后合并,依然极具价值。在 LLM 日益成为日常工具的今天,这一方法论显得尤为关键。
当前 AI 编程的实战路径
从 2024 年初的 ChatGPT 爆发,到近期 DeepSeek、Gemini 等模型的迭代,大模型本身已足够强大。ChatGPT、DeepSeek、Doubao、Claude、QWen 等工具越来越靠谱。在编程领域,GitHub Copilot、Cursor、CodeGeex 等辅助工具;在工作流 Agent 方面,FastGPT(企业级知识库 RAG)、Dify 等;以及遵循模型上下文协议 MCP 的工具链,都是为了基于 LLM 能力实现具体功能,安全地赋能私有数据,并尽量消除概率性输出带来的不确定性。
在编程领域,把复杂需求分解(breakdown)然后合并,是传统做法。借力大模型,更靠谱的路径也是如此。以比较复杂的项目为例,我的经验如下:
- 手写需求梗概:明确核心目标。
- LLM 扩展成详细需求:多轮对话反复打磨,最好是对 feature 的分步走式开发:MVP 原型 -> feature delta 1 -> ... -> full feature ready。
- 手写设计框架:模块分割,技术架构。
- LLM review 细化:多轮对话反复打磨设计方案。
- LLM 生成代码文件结构:获取框架代码。
- VSCode 中创建项目:Copy LLM code,生成 MVP 原型代码,手动试验。
- VSCode 中 GitHub Copilot 分步实现:根据详细需求中的功能,渐进式地开发。
驾驭 AI 之感悟
关于让 AI 为自己编写代码,核心在于化繁为简。有人说 ChatGPT 的编程能力可以达到中级程序员的程度,其实这样评价太过肤浅。ChatGPT 的能力能达到什么程度,很大程度上取决于它的使用者。就像同一把小提琴,由顶级演奏家演奏和培训班学生演奏的效果云泥之别。
对于同一把小提琴,不同人演奏会出现完全不同的效果。ChatGPT 也一样,到底能解决多复杂的问题,并不完全在于模型本身,而在于使用者如何处理复杂问题,如何化繁为简。如果问题相当复杂,就算提示词写得完美无缺,ChatGPT 可能也无法完美解决问题。要将复杂问题分解,再分解,直到 ChatGPT 可以完美解决为止。
当然关键点还不是分解,而是 ChatGPT 解决完每一个小问题后,如何将它们合并成最初的大问题。所以关键中的关键是设计一套接口,将小题作为黑盒。不管小问题解决得怎么样,都不会从根本上影响全局,某一个小问题解决不好,单独处理即可。
就像用 ChatGPT 实现的复杂布局一样,将每一部分的布局单独作为一个类,放到单独的 Python 文件中。而不是将代码直接插入主程序,就算某一个布局类不能满足要求,重新生成这个类即可,完全不影响其他布局类和主程序。
影响 ChatGPT 使用效果的关键点主要有以下几个:
- 提示词:这是最基础的,就像唱歌不跑调是最基本的要求一样,如果提示词不合适,一直没说清楚,自然也不会生成想要的内容。
- 复杂问题的分拆技巧:这是让 ChatGPT 升华的关键,也决定着处理复杂问题的天花板。需要自己领悟,通过大量案例体会如何分拆各种类型的技术问题。
- 设计接口:分拆容易,但组合的关键就是接口。
- 组合问题:这是最后一步,也是最关键的一步。利用接口逐渐将不同级别的小问题逐级合并较大的问题,直到恢复到最初的复杂问题为止。
总之,你有多强,AI 就有多强!
小结
本章以桌面应用为例,深入讲解了如何将一个复杂的程序分解成多个小部分,然后分别利用 ChatGPT 和 GitHub Copilot 生成不同部分的代码,最后再将这些代码合并成一个大系统。其实应用 AI 代码生成工具的关键点只有一个,就是化繁为简。
另外,ChatGPT 与 GitHub Copilot 虽然都能生成代码,但是二者并不能互相取代,各有千秋。ChatGPT(尤其是 Plus 版)生成完整方案的能力要比 GitHub Copilot 强,所以通常使用 ChatGPT 完成初步的代码生成,利用 GitHub Copilot 的代码补全功能对初步生成的代码进行微调,或者根据上下文生成新的函数、方法、语句等,以及完善和检测已经存在的代码。

