1、前言
简单总结一下个人使用AI的路线演进:
- 定义prompt优化AI提示和补全效果
- 定义规则rules约束AI生成的可控性
- 定义工作流,让AI分步执行任务
- 通过Agent实现AI自动化可控式迭代
前面3个步骤比较常见,这里避免啰嗦,直接最后一步;另外本文不涉及具体实现细节,只分享整体架构以及对应的演化思路。
2、最初的设想
最初的想法很简单,就是把日常开发需要的东西全部丢给AI,自己做撒手掌柜,这里解决向AI传输数据的核心方式是通过MCP协议构建的MCP Server服务。
MCP全称(Model Context Protocol),可以自己搜一下,主要是用来解决这些Prompt的问题:
- 不可校验
- 不可diff
- 不可回滚
- 不可组合
- 不可规模化
为了解决这些个问题,大家不得不打成了共识。
3、遇到的问题
3.1、AI项目迭代的失控
如果大家有自己亲手尝试从零开始生成一个项目进行迭代,就会遇到一些很明显的场景:
- 初始生成,惊为天人
- 后续修改,逐渐崩溃
- 细节调整,开始混乱
- 对话过长,胡言乱语
- 问题修复,陷入循环
实际运行效果如下😅:
遇到问题就解决问题:
然后我们的整体流程就变成了这样:
这个流程里增加了核心模块AST,解决AI需要外部记忆系统的问题。后续项目的迭代,就成了以AST作为核心基因,进行基因表达式的演进流程
上面这个是最为关键的一步,应该算是独创的流程,没见过类似的。
这里AST可以理解为项目知识图谱Knowledge Graph,核心元数据等等,个人还是喜欢称为AST,和抽象语法树没关系。
AST的模版最初参考DSL选择了yaml,因为这个东西很像是容器里的DockerFile,目标是设想有了这个后,代码可以像容器一样随意删除。
后来便于AI校验和识别,以及便于阅读,改为json文件。
我这里定义了主要13个基础模版,细节就不展示了,仅供参考:
markdown
**_meta.ast.json** - 📌 **入口文件**:项目元信息、技术栈、团队、架构,**包含所有AST文件清单**
**_ast_index.json** - AST索引文件:全局统计和关系图谱(最后生成)
**api.ast.json** - API接口定义 API 接口(基础信息:id, name, method, path, params, response)
**api.enhanced.ast.json** - API增强定义(含semantics、implementationHints等AI分析)
**config.ast.json** - 配置信息、环境变量、构建配置
**contexts.ast.json** - 应用上下文(认证、缓存、数据库连接等)
**domain.ast.json** - 数据模型、实体、字段、关系
**infrastructure.ast.json** - 中间件、工具函数、公共服务
**permission.ast.json** - 权限定义、角色、资源访问控制
**response-format.ast.json** - API响应格式标准、错误码定义
**ui-components.ast.json** - UI组件抽象定义(框架无关)
**ui.ast.json** - UI页面、路由、布局结构
**workflow.ast.json** - 业务流程、工作流定义
3.2、信息源造成的混乱
实际场景:
js
Sentry说:User.save()报错
Swagger说:POST /user需要email字段
用户反馈说:注册后没收到邮件
老代码说:User模型有username字段
→ AI整合4个信息源,生成了"看似正确"的代码
→ 实际运行:逻辑冲突,更多Bug
解决思路:
- 32个参数缺说明
- 18个缺验证规则] I -->|补充| F G -->|>95%| J[唯一可信源] J -->|自动生成| K[代码] J -->|自动生成| L[文档] J -->|自动生成| M[测试] style F fill:#fff4e1 style G fill:#ffe1f5 style J fill:#e1ffe1 style K fill:#e1f5ff style L fill:#e1f5ff style M fill:#e1f5ff
这个流程增加了核心模块:AST完备性检查,用来确认数据是否冲突,是否完整,等等。
3.3、无法保证生成结果的一致性
失败案例:
diff
需求:实现User注册接口
AI第1次生成:
- POST /api/user/register
- 使用bcrypt加密密码
- 返回JWT token
AI第2次生成(同一需求):
- POST /api/v1/users
- 使用md5加密密码
- 返回session cookie
AI第3次生成:
- POST /register
- 明文存储密码(!)
- 返回user_id
→ 同一需求,3种完全不同的实现!
根本原因:
- AI的生成过程包含随机性
- 缺乏标准化约束
- 没有确定性生成机制
- 没有明确指示的,AI就会漂移摇摆不定
解决思路:
到这里大家可能会发现一个问题,怎么搞模版了,这是不是变成了类似'低代码平台'JSON Schema类似的东西,恭喜你猜对了一半,给你点个👍。
其实到这一步确实遇到了偏离最初设想的问题:
我们想要:有限的基因AST + 无限制的语言/框架/库/工具 === 去实现有限的结果输出。
但是: 1+无限=无限, 1x无限=无限
在这种要求下,我们只能通过迭代流程等要素,无限趋近于100%的实现有限和一致的输出,但是就像圆周率永远算不尽,永远没有绝对光滑的圆,我们也只能实现有一定波动的输出。
这种波动并非没有意义,比如我们用来重构项目时,更换一下框架语言,升级一下依赖和运行环境版本等,实现一个95%完成率的重构项目,也是很有价值的,具体不再过多讨论。
3.4、现有项目的知识流失
真实案例:
核心开发人员离职
↓
业务逻辑散落在代码中,难以理解
↓
文档缺失或已过时
↓
新人上手需要2-3周,频繁踩坑
↓
维护成本越来越高,不敢重构
根本原因:
- 业务逻辑隐藏在代码实现细节中
- 文档与代码分离,容易不同步
- 缺乏结构化的知识沉淀机制
- 项目知识随人员流失而消失
解决思路(反向提取)
这个流程其实只是增加了一些文档: PROCESS_PROJECT_ONBOARDING_DOC_GENERATION.md,用于生成项目使用指南。 AI_GUIDE_V2.md ,迭代后的AI指引入口文档,用于让AI参考指定的文件分步执行流程。
总结
其实还有很多细节。
比如:如何进行AI流程开发的调试工作,如何生成AI修改报告等,网上也能搜到,这里就不再赘述了。
以上就是个人总结的一些思路,希望对大家有所帮助。
写文章太痛苦了,有用的话点个赞,掘金的mermaid图貌似版本有点低?后面该画图的我都省了。