当前智能体检索主要流程

1.召回

向量召回(双塔结构)

问句、文档分开编码成两个独立向量,只算向量距离 / 相似度。

公式简化:

相似度 = 向量(问句) ↔ 向量(文档)

优点:提前缓存所有文档向量,检索快,适合全库扫

缺点:两个向量独立,看不到 “问句和文档之间的交互细节”,相似内容区分能力弱】

先通过 NLP 的 Embedding

【核心目标

输入:一段自然语言文本(问句、文档、句子)

输出:一串固定长度的浮点数数组(高维向量)

规则:语义越相近,最终向量在高维空间里距离越近。

完成这件事的工具 = Embedding 模型】 

把问句、文档转成向量,依靠向量数据库的专用索引,不用逐条全量比对,快速从海量数据里捞出一批「语义相近」的内容(初筛)。

2.空结果判断

不是系统自动判定 “有没有相似”,而是提前设好相似度阈值【阈值是人工预设 + 线上调优得来,不是随机取值;它是一条人为划定的 “合格线”,用来区分「有效相似」和「无效相似」,先靠样本统计定初始值,再靠线上效果反复微调;本质是人为划定一条匹配合格线

所有召回结果分数都低于阈值 → 直接丢弃,返回「无相关内容」;

达到阈值,才进入下一环节即(重排)。

3.二次重排

当召回出多条高分、高度相似的内容时,再用重排模型做精细语义甄别、重新排序,选出最贴合需求的内容。

NLP的分析部分

新旧文本预处理模块差异

    1. 传统旧技术
  • 中文分词(jieba/IK 分词)、停用词过滤、正则清洗、词性过滤
  • 人工同义词词典、自定义规则纠错
  • 通过词袋模型【把一句话里所有词语丢进一个袋子,完全丢掉语序、语法、上下文,只记录哪些词出现、出现多少次,维度等于全部词汇量,只能看字面重合,不懂语义、语序、同义词】来记录后进行匹配
    2. 现代 NLP 对应技术
  • Transformer 子词切分(Tokenizer),自动拆分字词、处理新词 / 生僻词
  • 大模型内置语义纠错、实体识别、意图识别,自动理解同义表达,不用手动维护词典
  • 使用Embedding 稠密语义向量【把整句话压缩成固定 768/1024 维小数数组,融合上下文语义,同义句、不同语序、近义词向量自动靠近】

简单agent的语义理解的基本逻辑

输入问题

NLP 处理层(感知输入层)

通过指代消解、分词、同义词扩展、BM25 检索、拼装 context

只负责把话处理成 LLM 能用的格式

LLM 理解层(智能体大脑)

读懂问题 + 读懂捞来的chunk + 组织回答

返回结果

传统 NLP 层的简要步骤

  • 文本清洗

去除乱码、特殊符号、空格、无效字符,正则过滤广告、无关内容;统一大小写 / 繁简转换。

  • 中文分词

基于词典 / CRF 切分句子为词语;英文直接按空格分割。

  • 基础过滤

去除停用词(的、了、是、啊)、无意义虚词;可选词性过滤(只保留名词、动词)。

  • 特征转化

文本转数字特征:词袋 BoW / TF-IDF 稀疏向量。

  • 下游任务

检索(BM25 打分【是指一种倒排索引体系

<正排索引

逻辑:文档 ID → 文档全部内容、包含哪些词

示例:文档 1:贝叶斯知识追踪、答题、概率

倒排索引

逻辑:词语(分词后的关键词) → 包含这个词的所有文档 ID 列表

优点:

  • 检索速度极快:只访问命中关键词的文档,规避全库扫描;
  • 完美适配关键词打分算法>下的关键词相关性打分算法,用来计算「用户查询词」和「文档」的匹配分数,分数越高代表文档和输入关键词越贴合】)、简单分类(朴素贝叶斯 / SVM)、关键词提取。

短板:不能处理代词指代

【一段文字、多轮对话里经常出现代词:它、他、这、该、此、上文、该项、前文,代词本身没有独立含义,机器必须找到这个代词指代前面哪一个名词 / 概念

浅层 NLP一般通过人工写大量语法规则硬匹配,0如:
·  语法就近原则:代词优先匹配同一句、上一句里距离最近的名词;

·  词性过滤:只匹配名词、专有名词,跳过动词 / 助词;

·  性别匹配:“他” 匹配男性名词、“它” 匹配物品 / 模型 / 事物】、歧义、同义语义、长上下文。

现代深度 NLP层的简要步骤

  • 文本清洗分段

清洗噪声,长文档切割成小段切片(Chunk),控制每段文本长度。

  • 子词 Tokenizer 【按文字出现频率拆成子片段,高频长片段保留、低频词拆小片段】编码

不用传统词语分词(如BM25或jieba),用 BPE/SentencePiece 做子词拆分,适配 Transformer 模型【是一种基于自注意力机制的神经网络模型架构,一次性把整段所有文字(全部 token)同时输入,每个字都能直接和全文所有字计算关联分数】

  • 浅层 NLP 增强(可选)

实体识别、指代消解【现在的深层的指代消解本质就是基于前面的Transformer 模型,把历史对话也就是完整上下文合并成一段序列,计算句子里代词与前文各个名词实体之间的语义关联权重,权重最高的实体,就是这个代词指代的内容】、关键词标注,丰富文本语义信息。

  • Embedding 向量化

送入预训练 Embedding 模型,生成稠密语义向量。

  • 入库存储

文本切片 + 对应向量(上一步对文本进行的对应的向量化后得到的向量)存入向量数据库,建立 ANN 索引(HNSW/IVF)

ANN 近似索引

提前给所有向量建好「快速导航结构」,检索时只对比一小部分候选向量,不用扫全库;通过聚类 / 图结构减少待计算向量数量,用微小精度损耗换取毫秒级快速语义召回

① IVF 倒排聚类索引

  1. 建索引阶段:把全部向量自动聚成上千个簇,每个簇有一个中心向量;所有向量归到离自己最近的簇;

  2. 检索阶段:查询向量先找最接近的 1~3 个簇,只在这几个簇内部计算相似度,其他几万、几十万向量直接跳过。

② HNSW 分层导航小世界图索引

  1. 建索引阶段:构建多层网络图,相似向量之间互相连边;高层粗略跳转、底层精细查找;

  2. 检索阶段:从顶层快速跳到相似向量片区,顺着向量之间的连接链路查找,不用大范围扫描】。

新老NLP的底层基础逻辑

  • 预处理:清洗、切分文本;
  • 表征转换:文字转为机器能计算的数字(TF-IDF/Embedding);
  • 下游任务:检索、分类、生成、问答、排序等。

向量数据库的分析部分

不同数据库的区别

  1. 传统数据库 / 关键词检索

追求精确匹配,但海量数据下逐条比对、遍历查询,耗时久、效率低;且只能匹配字面,理解不了语义

     2.向量数据库 + Embedding

靠专用索引做相似度快速检索,海量数据也能毫秒级出结果,速度极快;但它是 “模糊语义匹配”,只能选出一批大致相关的内容,没法区分细微差异,结果精度不足。

可能遇到的问题:
向量检索一定会返回 Top N 个结果(比如默认返回前 5、前 10),哪怕库里没有语义相近的数据,它也会硬挑出 “相对距离最近” 的向量,最终结果看着完全不搭边。

例子

库里全是手机、数码相关向量,你搜「红烧肉做法」。

所有向量和查询向量距离都很远,但系统依然选出距离最小的几条,结果自然驴唇不对马嘴。

主流解决办法

  • 设置相似度阈值(最常用)

限定一个分数 / 距离标准,低于阈值的结果直接丢弃。

比如用余弦相似度,设定阈值 0.6:

结果分数 ≥ 0.6:判定为相似,正常返回

全部结果都 < 0.6:判定无匹配内容,直接提示 “未找到相关信息”,不再展示无关数据。

  • 结合传统关键词过滤(混合检索)

先用分词、关键词做一轮粗筛,只在筛选后的小范围里做向量相似检索。

关键词完全不沾边的内容,提前就被过滤掉,不会进入向量比对环节。

例子:

比如查 “手机续航测评”,库里十几条内容余弦相似度都在 0.85 以上(高分区间),单纯靠相似度分数已经分不出优劣。

相似度普遍偏高意味着库里有多条内容和查询语义高度接近

主流处理方案

  • 二次重排【目标:只针对这几十条小范围数据,做逐句精细语义匹配,重新打分、排序,选出最优结果】

把向量检索出的高相似结果,送入 重排模型(Reranker)

问句 + 单条文档 拼接成一整段文本,丢进模型一起计算。

示例拼接格式:

[CLS] 你的问题? [SEP] 文档内容 [SEP]

模型会逐字、逐语义对比两者的匹配度,输出一个 0~1 的分数:

如: 分数越接近 1:匹配度越高;分数越接近 0:匹配度越低】

再打分排序。

作用:相比普通 Embedding,重排模型对细微语义差异分辨更强,能在 “高度相似” 的内容里,挑出最贴合提问意图的排在前面。

适用:RAG 知识库、语义搜索、AI 对话检索。

维度

传统数据库

向量检索

匹配方式

关键词精确匹配("transformer" ↔ "transformer")

语义匹配("深度学习" ↔ "神经网络")

同义词

需要手动维护同义词表

自动理解近义表达

跨语言

中文搜"拟合"匹配不到英文"overfitting"

同一向量空间,自动跨语言

反例

搜"Transformer 架构"匹配到 sklearn 的 FunctionTransformer

向量知道 Transformer(DL)≠ transformer(预处理工具)

更多推荐