代码生成项目bug,生成前端页面有一个顶部的元素标题,通过对话一直无法解决,最后还是claude code解决的

image.png 这个问题非常典型,暴露了 AI 代码生成的几个根本性局限。

解决方案

  • 需要加上图片识别的模型
  • 需要前端支持截图和框选
  • 修改系统提示词但会较麻烦,无法预估问题出现可能性

为什么系统对话修不好这个 Bug

1. AI 看不到渲染结果

代码生成的 System Prompt 告诉 AI 怎么写代码,但 AI 从来没有看过页面渲染效果。它不知道导航栏里出现了一坨 JSON——它只知道:我写了 t('products'),这个调用是合法的 Vue/i18n 语法,不会编译报错。

text
复制代码
AI 的认知: t('products') → ✅ 语法正确,编译通过 真实的渲染: t('products') → 返回数组 → Vue dump 出整段 JSON

2. 这是一个"静默 Bug",不是编译错误

AI 的工具都是基于文件操作的——FileWriteToolFileReadToolFileModifyTool——它们操作的是源码文本,不是运行时状态。这个 Bug 在每一层都不触发错误:

检查结果
语法检查t('products') 是合法的 JS 调用
编译✅ Vue SFC 编译通过
npm build✅ 构建成功
渲染❌ 导航栏显示 JSON 而不是文字

AI 的工具链到第 3 步就停了,它根本不知道第 4 步出事了。

3. AI 不理解自己的 i18n 键名冲突

根本问题在 System Prompt

这个 bug 的原因是 AI 在使用 i18n 键名时犯了同一个错误——把数据 key和导航 key起了同一个名字。如果经常出现这个问题,需要在 codegen 的 System Prompt 里加一条规则:

国际化键名规范:

  • 导航/标签类用单个名词: "products", "about"
  • 数据数组类用 Items 后缀: "productItems", "newsItems"
  • 禁止数据数组和导航标签使用同名 key

当你告诉 AI "导航栏有长文字",AI 会把 FileReadTool 读取 NavBar.vue,然后看到:

html
复制代码
<router-link v-for="link in links" :key="link.path" :to="link.path"> {{ t(link.key) }} </router-link>

这行代码本身没有任何问题t(link.key) 就是 t('products'),这是标准写法。AI 不会想到 t('products') 返回的是数组而不是字符串——它需要再去读 i18n.js,然后在同一文件里发现 products 被定义了两次,然后理解 JS 的对象字面量键名覆盖规则,然后意识到这是根本原因。

每一步的逻辑跳跃都成立,但把这些串起来是最难的——因为 AI 在每次工具调用之间是无记忆的,它不知道上一次读了 NavBar.vue 之后还需要去看 i18n.js 里的键名冲突。

4. FileModifyTool 做的是文本替换,不是语义重构

即使 AI 发现了根因,它的修改工具也有限:

java
复制代码
// FileModifyTool — 这是 AI 唯一能用的修改工具 @Tool("修改文件内容,用新内容替换指定的旧内容") public String modifyFile(String path, String oldContent, String newContent)

这个工具只能做精确的字符串替换。但修复这个 Bug 需要:

  • i18n.js 里把数组 key 从 products 改成 productItems
  • ProductGrid.vue 里改 t('products')t('productItems')
  • Products.vue 里改 v-for="p in t('products')"t('productItems')
  • 但又不能改 NavBar.vueFooter.vue 里的 t('products')(它们确实应该是字符串)

这相当于一次跨 4 个文件、有选择性的语义重构,AI 用文本替换工具做这件事,体验就是反复尝试反复失败。

根本矛盾:Vibe Coding 的调试盲区

text
复制代码
代码生成的 AI = 会写代码,但看不到渲染结果 对话修 Bug 的 AI = 能看到代码,但看不到运行时 用户 = 能看到 Bug 效果,但不一定清楚根因

三个人各掌握一段信息,谁都没有完整的"Bug → 根因 → 修复"链路。这和传统开发中"打开浏览器 DevTools → 看 Network 面板 → 定位到代码行 → 修改"的闭环完全不同。

这类问题怎么解决

方案可行性
在 System Prompt 中加编码规范✅ 最容易落地——"产品数据类键名加 Items 后缀,禁止和导航键名重名"
AI 生成后加质检 Rule✅ 检查 i18n 文件中是否有同名 key 但类型不同的情况
前端加防御渲染每个 {{ t(key) }} 加类型检测——如果是数组就只显示长度而不 dump
给 AI 加浏览器工具理论上可以让 AI 通过 Playwright 看到渲染结果然后修正,但工程复杂度很高
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
pada
作者分享
感觉面试鸭的回答问题后,没有对回答问题的评分,不知道回答的效果
0
Prompt调优是什么
4
Day 9 ✅ 今天做了:学习LangGraph ⏰ 明天计划:学习大模型微调技术 📚 今日感悟: LangGraph 是一个基于图论的编排框架,它突破了传统链式架构的局限,引入了 “状态-节点-边” 的三元架构。它将 AI 应用建模为有状态的有向图,核心价值在于:支持循环、条件分支等动态控制流,并提供状态持久化与断点续传能力。 与传统 LangChain 线性流水线不同,LangGraph 更像一个有状态的“流程图”,适合构建需多轮决策和状态追踪的复杂 Agent。它与 LangChain 并非竞争关系,而是同一生态系统下的协同互补:前者提供丰富的工具组件,后者提供精细的流程编排。掌握两者的协同使用,是从“搭建原型”迈向“生产级系统”的工程进阶。
2
Day 8 ✅ 今天做了:LangChain4j和Spring AI框架的学习使用 ⏰ 明天计划:工作流编排与 LangGraph的学习 📚 今日感悟: Spring AI 是 Spring 官方推出的 AI 集成框架,旨在让 Java 开发者以熟悉的 Spring 方式构建企业级 AI 应用。它的核心价值在于:提供统一的模型调用接口,支持 OpenAI、Anthropic、Google 等主流模型,代码无需大量修改即可切换供应商;通过 Spring Boot Starter 实现自动配置,与 Spring 生态无缝融合。关键功能包括:`ChatClient` 核心交互接口、`@Tool` 注解支持工具调用、内置 RAG 流水线与 ETL 框架,以及通过 `Advisors` 拦截器实现请求增强与安全过滤。此外,Spring AI 提供可观测性集成与模型评估能力,涵盖生产级需求。 从版本演进看,Spring AI 1.0 正式确立核心功能体系,1.1 版本引入 MCP(模型上下文协议)与提示词缓存,进一步强化 Agent 开发能力。它适合已有 Spring 技术栈的团队,以较低成本将 AI 能力整合到现有业务系统中。
3
Day 7 ✅ 今天做了:整体过了一遍Agent 核心概念与架构总览、LangChain4j上手学习使用 ⏰ 明天计划:开始Spring AI、工作流编排与 LangGraph的学习 📚 今日感悟: 学习要点: 1. 掌握核心抽象AiServices,通过声明式接口快速构建AI服务; 2. 理解RAG流程(文档加载、向量化、检索增强生成),使用EmbeddingStore和RetrievalAugmentor让模型基于私有知识回答; 3. 学会Agent开发,通过@Tool注解让LLM调用Java方法执行动作; 4. 利用BOM(langchain4j-bom)统一管理版本。 关键实践:组合使用ChatLanguageModel、ChatMemory、RAG增强器和工具调用,可快速构建能查阅文档、多步推理的智能应用。相比Python版,它更注重Java工程化实践,与Spring Boot无缝集成,适合企业级AI应用开发。
4
下载 APP