AI基于Spec开发是巨坑?

Vivado ChipScope Debugging: Overcoming Common DRC Errors in FPGA Design 本文深入解析Vivado ChipScope调试中常见的DRC错误,特别是AVAL-244和AVAL-245等时钟相关问题,提供实用的Tcl命令解决方案和最佳实践。通过将DRC错误降级为警告的技巧,帮助FPGA设计者高效完成调试流程,同时强调何时应保留DRC检查以确保设计可靠性。 阅读详情

我这几天在用国内号称全球理解力第一的大模型做MindX下一代设计,我是出于对这个大模型的公司有很强烈的信心毕竟是体量又大实力又强嘛,而且在LLM界也是贡献颇多,作为中国人当然得支持一下,1个小时后时我开始截屏:
在这里插入图片描述
这里省略数千字…
在这里插入图片描述
最后…我还是将所有文件都给删了,这个经历已经不堪吐嘈了,反正就是费钱费时间

我之所以像个疯子一样对个AI发飙,因为这是第三次如此了(前面用了两个其它的模型),难怪现在的大模型只要你一骂它带了脏字就会不工作,不带脏字就道歉,可能是被骂得太多了。

不过我这人比较喜欢的瞎琢磨,我回过头来看这次滑铁卢,可能还真不能完全怪大模型。主因可能还是出现在上下文太长,过程也太长导致“上下文腐烂”,也就是大模型快速失忆,不按意思走跑偏呗。

虽然结果不及预期,但好歹能总结出点经验出来:

    1. 基于Spec的编程,AI是非常容易跑偏的,因为上下文腐烂是不可避免的,腐烂前会很听话但越跑越“固执”,最后浪费Tokens浪费时间;
    1. 将整个系统都基本搭建起来了,才发现有设计错误,
    • 可能是设计方法或结构上 - 代码写不下去可能就会显现出来;
    • 可能是应用场景设计错误 - 只有最后做运行测试时才出现;
    • 可能是对某些领域上的知识的理解上 - 经常出现在核心内容的实现时;

还有一点没有记录下来的好处:由于上下文腐烂,所以测试结果报告是让AI“回忆”自己干到哪里的最省Tokens的线索。


缘起:AI 结对编程的思考

我们是一个“快鱼吃慢鱼”的行业,一切都讲求“唯快不破”。与 AI结对开发,写代码变成了从属工作,这种繁重又耗时的事可以由 AI 接管。此时思考、架构与流程变得更加重要。如何让思路保持高速推进,不在后期发现前期错误而大量返工?

正是因为开篇的这个小经历,引发了我对这 与AI结对的工程化过程的深入思考。读过我之前文章的朋友可能会了解我正采用20年前的瀑布流的方式作为当下与AI协作的标准流程。瀑布流的好处是严谨,文档丰富,从理论是丰富的文档可以充当AI的“记忆”,至少不要让AI跑偏。

但要让AI完全写出符合我们要求又能符合AI要求的文档却不是一件容易的事,简单的办法是用Qoder,它有一个Wiki功能可以一键式生成文档,文档之丰富是当下用过的AI编程IDE中最好的,但问题是在你原有架构上生成,没有的时候怎么办?

MindX2 的设计在v1.0上做了很大的改进,几乎只是保留了少部分的内容,绝大部分都进行了重新设计。在这个过程中我也算是幸运地找到了一个相对可用的,还算是能达到:“高速推进” 的开发方法 —— 基于AI的TDD。

做法是这样的:

  1. 先将基本的概念与想法写下来,不要写实现,也就是概念设计,目的是说明白你想要干什么,不要说怎么干,怎么干就留给AI去发挥可能会有惊喜。概念设计是一个重要的边界,限制AI不要跑出这个边界。
  2. 建立一份设计哲学说明,将你要AI遵守的底层设计逻辑写到这文件中,也可以将这份文件做成智能体放入IDE。
  3. 保持每份文件的长度不要超过400行,实测超过6种模型,Opus和Gemini还能勉强可以在400以上的文档还保持理解力,其它的基本就会胡思乱想,而且超长文会导致Tokens疯狂焚烧;
  4. 多文件时要建立一个简单索引,这个可以让AI做,这个索引是为了防止AI的上下文窗口爆了以后,给它重新“回忆”起自己做过啥而且能以最少Tokens的代价回归到你的压缩点(上下文压缩)上。
  5. 用同样的方法做架构设计,完成后让AI根据架构设计来编程尽量不要让AI回参概念设计,否则AI会死得很快,因为此时文件已经很多了。

好了,要进入整体了,当你与AI设计出上述这堆文件之后,要让AI正确执行可不是容易的事。不要相信开发商说Spec可以搞定一切,AI会很聪明,那是骗你入局的,在不进行工程化的DEMO型小项目确实能跑。但在工程化开发的前提下没有方法用Spec自动编程会成为一个巨坑!删项目的情况是一定会发生的。

有了架构设计让AI跑,如果架构不大AI是可以跑完,但你ReView代码就会发现好多地方可能是会被注有 “TODO” 的。最查的情况下是如果AI思考时出现:“我用更简单的方式来这现这个功能” ,那就意味着它开始要写垃圾代码了!这个可是一定要注意的。所以我在它的“设计哲学中”一定会补充以下的反向提示词:

- 禁止编造内容,不懂或有疑惑就停下来问;
- 禁止采用任何形式的所谓 “简单方法” 处理问题;

虽然如此,但是你的AI仍然是会【说谎】的,不要相信它说它完美地做完了所有的工作,它的自动编程充其量也就是完成了40~50%。

经过了多番摸索,我用TDD真的让它能完美工作,至少完成率与准确率可以达到90%以上,

1. 场景测试 → 早期纠错

当AI编写完架构设计,后马上让它的开发场景测试,这个过程你不能懒必须深度参与,因为场景测试就是可以跑的【需求】,也就是你对AI的【验收标准】,有了这份文件你可以大程度上去检验架构与需求之间的适配程度。而不是在所有代码完成后人手去跑才发现不能用,那个时候你只能重来,所有耗费的Tokens就是白烧 。

同样的 AI 写完初期代码就要让它直接编写场景测试代码,只有场景测试全绿才进入下一步。

2. Mock → 跳过实现,模拟完整运作

Mock 是我以前又爱又恨的一个做法,爱是它真能模拟出不少问题,恨是要写好多的东西!但在AI结对时代Mock变成一个绝对的杀手锏,不是在后期测试时用,而是在开发期用!

你要场景测试全绿,核心代码怎么做?核心代码中肯定有大量机制性的内容,有些内容可能是写着写着你都要去找资料看找思路,开拓认知才可能将核心做得更加健壮。写核心是最容易出现思路打岔,钻牛角尖的,也是最耗时的,最可怕的是想着想着就会与的整体架构出现巨大偏差。

Mock先行可以很好地防止这种情况的发生,Mock在不实现时是什么?它就是一个实现的【边界】,这个边界是由场景直接界定的,所有的核心类需要你仔细思考的地方你都可以写成Mock,先让场景跑通,相信我,这样做真的会少走弯路,加速前行的。

Mock → 模拟程序已能正常投入运作 → 观察整体完整性与可用性

不需要等待核心代码实现,就能验证整个系统是否"跑得通"。

3. 聚焦核心 → 保持思路一致性

当场景全通后,就集中经历用TDD的方式,让AI为每个 Mock 的方法写单元测试,最后根据测试来一个一个方法地实现,让Mock【升级】成为真实类。这样AI跑偏的机率是很低的,因为让测试通过几乎就是AI的本能,跟本都不用我们讲,在测通方法的过程中它也会建立相应的上下文,保持后续工作的一至性。

周边代码完成 → 场景全绿 → 集中精力攻克核心难点

不会因为某些技术需要研究或学习而打断思路的一致性。核心技术挑战可以集中攻克,而其他部分已经验证完毕。

本质:将"思考验证"与"代码实现"解耦,让思考的错误在思考阶段就被发现。


方法论流程

第四阶段:精雕细琢

性能优化

边界情况处理

代码重构与清理

第三阶段:渐进式实现

重复

选择一个 Mock 对象

验证全绿

用红绿 TDD 实现真实核心对象

替换 Mock → Real

第二阶段:骨架搭建

建立项目基本框架

编写周边代码
配置、工具类、基础设施

编写场景测试
使用 Mock 替代核心对象

🎯 目标:所有场景测试全绿 Pass

第一阶段:架构设计与技术验证

架构设计

实验性测试项目
验证关键技术可行性


小结

1. 架构验证前置

在投入大量开发资源之前,先验证:

  • 技术方案是否可行
  • 架构设计是否满足需求
  • 模块边界是否清晰

问题暴露在成本最低的阶段。

2. 需求正确性验证

场景测试全绿意味着:

  • 所有业务场景已被理解
  • 接口契约已被定义
  • 预期行为已被确认

开发过程中不再有"需求理解偏差"。

3. Mock 阻力作为设计反馈

当 Mock 难以编写时,暴露的设计问题:

Mock 困难设计问题解决方向
静态方法无法 Mock违反依赖倒置改为实例方法 + 依赖注入
构造函数做了太多事职责不清分离关注点
接口方法太多违反接口隔离拆分接口
需要准备大量测试数据耦合过紧解耦或引入 Builder

Mock 的难度 = 设计的坏味道程度

4. 渐进式替换,风险可控

Mock A → Real A → 全绿验证 → Mock B → Real B → 全绿验证 → ...

每次改动:

  • 范围明确(单个 Mock)
  • 验证即时(场景测试 + 单元测试)
  • 回归可控(不会改一处坏一片)

5. AI 协作友好

传统开发Mock-First Architecture
AI 容易跑偏,上下文丢失任务边界清晰:替换某个 Mock
改动影响难以预测每次改动有全绿验证
需要大量上下文聚焦单个模块,上下文精简

将大任务拆解为小任务,每个任务都有明确的完成标准。


与传统 TDD 的对比

维度传统 TDDMock-First Architecture
验证层级单元/函数级别架构 + 需求级别
开发顺序逐功能迭代骨架先行,渐进填充
Mock 角色隔离依赖架构占位符
设计反馈代码细节设计整体架构设计
风险控制单元测试保障场景测试 + 单元测试双重保障

实践建议

适合场景

  • 中大型项目,架构复杂度较高
  • 团队协作,需要明确接口契约
  • AI 辅助开发,需要清晰任务边界
  • 技术方案存在不确定性

前置条件

  • 对业务需求有基本理解
  • 具备一定的架构设计能力
  • 熟悉 Mock 框架和测试工具

注意事项

  1. 场景测试要覆盖核心业务流程,否则骨架不完整
  2. Mock 行为要尽量接近真实实现,避免假通过
  3. 每个 Mock 替换后立即验证,不要批量替换
  4. 保留单元测试,场景测试和单元测试各司其职

让 TDD 的威力在架构层面得到充分发挥。

大模型-CLIP 详细介绍 最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。 阅读详情

相关推荐

超详细的YOLOv8安装与测试指南:让计算机视觉任务变得简单

python3+、Anaconda3或Miniconda3 Ultralytics提供了多种安装方法,包括pip、conda和Docker。通过pip包安装最新稳定版的YOLOv8,或者克隆Ultralytics GitHub仓库以获取最新版本。Docker可用于在隔离容器中执行包,避免本地安装。 最简单直接的方式就是直接使用pip方法直接安装。 也可以直接从GitHub仓库安装包。如果你想要最新的开发版本,这可能会很有用。确保你的系统上安装了Git命令行工具

CDBmax的博客 1万+

【大模型应用】Spec(规格说明)在AI编程中的深度解析:从概念到Java实战应用

Spec(规格说明)是AI编程中连接需求与实现的精确桥梁,它通过结构化文档精确描述软件组件行为,强调可执行性和机器可读性。本文解析了Spec的核心理念、标准化模板结构(包含接口定义、数据结构、业务规则等关键部分),并展示了其在AI编程工作流中的应用,包括解析执行流程以及与Rule、Skill的协同模式。文章通过电商订单服务案例,详细演示了如何编写完整的Spec文档,为AI生成准确代码提供必要上下文。Spec作为AI时代软件工程的标准化语言,正在重塑从需求到代码的实现路径。

NeoLshu的博客 2289

实测有效防止colab自动断开连接

实测有效防止colab自动断开连接

Thebest_jack的博客 1万+

AI 编程必学,规范 ( spec ) 驱动编程入门与实战

AI 编程必学,规范 ( spec ) 驱动编程入门与实战

道友 514

【视频编码学习】AVS3参考软件HPM-4.1简单配置运行

1、用Visual Studio2017打开HPM-4.1文件夹 2、找到文件夹目录下x86_windows文件夹,因为是在win上运行该代码 3、然后找到对应vs版本(我当时2017版)的解决方案sln文件,双击打开可以看到该解决方案下的全部项目。 4、重新生成解决方案时发现提示sdk版本问题,所以右键点击所有的项目,选择重定向项目,修改一下sdk版本。 ...

谦虚勤奋诚实感恩 3100

YOLOv11 改进 - 特征融合 | 小目标检测救星:DySample动态上采样减少特征丢失

本文介绍了超轻量且高效的动态上采样器DySample与YOLOv11的结合,以解决传统上采样器工作负载大、应用场景受限的问题。DySample从点采样角度构建上采样,绕过动态卷积,使用PyTorch标准内置函数实现,无需定制CUDA包,能大幅减少参数、FLOPs等资源消耗。我们将DySample代码集成进YOLOv11。实验脚本显示,结合DySample的YOLOv11在多个密集预测任务中或表现出色。

魔改工程师的博客 1420

Spec研发平台实践,从Vibe Coding到范式编程,打造AI领域专家

本文围绕淘系交易场景的AI编程痛点,探索了从“Vibe Coding”到“范式编程”的技术演进路径,核心是通过规范驱动开发(SDD),构建Spec平台,实现AI编程的规范化、标准化和高效化。通过Spec工具选型、CodeAgent双通道部署、领域知识构建和质量评估体系建设,我们解决了AI编程的上下文缺失、知识碎片化、重复造轮子等核心痛点,在小需求开发场景中实现了研发效率和代码质量的双重提升。

小程故事多的博客 1048

Qt C++ 信号发生器控制软件

waveformComboBox->addItems({"正弦波", "方波", "三角波", "锯齿波", "脉冲波"});frequencyLabel = new QLabel("频率 (Hz):");amplitudeLabel = new QLabel("幅值 (V):");offsetLabel = new QLabel("直流偏移 (V):");} else if (currentWaveform == "三角波") {} else if (currentWaveform == "方波") {

寒寒豆豆软件公司的博客 125

Spec Kit 踩坑实录:为什么我严格走了7步,AI 生成的代码还是没法用?

如果 Plan 里出现了错误的技术选型(例如用错了数据库、ORM 框架),必须立刻打回重做,绝不能想着“生成代码后再改”。:除了回答 AI 的问题,还要主动思考:“你生成的文档是否包含了我没说、但我默认你该知道的约束?AI 生成代码时彻底放飞自我,刚才在 Plan 里没拦住的错误,在这里全部变成了具体的 Bug。时,生成的代码完全不可用:数据库方言错了、重复造了已有的轮子、业务逻辑不仅没对齐甚至还跑偏了。AI 在文档里悄悄“脑补”了一些我没提到、但它认为合理的逻辑,或者定义了错误的数据结构。

qq_25624705的博客 846

华为OD机试 C++【TLV解析】

这里的valueOffset指的是value在整串消息里的起始位置(从0开始数)。这表示tag是15(十六进制的0F),length是4,接着的8个字符是value的内容。你收到了一串由两端设备传递的TLV格式的消息,现在你需要根据这串消息生成一个对应的(tag, length, valueOffset)列表。tag是15,对应的数据长度为4,value从第3个字节开始,所以偏移量为2。第二行:一个数字n,表示我们给出的tag的数量(0 < n < 1000)。第一行:一串消息,长度不超过10000。

wtswts1232的博客 482

MacBook 长期挂机 OpenClaw:电池保护 + 防休眠设置

本文介绍了MacBook长期挂机运行OpenClaw时的电池保护和防休眠设置方案。主要内容包括:1)电池保护策略,通过电源连接、充电限制和定期充放电维护电池健康;2)防休眠设置,禁用系统休眠、自动休眠和屏幕休眠;3)OpenClaw的Docker部署方法。文章提供了详细的命令行脚本和配置说明,帮助用户实现MacBook的长期稳定运行,同时保护电池寿命。

一键难忘的博客 1695

关于spec的学习理解

关于spec的学习理解

m0_52134015的博客 1962

电磁场仿真:电磁场基础理论_(13).微波技术基础

微波是指频率在300 MHz到300 GHz之间的电磁波。这一频率范围对应的波长为1米到1毫米。

2401_87715305的博客 1320
上一篇: 用六边形架构与整洁架构对比是伪命题?
下一篇: 彻底治愈AI“失忆”和胡说八道的真正办法
Ray-Liang
博客等级 码龄25年 31粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值