Vibe Coding 好啊,得学啊!!!
下文记录一次 不写一行代码,两小时量级 的Demo的实践:串起前端、后端、本地大模型与 RAG,得到一个能跑、能演示、能接着迭代的客服 Demo。以 customer-service-llm 为例,正文分三块:怎么跟 AI 聊才不翻车、怎么一小步叠版本,以及最后做成了啥。源码见:customer-service-llm。
一、和 AI 沟通时,什么最有用
1. 说清楚「要什么」,而不是只扔一句「做个客服」
模糊请求会得到通用脚手架;越具体,越接近你可维护的代码。例如:
- 技术栈:React + Vite、Node + Express、本地 Ollama,不要默认云端 API。
- 交互:要流式输出、Markdown、参考常见 IM / 豆包式布局等——用一句话定性即可。
- 数据:用户与密码存在本地 JSON、历史按用户分文件——这比「帮我存一下」更可执行。
- 后续增量:例如「加 RAG,公开资料 + 每用户私有资料,最小成本本地跑通」——约束会直接体现在目录设计与索引脚本上。
2. 用「版本化文档」当共同契约
本项目在 docs/ 里按 v1.0 → v6.0 递增:每一版说明相对上一版多了什么、刻意不做什么。和 AI 协作时,你可以:
- 先要求「写一份设计说明」,再要求「按文档实现」;
- 改需求时先说「在 v6 文档里补充 §x」,再改代码,避免口头漂移。
文档即是 prompt 的延伸,也是日后你自己回顾时的路线图。
3. 分步验收,而不是一次要大而全
每轮只做一类能力:先跑通对话,再加登录,再加历史侧栏,再加 RAG。每步结束时要求:
- 可运行的命令(如
npm run dev); - 关键接口约定(如 SSE 事件格式);
- 失败时的行为(如 Ollama 连不上返回什么)。
这样 AI 的上下文更集中,你也更容易判断「这一步算不算做完」。
4. 主动纠正实现细节
模型可能过度设计或漏掉鉴权。需要你补充的事实包括:
/api/chat是否必须与历史接口一样带phone/encry;- 索引是启动构建还是离线脚本;
.gitignore里哪些生成物不该提交。
你的角色是产品经理 + 代码审查:AI 加速打字与 boilerplate,边界仍由你收口。
二、这个项目是怎样一步一步长出来的
可以用「里程碑」来理解实现顺序(与 docs/ 及 README 一致):
-
v1.0 — 骨架
前后端分离,后端能把用户问题转给本地 Ollama,证明链路通了。 -
v2.0 — 用户与登录
data/user/模拟用户库;注册 / 登录 /encry校验;前端路由与鉴权,未登录不进聊天页。 -
v3.0 — 流式与呈现
POST /api/chat改为 SSE 流式;前端逐字拼接;助手消息用 Markdown + 安全渲染;整体 UI 气质对齐「简洁对话产品」。 -
v4.0 — 多会话历史
按用户写入data/history/user_<手机号>.json;侧栏会话列表、新建对话、在某会话内继续追问;与账号绑定。 -
v5.0 — 体验打磨
消息操作、反馈、软删除等 UI 与交互细化(具体见对应文档)。 -
v6.0 — RAG(公开 + 私有)
- 知识放在
data/knowledge/public/与data/knowledge/private/user_<手机号>/; npm run rag:index调用 Ollama 嵌入模型 生成向量,写入data/knowledge/.index/;- 对话前检索 Top-K,把片段注入 system prompt,再流式生成。
- 知识放在
每一步都是在上一版可运行的前提下增量扩展,而不是重写整个仓库。这也是 vibe coding 里很实用的策略:小步提交、小步验证。
三、这个项目主要实现了哪些功能(汇总)
| 模块 | 能力简述 |
|---|---|
| 前端 | React + Vite;登录页与受保护聊天路由;对话区 + Markdown;侧栏历史与会话切换;与后端 /api 代理联调。 |
| 认证 | 模拟用户库;登录 / 校验;聊天与历史请求携带会话凭证(phone + encry)。 |
| 对话 | 服务端转发 Ollama 对话模型;SSE 流式返回;超时与连接错误时的 JSON 错误提示。 |
| 历史 | 每用户独立 JSON 文件;多会话、重命名、删除、轮次反馈等(见 v4 / v5 文档)。 |
| RAG | 公开知识全员检索;私有知识仅当前用户索引文件可被检索;离线建索引 + 运行时加载;环境变量可关闭 RAG 或控制降级策略。 |
| 运维向 | Workspaces 一键 npm run dev;README 记录模型 pull、索引时机与环境变量;敏感与生成目录 .gitignore。 |
四、哪里还「不够优雅」,以及 vibe coding 到底意味着什么
做得快不等于做得「像线上」。这个仓库刻意保留了几块可优化空间,留给下一轮融资下一版迭代:
-
数据层
用户、密码摘要、对话历史、知识库索引说明大都落在本地 JSON / 文件里,只为零依赖、clone 即跑。真要持久化、并发和查询能力,自然该上数据库与迁移脚本。想看「已经接上 Mongo 的正经服务」的示例,可以挪步另一个 demo:full-stack-demo。 -
大模型侧
默认钉在单机 Ollama:省钥匙、省账单,但也意味着没有统一的 API 网关、限流与熔断,没有多模型路由或云端兜底,日志与评测也没做成产品级——这些都是「演示够用、上线要补」的典型清单。 -
RAG 侧
向量索引暂存在.indexJSON、检索在进程里算余弦,属于最小可行;文档多了会臃肿,更新知识也不会自动重建索引。更成熟的玩法是专用向量库、增量索引、引用来源透出到 UI、权限与多租户再收紧一圈——文档v6.0里其实也留了「本版不做」的口子。
至于更大的图景——vibe coding 早已不只是名词:当你能用自然语言约束 AI、用评审代替纯手写时,「古法编程」那种从空白文件一行行凿出来的路径,正在被一种更快的迭代方式追赶甚至替换;速度之快,有时连我们自己都要边跑边改护栏。工具会变,但负责任的那个人还在,差别只是键盘敲得更少、脑子转得更多罢了。