从高级前端到 AI 工程师:我用 10 天做了一个 AI 文件助手,然后发现自己只完成了一半

5 阅读7分钟

从高级前端到 AI 工程师:我用 10 天做了一个 AI 文件助手,然后发现自己只完成了一半

我是一个做了多年前端的工程师。最近开始认真学 AI,不是那种「用 ChatGPT 写代码」的学,而是想真正转型,找 AI 相关的工作。

这篇文章记录我过去两周做的事,以及一次让我意识到「我以为我懂 RAG,但其实我在骗自己」的对话。


我做了什么

项目叫 AI File Hub,一个面向个人的私有云文件空间。核心功能:

  • 上传文件(PDF、TXT、MD、图片)
  • AI 自动生成摘要、要点、标签
  • 全文搜索
  • 基于文件内容的 AI 问答

技术栈没什么特别的:React 18 + Vite + Tailwind + shadcn/ui 做前端,Supabase 做后端(Auth + DB + Storage + Realtime),Edge Functions 跑服务端逻辑,DeepSeek API 做 AI 分析,部署在 Vercel。

从第一行代码到生产上线,大概花了 10 天。T-101 到 T-417,68 个任务,全部完成。

老实说,我当时挺满意的。这个项目覆盖了:

  • Supabase RLS 行级安全
  • Storage 文件管理
  • Edge Functions + DeepSeek API 调用
  • SSE 流式输出
  • Realtime WebSocket 推送

感觉从「会调 API」到「能做完整产品」,跨了一个台阶。


然后我被问了一个问题

在整理下一阶段学习方向的时候,我把项目发给朋友看,他问了我一个问题:

「你的问答是怎么实现的?」

我说:读取 ai_results.full_text,截断到 8000 字符,塞进 prompt,让 DeepSeek 回答。

他沉默了一秒,然后说:「这是伪 RAG。」


什么是「伪 RAG」

我以为我实现了 RAG。我确实做了「检索增强生成」——从数据库取内容,增强 prompt,让模型生成答案。

但这只是形式上的 RAG,不是真正的 RAG。

真正的 RAG pipeline 长这样:

文档上传
  → 文本分块(Chunking)         ← 我没做
  → 向量化(Embedding)          ← 我没做
  → 存入向量数据库(pgvector)    ← 我没做

用户提问
  → 问题向量化                   ← 我没做
  → 相似度检索(Top-K chunks)   ← 我没做
  → 只把相关段落注入 prompt      ← 我没做
  → 模型回答 + 标注来源          ← 我没做

我实际在做的:

用户提问
   把全文(截断到 8000 字)塞进 prompt
   模型回答

这不是检索,这是「把作弊条整张塞给学生」。

问题在哪?

  1. 长文档直接失效:超过 8000 字的内容被截断,用户问第 10 章的事,答案在第 10 章,我却把第 10 章截掉了
  2. Token 严重浪费:用户问「合同甲方是谁」,我却把整份合同都塞给模型
  3. 答案质量差:模型要在大量无关内容里找答案,注意力被稀释

最要命的是:这个缺陷在小文件上完全看不出来。我测试用的都是几千字的文件,问答效果还不错,于是我以为自己做对了。


真正的 RAG 是什么

理解 RAG 之前,先理解一个比喻。

假设你是一个需要回答考题的学生:

  • 伪 RAG 做法:把整本教材带进考场,每次回答都从第一页开始翻
  • 真正的 RAG:考前做好索引,答题时精准翻到相关页码,只读那几段

RAG 的核心价值不是「把内容喂给模型」,而是**「精准找到相关内容再喂给模型」**。

三个核心概念

1. Chunking(文本分块)

把文档按语义边界切割成小块,每块约 300-500 字,相邻块保留少量重叠(保持上下文连贯)。

原始文档(10000 字)
  → Chunk 1500 字):第一章内容
  → Chunk 2500 字):第二章内容
  → ...
  → Chunk 20500 字):最后一章内容

2. Embedding(向量化)

把每个 chunk 转成一个高维向量(比如 1536 维的浮点数组)。语义相近的文本,向量距离也近。

「合同甲方为张三」 → [0.12, -0.45, 0.89, ...]1536 维向量
「甲方:张三」     → [0.11, -0.46, 0.91, ...]  ← 向量距离很近
「今天天气不错」   → [-0.78, 0.23, -0.34, ...] ← 向量距离很远

3. 相似度检索

用户提问时,先把问题也向量化,然后在向量数据库里找「距离最近的 Top-K 个 chunk」,只把这几个 chunk 注入 prompt。

用户问:「合同里的甲方是谁?」
  → 问题向量:[0.10, -0.44, 0.90, ...]
  → 检索最近的 5 个 chunk
  → Chunk 3(相似度 0.94):「本合同甲方为...」✓
  → Chunk 7(相似度 0.91):「甲方联系方式...」✓
  → 其余 18 个 chunk 不注入 prompt

这样,无论文档有多长,每次问答只用到少量相关内容,token 省了,准确率高了,长文档也能用了。


我的升级计划

意识到问题之后,我整理了一个升级方案,把 AI File Hub 从「伪 RAG」改造成「真 RAG」。

核心改动有三块:

1. 数据库层:加 pgvector

Supabase 原生支持 pgvector 扩展,启用后可以直接在 PostgreSQL 里存向量、做相似度检索,不用新增任何服务。

新增 document_chunks 表:

CREATE TABLE document_chunks (
  id           uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  document_id  uuid NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
  user_id      uuid NOT NULL REFERENCES auth.users(id),
  chunk_index  integer NOT NULL,
  content      text NOT NULL,
  embedding    vector(1536),   -- pgvector 类型
  created_at   timestamptz DEFAULT now()
);

-- 向量相似度索引
CREATE INDEX ON document_chunks
  USING ivfflat (embedding vector_cosine_ops);

2. analyze-file:新增分块 + Embedding 步骤

原来的流程:提取文本 → DeepSeek 生成摘要

升级后:提取文本 → 分块Embedding(OpenAI)存向量 → DeepSeek 生成摘要

为什么用 OpenAI Embedding 而不是 DeepSeek? text-embedding-3-small 成本极低(约 0.02/百万token),1万字文档的Embedding成本约0.02/百万 token),1 万字文档的 Embedding 成本约 0.00006,而且稳定性更好。AI 服务可以混用,不必从一而终。

3. chat-with-file:换成真正的检索

原来:读全文 → 截断 → 塞 prompt

升级后:问题向量化相似度检索 Top-5 → 只注入相关 chunk → 回答 + 标注来源

Prompt 从「全文倾倒」变成精准的:

【参考段落】
[段落 3](相关度:94%)
本合同甲方为...

[段落 7](相关度:88%)
甲方联系方式...

【用户问题】
合同里的甲方是谁?

前端工程师学 AI 的一些思考

做这个项目让我意识到,前端工程师学 AI 有一个独特的优势,也有一个容易踩的坑。

优势是: 做出来的东西能看,能用,能展示。很多算法背景的工程师能做 RAG pipeline,但做不出好用的产品界面。流式输出的 SSE 渲染、实时 WebSocket 状态同步、骨架屏 loading 态——这些对我来说是基本功,但对他们来说可能要额外花两周学。AI 应用工程师这个交叉点,竞争比纯算法方向小得多。

容易踩的坑是: 前端思维容易停在「能跑通」就满足了。问答功能能用?能用。测试文件很小,效果不错?很好。就这样上线了。但 AI 工程的核心难题往往在「规模化」和「边界情况」:文档很长怎么办?问题和文档完全不相关怎么办?用户问了文档里没有的事怎么办?

这些问题,我做完阶段四才开始认真想。


下一步

做完 RAG 升级之后,我计划再做一个新项目:AI Agent

如果说 RAG 是「让 AI 能找到答案」,那 Agent 是「让 AI 能完成任务」。用户说「帮我整理收件箱里所有关于合同的邮件,提取关键日期」,Agent 会自动调用工具、执行步骤、返回结果——不只是回答,而是真正地做事。

这是目前市场上最热的方向,也是我前端背景最能发挥价值的地方:复杂的 Agent 工作流可视化、流式步骤展示、工具调用 UI——这些都需要很强的前端能力。


最后

如果你也是前端,想转 AI 方向,我的建议是:

先做一个真实的 AI 应用,做到上线。 不要停在教程里,不要只是调调 API 看看效果。从数据库设计到部署,完整走一遍,你会遇到很多「教程里没讲的问题」,解决这些问题才是真正的学习。

然后,认真理解 RAG。不是「知道这个名词」,而是能说清楚 Chunking 策略的选择依据、Embedding 模型的选型逻辑、相似度检索的参数调优。这是 AI 应用工程师和「会用 ChatGPT 的开发者」之间最核心的分水岭。

项目地址:github.com/nacheal/ai-…
生产环境:ai-file-hub.vercel.app/

RAG 升级还在进行中,做完会再写一篇。


写于 2026-03-26