很多开发者将向量数据库等同于向量索引与向量存储,却忽略向量函数是整个链路的前置底座。向量数据库本身只负责向量存储、索引构建与近似检索,而原始文本、图片等非结构化数据向向量的转换、距离度量、归一化、多路融合计算、重排打分,全部依赖向量函数完成。向量函数的设计质量,直接决定RAG语义召回精度、检索时延、结果相关性。
一、为什么向量函数是向量数据库的前置核心
向量数据库不能直接接收原始文本,它只识别浮点数组格式的高维向量。完整语义检索链路:原始数据→向量函数处理→向量入库;查询问句→向量函数处理→向量检索→函数二次计算打分→返回业务结果。
在早期实践中,向量化、距离计算全部放在业务代码完成:业务侧调用嵌入模型生成向量,再传入向量数据库做ANN检索;检索完成后,业务层再完成距离换算、重排、过滤。这种模式下,业务代码臃肿,数据写入与查询链路割裂,参数散落在各个服务,调优、排查问题难度高。
新一代向量数据库普遍内置向量函数(Function)机制,把向量化、相似度计算、稀疏向量生成、结果重排下沉至数据库内部执行,实现传入原始文本即可完成写入与查询。向量函数相当于向量数据库的计算引擎,没有向量函数,向量数据库只是一个只能存储数组的容器,无法独立完成语义检索。
很多项目RAG效果差,优先排查不是索引参数,而是向量函数:嵌入函数是否匹配领域、距离度量函数选择是否合理、归一化逻辑是否缺失、多路检索融合函数配置是否错位。
二、向量函数的定义与主要分类
向量函数,是运行在向量数据库内部、针对原始数据或向量数据执行转换、计算、打分、过滤的一组可配置逻辑集合,分为转换类函数、度量计算函数、融合重排函数三大类。
1.转换类向量函数:原始数据到向量
核心职责:非结构化数据转为向量,分为稠密向量函数、稀疏向量函数。
1)稠密嵌入函数(Embedding Function)
对接嵌入模型API或本地模型,输入原始文本,输出固定维度稠密向量。写入集合时传入文本,函数自动调用模型生成向量并写入向量字段;查询时直接传入query文本,内部自动完成向量化,业务侧不再感知向量数组。典型场景:标准文档、业务知识库语义向量化。
关键点:必须保证写入与查询使用同一套嵌入函数,模型、维度、归一化配置完全一致,否则向量空间错位,检索完全失效。
2)稀疏向量函数(BM25 Function)
基于BM25算法,输入原始文本,自动分词、计算词项权重,生成稀疏向量。用于关键词检索,可和稠密向量做混合检索。不需要外部embedding模型,数据库内部完成分词与权重计算,实现关键词+语义的多路召回,在标准知识库场景可以显著提升专有名词、标准编号的召回能力。
=边界区分:嵌入模型是AI模型,向量函数是数据库层调用、封装模型的执行逻辑;模型负责语义编码,函数负责调用、预处理、异常处理、数据落库。
2.度量计算函数:向量之间相似度运算
接收两组向量,输出距离或相似度分数,是排序过滤的依据,常用三类函数:
- 余弦相似度Cosine:优先用于文本嵌入,关注向量方向,不受向量模长影响,绝大多数知识库RAG首选;
- 内积IP:要求向量提前归一化,计算速度快;
- 欧氏距离L2:侧重向量空间绝对距离,多用于图像特征检索,文本场景较少使用。
向量数据库索引需要和度量函数绑定,索引构建时选定度量方式,检索阶段调用对应度量函数完成打分。很多实践误区:索引配置余弦,查询时误用L2距离函数,导致排序结果完全错乱。
3.融合与重排函数:多路结果二次加工
多路召回(稠密向量+BM25关键词)完成粗召回之后,向量函数负责结果融合、打分、重排。
1)加权融合函数:对稠密向量分数、BM25分数配置权重,加权计算综合得分,实现语义与关键词能力平衡;
2)MMR最大边际相关性函数:在保证相关性前提下降低结果重复度,避免多条文档高度雷同,适合标准文档检索,减少重复条文;
3)过滤函数:基于向量得分阈值做结果裁剪,过滤相似度过低的噪声结果,减少大模型幻觉来源。
三、向量函数完整构建逻辑
向量函数不是简单的模型调用封装,完整构建分为五层逻辑:输入层、预处理层、模型调用层、后处理层、执行调度层。
1.输入层:接入原始业务数据
支持原始文本、JSON字段,支持字段绑定:将集合内某个文本字段直接绑定向量函数,写入数据只需要写入文本,不需要手动传入vector数组。同时支持查询侧输入原始问句,由函数完成查询向量化。
2.预处理层:领域适配与数据清洗
这一层往往被忽略,却直接影响领域知识库效果。内置逻辑包括:文本截断、超长分片、特殊字符过滤、标准文档专有符号处理、空白文本异常拦截。
例如标准数字化场景,标准文本包含条款编号、图表标记,预处理函数需要避免把标记噪声大量输入嵌入模型,否则向量质量下降。
3.模型调用层:模型对接与容错
- 支持对接远程Embedding API,也支持本地部署模型;
- 实现批量调用、限流、重试、超时熔断;
- 异常兜底:模型调用失败时的降级逻辑,避免单条脏数据导致整批写入失败。
=重要约束:写入链路、查询链路必须复用同一套函数配置,模型版本、截断长度、参数不能出现差异。
4.后处理层:向量归一化、校验
模型输出向量之后执行:向量归一化、维度校验、非法值清洗(NaN、无穷值过滤)。如果选择内积作为度量,归一化必须放在向量函数内部统一执行,不能部分向量归一、部分不归一,会造成打分错乱。
处理完成之后,向量写入集合的向量字段,和主键、元数据绑定存储。
5.执行调度层:写入链路 / 查询链路
1)写入链路:业务写入原始文本 → 向量函数流水线执行 → 生成向量落库 → 构建索引;
2)查询链路:业务传入查询文本 → 向量函数生成查询向量 → ANN索引粗召回 → 度量函数打分 → 融合重排函数处理 → 返回业务ID与分数。
四、向量函数的典型落地误区
误区1:向量数据库=直接做语义检索
向量数据库只提供存储索引能力,语义能力全部来自向量函数封装的嵌入模型。更换嵌入模型,不需要改动向量数据库,只需要重新配置向量函数,全量重新生成向量。
误区2:写入和查询使用两套配置
业务侧写入用A模型,查询时向量数据库内置函数调用B模型,向量空间不一致,检索结果完全不可用,是线上高频故障来源。
误区3:忽略预处理,直接投喂原始脏文本
标准文档、工单文本含有大量特殊标记、换行、图表占位符,不经过预处理直接向量化,向量混入噪声,降低召回精度。预处理逻辑应当封装在向量函数内部,统一生效于写入与查询。
误区4:索引与度量函数不匹配
构建索引选定余弦相似度,查询使用欧氏距离函数计算,索引加速失效,排序逻辑错乱。
误区5:把重排交给大模型完成
粗召回几十条结果全部送入LLM重排,成本高、时延大。优先使用向量层MMR、加权融合函数完成第一轮筛选,再送入大模型。
五、面向标准知识库场景的向量函数实践原则
在标准数字化项目中,知识库存在大量标准编号、条款、专有术语,向量函数配置遵循如下原则:
1.双函数搭配:同时启用稠密嵌入函数+BM25稀疏向量函数,做混合检索;稠密向量抓语义关联,BM25保障标准号、专有名词精准命中;
2.预处理定制化:在向量函数预处理层适配标准文本,过滤图表标记,控制分片长度,适配标准条款长短不一的特点;
3.度量优先选择余弦相似度,向量函数内部开启归一化;
4.开启MMR重排函数,降低标准条文重复;设置最低相似度阈值,过滤低相关噪声;
5.配置可观测:记录向量函数调用状态、截断统计、异常计数,方便定位召回变差的根因。
六、总结
向量数据库解决的是海量向量的存储、索引、高速近似检索;向量函数解决的是原始业务数据到向量的全链路计算、转换、打分融合,是衔接业务原始数据与向量数据库之间的关键前置底座。
RAG项目优化,不能只关注索引调参,应当优先审视向量函数整套流水线:预处理逻辑、嵌入模型配置、归一化、度量函数、多路融合策略。尤其垂直领域知识库(如标准语义知识库),向量函数的领域适配,往往比索引调优带来更大的精度收益。只有理解向量函数的构建逻辑,才能完整打通从原始文档到语义检索的完整链路。