一、什么是 RAG?

AG(Retrieval-Augmented Generation,检索增强生成)是一种让大语言模型(LLM)具备外部知识获取能力的技术。

简单来说:

RAG = 检索(Retrieval) + 增强(Augmented) + 生成(Generation)

它的核心思想:

先从外部知识库中找到相关信息,再把这些信息提供给大模型,让大模型基于这些信息生成答案。

举个例子:

你问 ChatGPT:

"我们公司机器人 SDK 的 TCP 通信协议是什么?"

如果没有 RAG:

用户问题
    |
    ↓
LLM
    |
    ↓
根据训练数据猜答案

LLM 不知道你的公司 SDK,所以可能:

编造答案(幻觉)

给出泛化回答

如果有 RAG:

用户问题
       |
       ↓
检索知识库
       |
       ↓
找到 SDK 文档
       |
       ↓
把文档片段塞给 LLM
       |
       ↓
LLM 根据文档回答

回答可能:

"RobotSDK 使用 TCP 长连接通信,消息采用长度前缀 JSON 协议,客户端通过 request/response future 管理异步调用..."

这就是 RAG。

二、为什么需要 RAG?

LLM 本身有三个问题:

2.1 知识有限

LLM 的知识来自训练数据。

例如:

GPT训练数据
      |
      |
      ↓
模型参数

训练结束以后:

不知道你的私人文档

不知道公司代码

不知道最新数据

例如:

2026年的机器人SDK文档
          |
          |
          X
        LLM不知道

2.2 容易产生幻觉

LLM 本质:

根据概率生成最可能的文本

比如问:

"我们的Robot类有哪些接口?"

模型可能:

Robot.move()
Robot.stop()
Robot.navigate()
Robot.fly()

最后一个可能根本不存在。

2.3 重新训练成本太高

一种方式:

公司文档
    |
    ↓
重新训练LLM

问题:

成本巨大

周期长

模型容易遗忘旧知识

RAG:

公司文档
    |
    ↓
知识库
    |
    ↓
查询时检索

成本低很多。

三、RAG完整工作流程(离线阶段

RAG分两个阶段:

  1. 知识库构建阶段(Offline)
  2. 用户查询阶段(Online)

1、知识库构建阶段

Step 1:收集数据

来源:

PDF
Word
Markdown
网页
数据库
代码仓库
日志
API文档

例如:

机器人公司:

RobotSDK/
 |
 ├── README.md
 ├── TCP协议.md
 ├── API文档.pdf
 ├── config说明.md
 └── source code

Step 2:文档解析(Document Parsing)

把各种格式转换成文本。

例如:

PDF:

Robot SDK支持TCP通信
消息格式:
{
 seq:
 command:
 payload:
}

转换:

Document:

"Robot SDK支持TCP通信..."

Step 3:文本切分(Chunking)

为什么切分?

因为:

LLM上下文有限。

例如:

一本1000页文档:

100万token

不能直接送给LLM。

所以切:

原文

--------------------------------
Robot SDK通信协议...
--------------------------------
导航模块...
--------------------------------
电量模块...
--------------------------------

Chunk1
Chunk2
Chunk3

通常:

chunk size:
300~1000 tokens

overlap:
50~200 tokens

Step 4:Embedding向量化

这是RAG最核心的一步。

文本:

Robot支持TCP长连接

输入Embedding模型:

text
 |
 |
 ↓

Embedding Model

 |
 ↓

[0.12,0.54,-0.23,...]
 

得到:

文本的数学表示

Step 5:存入向量数据库

保存:

Vector DB


id:

001


vector:

[0.123,0.55,...]


text:

Robot SDK使用TCP协议


metadata:

{
 source:"tcp.md",
 page:3
}
常见:

数据库 特点
Milvus 大规模向量
FAISS 本地快速
Chroma 轻量
Pinecone 云服务
Weaviate 企业

2、用户查询阶段(在线)

用户:

"RobotSDK如何发送控制指令?"

Step 1:Query理解

原始:

RobotSDK如何发送控制指令?

可能经过:

拼写修正

改写

意图识别

Step 2:Query Embedding

同样:

问题

 ↓

Embedding模型

 ↓


[0.11,0.53,...]
 

Step 3:向量检索

计算:

问题向量

数据库中的文档向量

Step 4:Rerank(重排序)

为什么需要?

向量搜索只是粗筛。

例如:

Top10:

1 TCP协议
2 MQTT介绍
3 ROS通信
4 HTTP协议
5 Robot API
...

但是:

真正相关:

TCP协议
Robot API

所以使用:

Reranker模型。

Step 5:Prompt增强

把检索结果塞入Prompt。

原始:

用户:
Robot怎么发送控制指令?

变成:

System:

你是机器人SDK专家。


参考资料:

------
Robot SDK command采用TCP JSON协议

格式:

{
command:"move"
payload:{}
}

------


User:

Robot怎么发送控制指令?

Step 6:LLM生成答案

LLM:

输入:

问题
+
相关知识

输出:

Robot SDK通过TCP连接发送JSON command消息。
客户端调用sendCommand接口,
生成command字段并发送到机器人。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐