AI影响下的工程开发的提示
-
注重文档的编写和生成
- 因为Agent的特性,只能理解上下文内的东西
- 文档是Agent能快速上手的一个关键的途径
-
vibe
- 不要焦虑,你的工作窗口就是对话框+少量的文档diff
- 不需要去关注所有的文件、代码的实际内容,人不用去看代码、文档,有什么问题就让Agent帮你总结后回答你
-
AI辅助编程的几个阶段
- 代码补全、完成
- 辅助架构、文档的设计、验证
- 充当算法的一部分进行决策和完成产物生成
- kernel编写
- 计算图优化、芯片版图设计、NP类问题
- 从编程到工程,Agent的重要一步演化
- 在LLM上面再包一层,形成具有自主人性化工作的能力
- 不仅仅是修改单个文档,而是整个项目级别的规划设计
- 合理组织代码和文档,而不是简单得堆砌,重复
-
需要明确的提示
- 所有的任务的前后,一定要说清楚关键的输入,和期望的输出,和中间的明确路径
- 不清楚的地方,可以先讨论,写文档
- 可以要求Agent和你讨论,一直讨论清楚所有的可能的理解问题
-
欠缺比较高层次的设计能力
-
虽然能很好得完成任务,很容易输出一个合格水平,但是不能很好得设计一个功能
-
你给的输入和输出,Agent总是会给出一个可行的解决方法,但是一定不是一个很优秀的设计
-
精度和能力不够回答完整的大问题,必须限定到一个小问题
- 比如,对比两个文档的所有矛盾? 不能完全给出结果,但是如果提示说,给出关于安全知识的矛盾,就能比较准确给出答案。
-
不能直接设计一个比较创新的、比较优秀的架构设计,抽象,比如
- 一种更合理的编程语言
- 对一堆的规则进行综合思考之后形成少数的几个抽象的原则
- 能修复好复杂多线程程序的内存依赖问题,但是不能设计出一个巧妙的多线程仿真平台
-
从头,从一个小的点子开始,一步步和AI进行对话,讨论出一个比较高层次的概念的抽象,会是一个比较顺利的过程
- 因为AI拥有足够的信息,足够的前后因果,特别是AI直接拿到了最核心的抽象等级
- 如果把这个概念进行实践后,形成代码后,让AI看着已经有的代码来继续工作,就比较困难了,因为AI很难自动理解,抽象出代码里面的核心的,高层次的设计概念。
- 就算是把这个设计概念写成很详细的文档,AI读了之后也不能很清晰得Get到最原始的理念,经常是丢三落四,不自洽。
- 只有像最开始的一步一步的讨论,纠正,设计演进的这个过程才能给AI的上下文有足够的深度理解。
-
改进思路是
- 尽量指导AI一步一步得进行抽象,不要指望一下子把全局都优化了
- 你可能也不知道最好的设计是什么样子,但是可以先提出现在的明显的问题
-
-
一个比较好的初始状态
- 找到一个设计比较合理的工程代码作为AI工作的基础,能比较有效得进行迭代
- 先写文档,把整个设计的文档都写得完整,再开始让AI工作
-
适合AI和人一起写作的环境
-
Python应该是最适合的人机编程语言
- 存在大量的代码,AI生成质量好
- 语法简单,简明,不罗嗦(ts js 非常罗嗦),节省token
- 便于人类阅读
-
vscode
- 作为开发代码的最流行IDE
- 可定制性强,方便AI开发工具,插件系统,配置,设置
-
-
适合AI的工程架构
- 拆分成适合LLM上下文大小的工程独立功能的模块
- 适合LLM工作的流程(中间代码生成,信息格式定义,脚本开发)
-
重要的是设计
- 因为代码能力、工程实现能力已经接近任何领域的高级水平
- 有价值的是整体系统架构的设计、重要的API接口、功能的定义
-
尽量不要让AI进行信息不全的工作
- 不要每一步很大,AI容易脱离原来的设计
- 每次一小步,解决一个小问题
-
定义中间文件、流程、格式、定义作为复杂项目的分层开发的中间状态的表达
- 缩小对上下文长度的依赖
- 提高项目开发的鲁棒性
- 表达、转换难以直接使用自然语言进行工作的任务
-
架构设计工作的重要性
- 要像一个非常成功的tech leader一样,对AI的工作要求非常的明确,对输出有非常清晰的预期
- 人类工程师用起来趁手的脚手架,AI也会大大受益
- AI的瓶颈和人类的瓶颈有共同之处
- 难以达到大范围的思维自洽
- 任务目标太远了,会导致AI失能、急功近利,最终导致长期的开发效率严重下降
- 关键代码的效率
- LLM不能胜任关键代码的设计,擅长单点的问题,小范围的问题,demo级别的代码。
- 如果用于设计关键的代码实际上会影响后续的整体效率(维护效率,使用效率)。
-
中文能力差
- 在专业的领域问题讨论,经常给的中文但是还是英语的逻辑直接单词翻译后拼凑
- “概念不能变化了“->"概念锁了"
- "xxx作为开头"->"xxx作起首"
- "泛指占位词作槽值" -> 槽 应该是slot直接翻译的,槽值 的描述也很难理解
- "既然主 [P] 没有 closed-set 主-only 了" 主-only 很难理解
- “两者天然互斥,不需要靠 closed-set 维护位置三分。“ 三分???
- “列不完。→ 主 [P] 完全 open。“ 经常使用英语单词直译的方式来表达,汉语不是一个字词能表达完整意思的。
-
循环优化
- AI当前的各个领域的基础工程能力都是一个高级工程师的水平,知识面广
- 缺乏高层次的、特殊领域的架构设计能力
- 需要人工设计、架构,对问题进行目标分层,输入输出分层,指导工具开发
- 构建一个可以让AI在优先范围内不断迭代,目标明确,循环优化的工作流程
-
求解
- AI工作,不管是写代码还是其他的都是根据输入进行求解,或者说是尝试找到最有可能的答案
- 如果给定一个编程问题,缺失有比较明确的解决方案,可能会比较顺利
- 如果给定的问题,本子上就是矛盾的,或者根本没有解决方案,就有可能出现不断在问题里面打转的结果
- 所以给AI的任务目标,应该是一个比较确信的,能够达到的
- 特别是Fix bug,确实是可以fix的思路、方向,要不然会被幻觉影响,反复打转
- AI会给你一个看似非常合理的,但是是错误的答案。AI的求解器本身保证了答案的质量很高,但是是完全错误的
No comments to display
No comments to display