CarGPT:RAG 项目实践 —— 从 0 到 1 打造汽车领域 AI 助手

113 阅读8分钟

前言

大家好,我是3Katrina, 最近写文章写得少,一方面是因为我在准备面试,另一方面是因为我在开发一个新的项目! 即使现在只有一个雏形,但我认为这个项目无论是从想法上还是从技术上,对于 应届生的我们 在求职中,是够用的, 特别是在这个AI盛行的时代,它更能吸引面试官。

截图

话不多说 先给大家看看 这个项目的部分截图吧!

9374ea1c9d7e32d12da80c4a0f46690.jpg

想法起源的杂谈

首先给大家概述下这个项目: CarGPT 是一款专注于汽车领域的智能问答助手,基于RAG技术构建,能够为用户提供汽车相关的专业问答服务,目前已支持 2025 年 9 月的最新数据。这是一个全栈项目,从数据爬取、处理、存储到前端交互体验都做了完整实现。

做这个项目的想法是什么呢?下面是一些杂谈

做一个RAG应用.

什么是RAG?
首先,我们传统的大模型存在一个缺点:即使它的文字处理能力非常6,但是对于用户的提问,它只能基于大模型知识库中已有的知识来根据用户的提问回答内容,这会导致一些问题:如果用户问:”请问ipohone17的价格怎么样?性能怎么样?总结一下iphone17发布会的内容“,这个时候大模型 对于我们的提问, 它并没有相关知识的参考,于是它就会 ”无法回答“ 或者 ”乱答“。

但是如果你在prompt给它iphone官网的 最新信息 或者 iphone17发布会的相关报道,它就能根据这些上下文,”有理有据“地进行回答了

简单来说: RAG(检索增强生成)是通过先从外部知识库中检索与用户问题强相关的信息,再将这些信息与问题结合后输入大模型生成有理有据回答,从而解决大模型知识滞后、乱回答问题的技术方案。

下面是它的传统流程:

第一步,知识库预处理:先把要接入的知识库(比如公司内部的客户资料、行业政策文档)拆成适合检索的‘小文本块’(避免文本太长影响匹配精度),再用 Embedding 技术把每个文本块转成向量,最后存到向量数据库里 —— 这一步是‘快速检索’的基础,相当于给知识库建了‘向量索引’。

第二步,检索(Retrieval) :当用户提问时,系统会先把用户的问题转成向量,然后去向量数据库里‘比对’—— 因为意思相近的文本,向量也会更相似,所以能瞬间找出和问题最相关的几段文本(比如 Top3-Top5),避免把整个知识库传给 LLM 导致效率低、成本高。

第三步,增强(Augmentation) :把检索到的这几段‘强相关信息’,和用户的原始问题拼接在一起,形成新的输入(比如 “用户问题:公司 2024 年员工年假政策是什么?参考信息:1.XXX 2.XXX”)—— 这一步相当于给 LLM “临时补充知识”,让它不再只依赖固有知识库。

第四步,生成(Generation) :LLM 基于 “用户问题 + 检索到的参考信息” 生成回答,这样既不会因知识缺失无法回答,也不会乱编内容,能做到有理有据,比如回答时会引用 “根据公司 2024 年 XX 政策第 3 条”,这就是 RAG‘增强大模型能力’的核心逻辑。”

我为什么要做?

所以回到这个项目,我在学习了 RAG 后,不想只是停留在概念上面理解,而是真正地落地一个RAG项目, 一方面是能够帮我更好地通过实操理解 RAG 的全流程; 另一方面 我认为这对求职来说也会很有帮助,因为做一个这种 新兴的项目 意味着我需要去学习很多新东西并且理解它们,所以我认为在求职中,这能体现我的 接受新知识能力以及动手实操能力

因此 CarGpt 这个项目就应运而生了!

为什么选 “汽车领域” 做 RAG?

选择汽车领域,是因为它的信息特性刚好契合 RAG 的优势,同时存在 3 个明显痛点:

时效性强:汽车每年换代(2025 款车型信息大模型默认没有)、政策频繁调整(如新能源补贴),传统大模型无法覆盖;
信息分散:车型参数在汽车之家、政策在工信部官网、评测在懂车帝,用户需跨平台查,效率低;
专业术语多:“CLTC 续航”“热成型钢占比”“混动架构” 等术语,普通用户难理解,需要 “翻译” 成通俗语言。

CarGPT 的核心目标,就是整合这些分散的最新信息,用 RAG 技术实现 “专业且易懂” 的问答 —— 这既是技术落地,也是解决实际需求。


技术杂谈

我认为技术的话,可以分为下面几个点去谈谈,由于是杂谈,可能看起来不是那么的系统

技术栈选择与应用

项目采用 Next.js 作为核心框架,配合 TypeScript 确保类型安全,用 Tailwind CSS 实现响应式 UI 设计。数据存储方面结合了 Prisma ORM 和 Supabase,其中 Supabase 不仅作为常规数据库,更重要的是利用其向量存储能力支持 RAG 架构。

AI 功能实现上,集成了 Ai SDK 处理大模型交互,LangChain 框架用于构建检索增强流程,Puppeteer 实现网页数据爬取,Zustand 则用于前端状态管理,特别是用户认证状态的管理。

技术亮点

  1. 智能数据处理流程 为确保汽车数据的时效性,我基于 LangChain 框架整合 Puppeteer 实现了定向网页爬取功能。通过无头浏览器技术自动化获取汽车领域最新资讯,再通过正则处理提取有效文本,过滤掉 HTML 标签等无关信息。

    爬取的数据通过 RecursiveCharacterTextSplitter 进行分块处理,设置 512 字符块大小和 100 字符重叠,既保证语义完整性又避免信息割裂。

  2. 向量存储与检索系统 这是项目的核心部分。我调用 OpenAI 的 text-embedding-3-small 模型,将分块后的文本转换为 1536 维向量,然后存储到 Supabase 的向量数据库中。

    为实现高效的相似性检索,我在 Supabase 中定义了自定义 RPC 函数 get_relevant_chunks,通过余弦相似度算法计算向量距离,支持按匹配阈值和返回数量进行筛选,确保检索结果的精准性。

  3. 流畅的对话交互体验 前端采用 @ai-sdk/react 提供的 useChat hook,仅用少量代码就实现了 AI 响应的流式输出,让回答内容逐字显示,大幅提升用户体验。

    同时集成 React-Markdown 组件,能够解析 AI 返回的 Markdown 格式内容,支持链接、代码块等元素的正确渲染,使回答既专业又易读。

  4. 安全认证机制 实现了基于 JWT 的双 Token 认证体系,包含 access token 和 refresh token。access token 有效期 15 分钟,refresh token 有效期 7 天,通过无感刷新机制,在用户无感知的情况下自动更新 token,既保证安全性又提升用户体验。

    认证逻辑通过 Next.js 中间件实现,精确控制受保护路由的访问权限。

完整流程总结

数据采集:Puppeteer 爬取汽车相关网页 → 正则清洗 → LangChain 分块

向量处理:OpenAI Embedding API 向量化 → Supabase 存储

问答流程:用户提问 → 生成问题向量 → Supabase RPC 检索相似内容 → 构建提示词 → GPT-4o-mini 生成回答 → 流式返回前端

前端展示:React-Markdown 渲染 → 响应式 UI 展示

整个流程通过 LangChain 实现数据处理流水线,借助 Supabase 实现高效向量检索,利用 AI SDK 实现流畅的流式交互,形成了完整的 RAG 架构闭环,确保用户能获得基于 2025 年最新数据的汽车领域专业回答。

未来

由于这个项目还是雏形,项目链接我就先不放了,等再开发一段时间功能稳定了之后
会进行开源以及分享已上线的地址

讲讲对于这个项目 我未来想做的一些事情吧

  1. 增加更多不同网站的 车信息数据 让这个项目更全面 能参考的知识更多
  2. 优化页面展示,以及优化移动端体验,增加离线缓存功能
  3. 集成更多汽车领域专业工具,如购车计算器等

总结

这篇文章是我在 这个项目的 设计-开发-部署 之后又总结了一遍,然后随笔写的,主要是谈谈一些想法和技术,杂谈为主。不喜勿喷,如果觉得有可以讨论的地方:欢迎评论区留言;如果觉得对你有启发或者有帮助:欢迎点个赞呀😁😁😁