新手也能看懂的基于当前时代下agent智能体对于语义理解以及向量数据库简单运行流程+简要分析
当前智能体检索主要流程
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~3 个簇,只在这几个簇内部计算相似度,其他几万、几十万向量直接跳过。
② HNSW 分层导航小世界图索引
-
建索引阶段:构建多层网络图,相似向量之间互相连边;高层粗略跳转、底层精细查找;
-
检索阶段:从顶层快速跳到相似向量片区,顺着向量之间的连接链路查找,不用大范围扫描】。
新老NLP的底层基础逻辑
- 预处理:清洗、切分文本;
- 表征转换:文字转为机器能计算的数字(TF-IDF/Embedding);
- 下游任务:检索、分类、生成、问答、排序等。
向量数据库的分析部分
不同数据库的区别
- 传统数据库 / 关键词检索
追求精确匹配,但海量数据下逐条比对、遍历查询,耗时久、效率低;且只能匹配字面,理解不了语义
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(预处理工具) |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)