使用ai编程一年多,我遇到的问题以及解决思路

前言

7年牛马程序员,使用ai已经很长一段时间了,一天干爆老板600刀,也算小有经验,目前用ai做项目感觉最大的问题是,我之前用ai这么写是为啥来着?

AI编程困境

现在ai越来越强,如果给它准确的任务描述,干活是基本没有问题的,我从最开始的详细审查ai的代码,到现在渐渐放手给ai做,只做大概的审查,要是一次做不对,就让它多做几遍 感谢老板给的不限量token ,用多了,发现会容易出现对项目掌控不可避免的降低,以及对项目代码的理解只是泛泛水平

比如:

  • 前几天这个需求有个bug,字段取得什么值,逻辑是怎么写的,是我的锅吗,不知道
  • 前几天明明 ai 做对过的东西,在另一个地方再做一遍怎么做错了,为什么做错了也不知道
  • 明明项目里已经有类似组件/工具函数,它又重新写一套,自己也没发现
  • 上周为什么要让 ai 这么写,忘了
  • 前几天强调过的地方,现在又要强调一遍。

总得来说,就是干活的速度快了,但是对需求的掌控程度下降,我不知道其他人目前使用ai对项目的理解是不是依旧强悍,但是我相信人会越来越懒。

该怎么办

那么有的老铁该想了,我是不是该多在代码审查上多花点时间,不然没几天就忘了为什么这么做了。有道理,确实应该好好看下ai写的代码,但是效率呢,ai 5分钟写的几百行代码半个小时不见得能看得懂,后面的需求还等着你呢,半天下来领导一问你需求做的怎么样了,你说没做多少,会不会觉得你没跟上时代?后台一看你干活没多快token还用了不少,这下好了,员工又贵干活还慢。

那么该怎么办?鄙人拙见,日常让ai改完代码写上详细注释 再加记录项目日志 ,项目开发的进度,ai都做过什么,为什么要这么做,而且让ai来做,不要自己来手动写日志,效率低,还慢,最重要的原因是我懒得自己写

那么该怎么做呢,我参考superpowers这种agent插件自己做了一个wingman,中文名小帮手

主要功能

主要功能包括memory系统用于记录项目日志 ,和project-map生成项目图谱,主要是用来登记项目目前有哪些东西

memory

这个功能会在项目本地生成文件夹,大概长这样

md 复制代码
.wingman/memory/
  brief.md   项目级入口:语言设置、全局 ADR、领域路由表、记忆结构说明、权威顺序。
  context.md  当前工作、待办事项、近期高信号日志
  domains/  业务规则、API 契约、字段含义、状态流、权限、配额、生命周期规则等
    billing.md
    upload.md
  history/   历史追溯:重要事件正文和轻量索引,用于回答"之前为什么这么改"。
    index.md
    domains/
      billing.md
      upload.md
    topics/ 按需求分类
      quota-display.md
      upload-retry.md
      upload-contract.md
    months/
      2026-06.md
    events/
      2026/
        06/
          2026-06-21-upload-chunk-hash-regression.md

分为四个skill

  • memory-setup 启用仓库级记忆,创建最小核心文件。
  • memory-load 开始工作前按任务路由读取相关记忆,不加载全部历史。
  • memory-sync 完成工作后记录有价值知识,并按价值分流到短期日志长期规范或历史事件。
  • memory-clean 在用户明确要求时清理记忆,优先无损压缩、提升长期知识,并对删除设置确认门槛。

初始化仓库后,load 和 sync 可以自动触发,记忆文件也会自动更新,无需手动维护。前提是对话要在 agent 里,当然手动调用 skill 更保险一点。

除此之外还有一个project-map,主要是方便ai知道项目有哪些功能,相似的功能有什么区别,当然每次使用全局扫描其实更稳,但是费token,做这个skill的初衷也是想节省点token,只不过这个功能还在内测,希望大佬们也能多提点建议。

data-contracts 数据对接

一个比较日常的skill,最开始做这个 skill 主要是为了约束让 ai 对接后端接口字段的时候不要乱改,后来把这个概念扩散到当 A 系统的数据和 B 系统的数据发生交接时,ai 该如何处理。

几个常见的问题:

开发阶段前端使用的是 userName,让 ai 对接后端接口后,为了把后端的字段映射成 UI 组件期望的字段(比如把 user_name 转成 userName,把 image 转成 img),写了很多无意义的转换,因为 ai 不知道之前的代码是在调试阶段,不会轻易改之前的代码,比如

ts 复制代码
// 数据源:[{ id: 1, user_name: "Alex", image: "xxxxx" }, ...]  
export function UserList({ userListApiData }) {

  return (
    <ul className="user-list">
      {userListApiData.map((user) => {
        // 在 map 内部执行 Scenario A:轻量级解构映射
        const { 
          id, 
          user_name: userName, 
          image: img 
        } = user;

        return (
          <li key={id} className="list-item">
            <span className="name">{userName}</span>
            <span >{img}</span>
          </li>
        );
      })}
    </ul>
  );
}

现有的 UI 组件 ProductCard 原本期望传入 title, imgpoints。但新的 API 返回的却是 product_name, image_url,而且有时候还会漏掉 price 字段。

ts 复制代码
// 错误的做法:
// 父组件 (Parent Component)
export function ProductList({ apiData }) {
  return (
    <div>
      {apiData.map(item => (
        <ProductCard 
          // 错误示范:在这里做"翻译"和"填坑"
          title={item.product_name}    // 把 product_name 翻译成 title
          img={item.image_url}         // 把 image_url 翻译成 img
          points={item.price ? item.price : 0} // 缺字段?在这里硬补一个 0
        />
      ))}
    </div>
  );
}

// 正确的做法:
// 子组件:ProductCard.tsx

// ✅ 动作 1 直接修改组件的 Interface,拥抱后端的命名
interface ProductCardProps {
  product_name: string; // 以前叫 title,现在直接叫 product_name
  image_url: string;    // 以前叫 img,现在直接叫 image_url
  price?: number;       // ✅ 打上问号,承认后端有时候会不传这个字段
}

// 组件入参直接使用后端字段
export function ProductCard({ product_name, image_url, price }: ProductCardProps) {
  
  // ✅ 动作 2 遇到没传 price 时,别报错,给个默认值 0,并留下 FIXME 证据
  const displayPrice = price ?? 0; // TODO: Field [price] missing in API
  
  return (
    <div className="product-card">
      <img src={image_url} alt={product_name} />
      <h3>{product_name}</h3>
      <p>价格: ${displayPrice}</p>
    </div>
  );
}

// 改完之后的父组件 (Parent Component)
export function ProductList({ apiData }) {
  return (
    <div>
      {apiData.map(item => (
        // ✅ 完美:没有任何翻译代码,直接把后端的一整条数据扔进去!
        <ProductCard {...item} /> 
      ))}
    </div>
  );
}

乱改 ui,我就想不明白了,对接个接口 ai 为什么老想改样式

除此之外一直想做个提交pr的skill,日常上班是真忙,而且不知道为啥各大skill插件都没有出这个功能,难道是有什么隐患?

安装

很遗憾目前 cursor 和 codex 我都没发上架到官方插件市场,codex 入口都没有,辛苦各位大佬手动安装下

Codex

bash 复制代码
codex plugin marketplace add lsshym/wingman.ai
codex plugin add wingman@wingman-marketplace

Cursor

text 复制代码
/add-plugin wingman@https://github.com/lsshym/wingman.ai

做的还有些不完善的地方,平时工作忙,完善只能挤时间,在这里只是提供思路,也希望能多跟大佬们交流下

仓库

GitHub:https://github.com/lsshym/wingman.ai

希望大佬们点点 star。

碎碎念

ai做项目确实快,目前大部分公司会审核ai写的代码,但是不知道各位感觉到没有,自己还有多少看ai产出的代码的耐心,产出的代码有时候难以阅读,而且仔细审查代码消耗的心智和时间成本也比较高。时间一长必然会影响项目速度。员工用ai是为了更轻松,不会有人打工上瘾吧?,对公司来说,效率没那么快那花钱给员工买token的意义是让员工干的更快,如果哪天说想整理整理代码,可能会因为影响工作效率被嫌弃,可能有些领导会说质量效率两手抓,但是真要点时间又该不乐意了。大胆预言,未来ai时代下,难以维护的代码会越来越多,马上会进入大屎山时代,希望不会看到屎山崩塌。

相关推荐
duanze1 天前
从零开始Android商业项目Vibe coding完全指南(七)
app·vibecoding
卡卡罗特AI4 天前
有了 DESIGN.md 后,大家也能写出高颜值的网站了!
ai编程·vibecoding
kunge20134 天前
1. OpenSpec 命令执行过程与 Claude Code 提示词详解
vibecoding
自传.5 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
文艺倾年5 天前
【强化学习】数学推导专题,20W字总结(十五)
人工智能·分布式·大模型·强化学习·vibecoding
Captaincc6 天前
TRAE AI创造力大赛,正式启动!
trae·vibecoding
Hector_zh9 天前
逐浪 · 第十一篇: Vibe Coding 下的效率定义与规范建设
人工智能·vibecoding
卡卡罗特AI9 天前
小米MiMoCode官网颜值高?Codex:拿来吧,您嘞!1:1完美复刻~
ai编程·vibecoding
win4r9 天前
Claude Fable 5 来了:这不是 Opus 的小升级,而是 Anthropic 给 Agent 时代递出的新牌
ai编程·claude·vibecoding