28岁,从运营商外包学习AI的第90天,我做出了第一个能用的RAG系统

0 阅读8分钟

cgi-bin_mmwebwx-bin_webwxgetmsgimg_&MsgID=4630244758569298314&skey=@crypt_6e09037a_cce99bf27174aa5710156854375bbd16&mmweb_appid=wx_webfilehelper.jpg

我是运营商门店的驻店专员,说白了就是卖套餐办业务。没有技术背景,Python 是今年 3 月在网吧学的。

90 天后,我搭了一个电信套餐智能问答系统,部署在云服务器上,评测准确率 98.7%,零幻觉。

这篇文章记录全过程:踩了什么坑,怎么爬出来的,以及一个非技术人员搞 AI 到底行不行。


为什么要做这个

今年 3 月,我调到新门店。店员们都没接触过购机优惠和套餐业务,平时也忙,凑不到一起培训。

运营商的套餐体系很复杂——不同档位的流量、通话、副卡规则、宽带权益、橙分期补贴,每个维度都不一样。新人问老员工,老员工也记不全,翻文档又慢。

我想:能不能搞个"智能客服",店员直接问,系统自动答?

当时我刚考完 CAIE(注册人工智能工程师),学了一堆概念,但一行代码都没写过


第一阶段:从零开始(第1-30天)

Day 1:Chroma Studio + 8G 内存

3 月 20 日,我下载了 Cherry Studio——一个可视化的 RAG 搭建工具。用 Ollama 部署了 BGE-M3 嵌入模型,配了 DeepSeek R1,把套餐文档导进去。

第一次对话测试:

CPU 风扇嗡嗡响,内存占用 99%,等了好几分钟,返回一串红色错误——文档没上传成功。

折腾半小时,文档终于嵌入进去了。再问一个问题,又等了十几分钟。8G 内存的电脑跑 BGE-M3,就是这个效果。

但答案是对的。

那一刻我知道方向对了。

平台选型:踩了五个坑

接下来就是不停地试错:

====平台========= 结果======== 问题====
Cherry Studio能用但太简单定制化程度低,没法加业务逻辑
腾讯云 ADP试用额度烧完幻觉严重,误操作把额度用光了
AnythingLLM安装成功模型调用不稳定,经常超时
Dify没搞成在网吧电脑部署,重启就没了
LangChain最终选择自由度高,学习曲线陡,但可控

最终选 LangChain,不是因为它最好用,而是因为它最灵活——我可以控制检索策略、Prompt 模板、模型调用的每一步。

最崩溃的一天:编码问题

TXT 文档是 ANSI 编码,嵌入模型只认 UTF-8。

我试了 PowerShell 命令(中文乱码),Python 脚本(网吧电脑跑不了),VS Code 插件(内容被清空)……

最后发现要两步转换:先转带 BOM 的 UTF-8,再转无 BOM 的。

就这么一个小问题,折腾了大半天。后来才明白:数据清洗是 RAG 最基础也最容易被忽视的环节。

网吧做开发

我在网吧的电脑上搞这些。下载 Ollama 要几个小时(国外节点),Docker 要重启才能用(重启就没了),模型文件拷到移动硬盘结果丢失……

后来我学聪明了:在家先下好整个 ~/.ollama 目录,拷到移动硬盘带去网吧。

网吧做开发,每一步都是在跟环境搏斗。


转折点:上云(第30-45天)

本地搞不下去了。我租了阿里云 ECS,4 核 8G,把环境迁上去。

世界清净了:

  • 不用担心电脑重启
  • 不用跟网吧网速较劲
  • 24 小时在线

在云服务器上,用 LangChain + ChromaDB + SiliconFlow API 重新搭建了 RAG 系统,这才算真正走上了正轨。


性能优化:120秒 → 4秒(第45-60天)

系统能跑了,但慢得离谱——120 秒才出结果。

瓶颈分析:LLM API 调用占了 80% 的时间,原始工作流调了 3 次 LLM(意图识别 → 信息提取 → 生成回复)。

优化步骤

第一步:减少 LLM 调用

把 3 次调用合并成 1 次,直接让 LLM 根据检索结果生成回答。

120s → 25s

第二步:换模型

从 DeepSeek-V4-Flash(25 秒/次)换成 GLM-4-9B(3 秒/次)。客服场景不需要最强模型,够用就行。

25s → 4s

第三步:加 Reranker

用 BGE-Reranker-v2-M3 对检索结果重排序,召回率提升 20-30%。

第四步:优化 Prompt

告诉 LLM"不要编造信息,文档里没有就说不知道"。幻觉率从 30% 降到 10%。

到这一步,纯 RAG 版本(rag-from-zero)基本能用了。我把它集成到钉钉,店员可以直接在群里 @机器人 问问题。


第二阶段:从 RAG 到 Agent(第60-90天)

纯 RAG 能用了,但有两个硬伤:

  1. 对比型查询效果差——"99 元和 129 元套餐有什么区别",系统只能分别查两个套餐,没法做结构化对比
  2. 多跳推理不行——"办 2 张副卡后全家多少流量",需要先查主卡流量、再查副卡规则、再算总和

于是我把它升级成 dx_agent——一个带 Agent 路由的智能问答系统。

核心升级

查询进来
  ↓
意图分类器(simple / comparison / complex)
  ↓
├── simple → 快速路径(直接检索 + 回答,1.8s)
├── comparison → 对比路径(per-tier 检索 + 表格展示,4.4s)
└── complex → Agent 路径(Tool Calling,LLM 自主决定查什么)

关键改动:

改动效果
单一向量检索 → 向量 + BM25 混合检索召回率从 70% 提升到 85%+
无路由 → 查询分类路由简单查询省 60% token
无状态 → 会话历史管理支持多轮对话
一次性返回 → SSE 流式输出用户体验提升
无缓存 → LRU + TTL 缓存重复查询秒回
无对比 → per-tier 独立检索 + 表格对比查询满分率 100%

Agent 路由的实现

用 LangChain 的 Tool Calling,给 LLM 注册了三个工具:

tools = [
    Tool("query_plan_info", search_knowledge_base, "查询套餐详情"),
    Tool("compare_plans", compare_plans, "对比多个套餐"),
    Tool("calculate", calculate, "计算费用/流量"),
]

LLM 自己决定什么时候查知识库、什么时候用计算器。对于"办 2 张副卡后全家多少流量"这种问题,它会:

  1. 先调 query_plan_info 查主卡套餐的流量和副卡规则
  2. 再调 calculate 算总流量
  3. 最后组织语言回答

最终评测结果

30 道真实业务题目,覆盖单点查询、套餐对比、复杂计算三种类型:

指标结果
评测题目30 题
成功率30/30(100%)
综合得分148/150 星(98.7%)
幻觉率0%
平均响应3.0s
最快1.4s
最慢9.9s

其中对比型查询("99 元和 129 元套餐区别")从纯 RAG 版本的 40% 满分率,提升到 100%


两个版本的对比

维度rag-from-zero(V1)dx_agent(V2)
检索方式单一向量检索向量 + BM25 混合检索
路由无,全部走 RAG查询分类 → 三条路径
简单查询响应4.0s1.8s(提升 55%)
对比查询不支持4.4s,表格展示
多轮对话无状态会话历史管理
输出方式一次性返回SSE 流式 + 打字机效果
缓存简单缓存LRU + TTL + 统计
准确率85%+98.7%

我学到的 5 件事

1. RAG 的灵魂在检索,不在搭建

搭个能跑的 RAG 很快,但让它"好用"需要花 3 倍以上的时间调优检索策略。分块大小、相似度阈值、Reranker 配置——这些细节决定了系统的上限。

2. 数据质量 > 一切

垃圾数据进去,垃圾结果出来。文档编码、分块大小、信息冲突——这些"脏活"决定了系统的上限。我花了一整天解决编码问题,但这比换十个模型都有用。

3. 选对模型比选贵模型重要

客服场景用 GLM-4-9B(3 秒)比 DeepSeek-V4-Flash(25 秒)更合适,牺牲 5% 准确率换来 85% 的速度提升。够用就好,不要追最强。

4. AI 是工具,不是魔法

它没有自主意识,你不给指令它就不动。它会"幻觉",会"忘记"你给过的知识。掌控程度决定效果。

5. 没有技术背景不是障碍

我做的是销售。从 Cherry Studio 到 LangChain,从网吧电脑到云服务器,从 120 秒到 1.8 秒——每一步都是边学边做。

你不需要会写底层框架,你需要的是理解业务问题,然后找到合适的工具去解决它。


技术栈总结

组件选型
框架LangChain + LangGraph
向量数据库ChromaDB
嵌入模型BAAI/bge-large-zh-v1.5
RerankerBAAI/bge-reranker-v2-m3
LLMGLM-4-32B-0414(SiliconFlow API)
部署阿里云 ECS + FastAPI
集成钉钉机器人 / Web UI

写在最后

这个项目从 3 月 20 日开始,到现在 90 天。中间经历了无数次失败、换方案、从头再来。

有人说"非技术人员搞不了 AI",我觉得不对。你不需要会写底层框架,你需要的是理解业务问题,然后找到合适的工具去解决它。

RAG 不是终点。下一步我计划把它做成 MCP Server,做成可以培训店员的智能顾问。

路还长,但方向对了。


作者:关彧 | GitHub: Guanyu-AI-pro

项目地址:rag-from-zero