跳到主要内容

不上 RAG,是这个汽修项目里最对的一个决定

书签客
书签客

· 阅读约 4 分钟

这条在讲 Alex Georgiev 发在 DEV Community 的 BMW Repair Workshop——朋友自己修一台 E90 325i,他搭个 AI 查修车信息。我点开的时候没抱期待,又一个拿 LLM 给垂直领域套壳的东西。一般节奏是:喂官方手册、上 RAG、做漂亮架构图。他开工大概一小时就把 RAG 扔了。

真正让我开始认真看的是他写的那段:朋友修车慢的不是不会拧,是信息散。扭矩值在旧论坛帖里,零件号在另一个标签页,视频教程前面一大段闲聊。这个我太有感受了,不是修车,随便哪个垂直领域只要被社区内容喂过几年,最后都长这样。他给站点首批做了 20 个维修流程加 7 篇参考指南,把扭矩值和零件号统一塞表格里,而不是埋在叙述里。做法老派,但老派有老派的好。

放弃 RAG 那段,我读到这就不犹豫了。作者原想把 Bentley 手册、BMW TIS 喂进流水线,但那是商业版权内容。网上流传的镜像、分章节拷贝、「只提取事实」他都没碰。修车 AI 这圈里从盗版手册扒语料的不少,愿意在文章里写「这些来源都不授权,我没用」的,少。光这一条就值得点。

接着他算账。整个知识库约 1.1 万 token,能完整放进单次提示词。不建向量库,每次提问把全部 27 条条目一起送给模型,单次成本约 0.002 美元。理由不是「RAG 不好」,是「避免分块检索取错片段还自信作答」。小项目硬上 RAG,很多是为了架构图好看,不是为答得准。这个判断我认。

系统提示词那段才是全篇最见功力的地方。它要求模型只依据给定条目回答,不得虚构扭矩值、零件号或步骤,保留各条目的核验警告和安全提示,并说明答案出自哪个流程。被问到大修自动变速箱,模型会答「没有对应流程」,然后指向最接近的条目。作者说这种拒答是整个项目最重要的行为。

这跟 RAG 那件事是一条线。不搞检索,上下文就 1.1 万 token 全量塞,模型看过什么、没看过什么清清楚楚。分块检索做不好,模型取错片段还能自信作答;全量塞进去,拒答就有了依据——它手头就是那 27 条,没有就是没有。

可检查性我读得来回看了两遍。站点纯静态,27 个 Markdown 文件经一个零依赖 Node 脚本编译成客户端索引;Ask 走 Cloudflare Worker 转发到 DigitalOcean 的 Gemma 推理。作者说模型行为异常时,能完整读到产生那个回答的全部输入——27 个 md 和一个 160 行 Worker 里的系统提示词。换模型只需改一行配置。这条我没法跑,只能读,就把 Worker 那段多读了几遍。

他把自己几个失误也写了:XSS 转义漏了引号、误以为 CORS 能保护 API 额度、猜错模型 ID 耗掉二十分钟。CORS 那个最典型,稍微用过 curl 的都知道浏览器限制拦不住脚本,但不少人是把 CORS 当防火墙用的。这些不藏,项目反而更可信。

朋友那部分我觉得比产品复盘还实在。作者原本想做语音输入,逻辑是修车时手脏不好戳手机。结果朋友直接拒绝:长答案听过容易忘,文字能一直留在屏幕。作者写「我差点做错方向」,语音从路线图删了。读到这里我愣了一下——拍脑袋想「手脏所以该语音」,不如问一句实际用的人。很多产品复盘绕半天都绕不到这句话。

还有一处朋友的角色特别关键。作者把网站发给正在修车的朋友,问「里面有没有错」。朋友核对自己做过的项目没发现冲突。作者马上写清楚:这是「有经验的技师通读后没发现问题」,不是逐行审过文档。这个区别很多人要么不提,要么故意混过去。

局限也摆出来了。没有 VIN 解码,横跨多个发动机版本的底盘没法把参数收窄到具体配置;没有实拍零件照片,因为只找到一张授权明确的发动机照片,作者「不愿意在 BMW 刹车页面上放别的车的通用库存图」。两个都轴,但轴得对。

不点链接也能带走的一句:小知识库先算 token,能全量塞进上下文就别急着上 RAG。可检查性比架构图值钱,模型在该拒答时闭嘴,人们才信它在给出扭矩值时没瞎编。每个扭矩值旁边那句「去 RealOEM 或经销商核验」,比模型任何自信都值得留。

出处是 Alex Georgiev,DEV Community 上的原文。这条不全是讲 RAG 的,但我觉得放弃 RAG 是他做对的第一件事——后面那些可检查、可拒答,都是从这个决定里长出来的。

书签客
书签客

只推真读过的、顺手跑个实验贴完整记录——link-blog 策展 + 实验笔记。

查看主页 →