掌柜智库项目 项目总结|RAG 全链路复盘与技术清单
完整复盘掌柜智库项目的 RAG 核心流程:准备阶段 7 个节点与检索阶段 7 个节点,汇总 LangGraph、Milvus、MCP、reranker 等核心技术点,并记录 tester/runner 打桩面试点与后续安排。
本篇要点
- 为什么用 RAG,以及 RAG 的基本准备 / 检索流程
- 项目准备阶段 7 个节点、检索阶段 7 个节点的作用与意义
- 项目核心技术点清单:技术点 + 关键用法
- 项目相关面试(tester / runner 的
patch打桩)、AI 生成页面的基本流程与后续安排
项目总览
项目阶段 ≈ Python 基础阶段,不用过多去理解,更多的去写、去敲——键盘敲烂,月薪过 3 万。
整篇总结分为五块:项目核心流程(RAG 扩展 + 准备 7 节点 + 检索 7 节点)、项目核心技术点清单、项目相关面试、使用 AI 生成页面的基本流程、后续安排。
1、项目核心流程
1.1 RAG 流程的扩展
1.1.1 为什么使用 RAG
现在的模型上下文窗口已经巨大了,为什么还要用 RAG?
- 模型窗口大小:每次真的使用都会消耗 token,内容过多反而不准确了。
- 模型某些方面有知识欠缺:不会的也会答,也就是幻觉。
1.1.2 RAG 的基本流程
1 | 准备 各种数据文件 -> text -> 嵌入式模型 -> 向量 -> |
1.2 项目准备阶段(7 个节点)
1.2.1 节点 1:node_entry
- 核心作用:导入文件类型的识别判断,跳转到对应合适的解析节点(依赖 state)。
- 意义:后续扩展文件类型时,需要扩展此节点的语法判断。
1.2.2 节点 2:node_pdf_to_md
- 核心作用:将 PDF 类型的数据转成 md 数据。表面的含义是——把非结构化的数据,转成结构化的文本。
- 意义:
ppt/word/excel/json/ 图片…… 扩展多了之后,统一转成结构化的文本(md / json)。
1.2.3 节点 3:node_md_img
- 核心作用:处理图片,识别图片的含义,进行图片地址的上传(http)。
- 意义:图片内容的识别。
**面试题:**你的 RAG 是做图文混合检索的么?
是——图片 ->[文本]-> 模型;图片 - http - 用户可视化显示……
- 意义:图片 / 表格(数据)-> 单独处理 -> 数据库存储 -> 问题 -> llm -> sql -> 数据库表格数据查询,也就是自然语言处理数据库的数据检索(问数)。
1.2.4 节点 4:node_document_split
- 核心作用:将 document 切成合理的 chunk。
- 意义:避免过多的内容给到模型,干扰模型的回答。
- 意义:目标是最合适的 chunk 送给最合适的问题。
- 原则:
- 语义优先。
#标题、法律条件、财报、对话。 - 确保大小合适。500 - 1200,需要考虑嵌入式模型、重排序模型大小、文件类型。
- 边界清晰,保持合理的 overlap。
- 保留可追溯的元数据:
item_name、title等。
项目切割参数:400 / 600 / 1000。
1.2.5 节点 5:node_item_name_recognition
- 核心作用:主体识别,小范围确认搜索对应的文档。
- 意义:锁定范围,
item_name/file_title/ 时间。
1.2.6 节点 6:chunks 的向量化
对切好的 chunks 做向量化处理。
1.2.7 节点 7:chunks 的向量存储
将向量结果写入向量库,供检索阶段使用。
1.3 项目检索阶段(7 个节点)
1.3.1 节点 1:node_item_name_confirm
- 核心作用:item_name 意图识别和问题重写。
- 意义(问题重写):用户的问题往往口语化、非专业化、带代词,直接进行向量查询会结果不存在;因此要做问题重写标准化,明确的主体、标准的提问,避免过多的口语。
- 意义(item_name):缩小范围。通过 llm - milvus 做置信度识别,阈值
0.7/0.6。 - 阈值说明:
0.7?满分1-> 满分0.2……
1.3.2 节点 2:召回 1 —— 问题向量检索
- 缺点:问题的语义单一,检索命中降低(召回率低)。
1.3.3 节点 3:召回 2 —— 问题假设性答案检索
- 优点:丰富检索语义,提高命中率和召回率。
- 缺点:文档类型极其隐私,因此通过降低权重减少影响。
1.3.4 节点 4:召回 3 —— MCP 网络检索
- 优点:弥补单一向量库的内容缺失,是对文档内容的一种补充。
1.3.5 节点 5:node_rrf
自己融合,同源,融合召回 1 与召回 2;有参照、排名 + 权重。
1.3.6 节点 6:node_reranker
- 凑齐
[[问题, 答案]]-> 过长需要压缩,512 - 4。 - 打分。
- 动态 topk。
1.3.7 节点 7:node_answer
- 之前 answer。
- 本次模型 answer。
- 正则提取
image_urls。
2、项目核心技术点
2.1 RAG 思想
RAG 的整体思想:准备阶段的向量化 + 存储,检索阶段的多路召回 + 融合 + 重排 + 生成。
2.2 LangGraph
state 定义、图定义、图测试、图执行、state 并发问题。
2.3 LangChain
模型加载 init_chat_model、提示词 Message、Chains、执行模型、解析器……
**遗憾:**没有智能体,也没有递归切割器。
2.4 MinerU
申请 / 上传 / 解析 / 下载。
2.5 HTTP 协议
HTTP 协议请求和响应报文、请求方式、响应状态码。
2.6 requests
传递参数 requests.get / post(url、headers、json、param、data、timeout)。
1 | # 响应对象常用属性 / 方法 |
2.7 Path / shutil
1 | Path 属性: name stem suffix parent parents |
2.8 MinIO
minio 安装、minio api。MinioClient(url, 账号, 密码, 是否 https);创建桶、设置权限、查询文件(prefix=,/ 不能 [:1])、删除文件、上传文件、拼接文件访问地址。
2.9 视觉模型
关键在于传递数据格式问题。
1 | base64.b64encode(图片字节数据).decode("utf-8") |
2.10 正则使用
match、search、findall、finditer、sub(..)。
2.11 guess_type
1 | guess_type(name)[0] |
2.12 Milvus
- 创建集合:schema、field(数据类型)、index(多图
HNSW、全部检索FLAT、分桶检索IVF_F...),创建集合 /has查看集合。 - 插入数据
insert(data = [])。 - 删除数据
delete(filter="")。 - 混合检索。
2.13 bge-m3
加载方式:官方 | milvus;上下文 8192;识别 130 种语言;批量向量化。
2.14 MongoDB
非关系型数据,可以存储关系数据(BSON),存储运行内存。
安装之后常用命令:
1 | 使用 use 库 |
另外还涉及 pymongo 的使用……
2.15 MCP
- 对 MCP 的理解:
tool/resources/prompt共享的协议,提升 agent 智能体的能力。 - 类似:skill -> 提示词 + 代码。
- MCP 协议:
stdio、sse、streamable http。 - 使用方式(适配器方式):
- langchain ->
create_agent(tools) - openai ->
open Agent| 直接在图中调用connect()、call_tool()、cleanup()
- langchain ->
2.16 RRF
融合算法 -> 同源、有参照物 -> rrf + 排名 + 权重。
2.17 reranker
打分 + 动态 topk。
2.18 FastAPI
路径设计、接收参数、响应数据、异步调用。
2.19 SSE
后端的流式 + 前端技术 EventSource。
3、项目相关面试(非重点)
说明:测试性能时,有些位置指定了方法有固定的返回值,你的方法名一定要对应上即可。
3.1 tester 第 188 行
item_name 识别固定了:
1 | with patch("app.rag.import_.item_name_service.recognize_item_name_by_chunks [你的方法]", return_value=TEST_ITEM_NAME): |
假设性提问:问题 -> 假设性答案。
3.2 runner 第 261 行
1 | with patch( |
4、使用 AI 生成页面的基本流程
- 明确需求和功能。
- 设计接口(api):url、method、参数、响应。
- 接口和需求文档设计页面的原型图。
- 原型图、接口文档、需求文档设计项目页面(明确添加对应接口的交互流程)。
- 样式调整即可。
举个例子:进销存系统 = 进货 + 销售,就好比你家有个大超市——胖东来。
5、后续安排
- 今晚思考项目优化的点(参考发的内容)。
- 项目没写完 -> 写项目。
- 项目一遍写完 -> 设计需求。
