Vibe Coding 初体验:从对话模型到 RAG

0 阅读5分钟

Vibe Coding 好啊,得学啊!!!

vibe coding.jpeg

下文记录一次 不写一行代码两小时量级 的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 一致):

  1. v1.0 — 骨架
    前后端分离,后端能把用户问题转给本地 Ollama,证明链路通了。

  2. v2.0 — 用户与登录
    data/user/ 模拟用户库;注册 / 登录 / encry 校验;前端路由与鉴权,未登录不进聊天页。

  3. v3.0 — 流式与呈现
    POST /api/chat 改为 SSE 流式;前端逐字拼接;助手消息用 Markdown + 安全渲染;整体 UI 气质对齐「简洁对话产品」。

  4. v4.0 — 多会话历史
    按用户写入 data/history/user_<手机号>.json;侧栏会话列表、新建对话、在某会话内继续追问;与账号绑定。

  5. v5.0 — 体验打磨
    消息操作、反馈、软删除等 UI 与交互细化(具体见对应文档)。

  6. 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 devREADME 记录模型 pull、索引时机与环境变量;敏感与生成目录 .gitignore

四、哪里还「不够优雅」,以及 vibe coding 到底意味着什么

做得快不等于做得「像线上」。这个仓库刻意保留了几块可优化空间,留给下一轮融资下一版迭代:

  1. 数据层
    用户、密码摘要、对话历史、知识库索引说明大都落在本地 JSON / 文件里,只为零依赖、clone 即跑。真要持久化、并发和查询能力,自然该上数据库与迁移脚本。想看「已经接上 Mongo 的正经服务」的示例,可以挪步另一个 demo:full-stack-demo

  2. 大模型侧
    默认钉在单机 Ollama:省钥匙、省账单,但也意味着没有统一的 API 网关、限流与熔断,没有多模型路由或云端兜底,日志与评测也没做成产品级——这些都是「演示够用、上线要补」的典型清单。

  3. RAG 侧
    向量索引暂存在 .index JSON、检索在进程里算余弦,属于最小可行;文档多了会臃肿,更新知识也不会自动重建索引。更成熟的玩法是专用向量库、增量索引、引用来源透出到 UI、权限与多租户再收紧一圈——文档 v6.0 里其实也留了「本版不做」的口子。

至于更大的图景——vibe coding 早已不只是名词:当你能用自然语言约束 AI、用评审代替纯手写时,「古法编程」那种从空白文件一行行凿出来的路径,正在被一种更快的迭代方式追赶甚至替换;速度之快,有时连我们自己都要边跑边改护栏。工具会变,但负责任的那个人还在,差别只是键盘敲得更少、脑子转得更多罢了。