乐于分享
好东西不私藏

做AI工具,如何快速开发?

做AI工具,如何快速开发?

做AI工具,如何快速开发?

大家好,我是毛哥,这两周一直在用AI全量做vibe coding,感觉唤醒了老年程序员的第二春。

今天先复盘我用python开发AI小工具的感受。

本文来自真实项目复盘:ToolKit 工具平台(已上线17个工具,包含模型网关、截图记账、语音转写、视频处理等)


这个流程我已经在写本文的时候打包skill了,GitHub地址放在文章最后。

1. 先定规范,再写代码

很多人一拿到需求就开始写代码,写到一半发现结构乱了,推倒重来。

我的做法:每个工具动手前,先写一份 SPEC/SKILL.md。

这个文档 不需要多正式,关键是回答这几个问题:

  • 这个工具做什么?谁用?
  • 有哪些核心功能模块?
  • 数据怎么存储?
  • API 怎么设计?
  • 验收标准是什么?

这本质上是把需求装进脑子里之前,先倒进文件里。写 SKILL.md 的过程就是梳理需求的过程,很多坑在写文档时就暴露了,而不是等到写代码。


2. 搭建可复用的基础设施

做第一个工具时辛苦,做第十个工具时爽——这是基础设施的力量。

我的 ToolKit 公共库:

toolkit/lib/├── BaseService      # 服务基类(所有工具继承)├── ok / error       # 统一响应格式├── AppResponse      # 响应包装└── utils            # 工具函数

每个新工具只需要写自己的业务逻辑,底层的日志、错误处理、响应格式全部复用。

收益:一个新工具的核心代码量,从 800 行降到 200 行。


3. 设计可扩展的架构

比如模型网关,最初只接了阿里百炼。后来要接 DeepSeek、OpenAI、Google…如果当初写死了,直接改崩。

所以我从一开始就做了三层抽象:

# 底层:各个厂商的原生 API 适配器classDashScopeProvider: ...classDeepSeekProvider: ...# 中层:统一接口抽象classAIProvider(ABC):    @abstractmethoddefchat(self, messages): ...# 上层:OpenAI 兼容层(一个类复用 8 家厂商)classOpenAICompatProvider(AIProvider): ...# 再加厂商 → 加一个 Provider 类,上层不动

4. 改新功能 ≠ 破旧功能

永远不要因为添加新功能而破坏已有功能。

这条说起来简单,做到极难。我的具体做法:

修改前必做备份。改 main.py、路由、核心逻辑前,先 git commit 或复制备份。

修改后验证清单

  • 首页加载正常
  • 分类标签切换正常
  • 搜索功能正常
  • 热榜弹窗正常
  • 每个工具页面可访问
  • 评分功能正常

5. 用 Karpathy 四大原则指导编码

Think Before Coding — 先想清楚再动笔。问自己:这个需求的核心是什么?最简单的实现方式是什么?

Simplicity First — 如无必要,勿增实体。能用 500 行解决的问题,不要写到 2000 行。

Surgical Changes — 精准手术式修改。只改需要改的地方,不做连带改动。

Goal-Driven Execution — 动手前先定义成功标准。代码写完对照标准验证,而不是「感觉差不多了」。


6. 重视数据持久化

很多工具上线时功能正常,关机重开后数据全没了——因为没做持久化。

我的原则:凡是有状态的数据,全部落盘

  • 用户配置 → JSON / SQLite
  • 错题集(AI数学游戏)→ JSON
  • 评分/评价 → ratings.json、reviews.json
  • 访问统计 → stats.json

用 JSON 的好处是不需要装数据库,Python 原生支持,读写都简单。数据量大了再迁移到 SQLite。


7. 前端不要从零画

用 TailwindCSS 做样式,ECharts 做图表,这是我的标准栈。

不自己写 CSS 的好处:

  • 开发速度快 10 倍
  • 样式一致性好
  • 响应式天然支持

不要在样式上浪费精力,把时间花在核心功能和用户体验上。


8. 重视预览和反馈

去水印工具原来只能「上传 → 处理 → 下载」,用户看不到中间状态。增加预览后,体验提升明显:

上传文件  →  立刻预览原图处理完成  →  立刻预览结果图不满意    →  重新框选区域再处理

小改进,大收益。用户的信任感来自于「看得见」。


9. 善用子进程和异步

AI 工具常常需要调用外部服务(Whisper、FFmpeg、LLM API),这些操作容易阻塞主线程。

  • FFmpeg 调用
    :用 subprocess.run(),设置合理的 timeout
  • 长任务
    :用后台线程或队列,不要卡死 Flask 请求
  • 进度反馈
    :用 SSE(Server-Sent Events)让用户看到实时进度

10. 快速开发的核心心法

先跑通,再优化;先解决有没有,再解决好不好。

不要追求一开始就设计完美的架构。先让工具跑起来、用户能用上,然后再根据实际使用情况迭代。用起来的工具才有改进的价值,躺在设计稿里的完美方案一文不值。


附:工具开发 9 步法

1. 需求分析  →  确定工具类型(Inline / Blueprint)2. 写 SKILL.md3. 创建目录结构4. 编写核心逻辑模块5. 集成公共库6. 功能自测7. Debug 修复8. 上线启动9. 完善文档

工具快速开发的本质,是把经验固化成规范,把规范固化成基础设施,把基础设施固化成肌肉记忆。共勉。

地址如下:

https://github.com/ymm-linux/AI-toolkit-skill