微信扫码
添加专属顾问
同样RAG换Embedding模型,检索准确率从62%飙升至89%!揭秘Embedding与向量数据库如何决定RAG检索天花板。 核心内容: 1. Embedding的核心作用及案例效果:换模型后检索准确率的飞跃 2. Embedding原理:文本转向量及向量空间语义距离特性 3. 主流Embedding模型对比与中文项目推荐(不同模型特点、适用场景)
前两篇讲了RAG的核心原理和文档切分,这篇进入RAG的"心脏"——Embedding和向量数据库。
你可能觉得Embedding不就是调个API把文本转成向量嘛,选哪个都差不多。我之前也是这么想的,直到我在一个金融知识库项目里换了Embedding模型,检索准确率直接从62%涨到89%。同样的切分、同样的提示词、同样的模型,就换了个Embedding,效果天差地别。
Embedding模型决定了你的向量空间长什么样,向量数据库决定了你能不能高效地在这个空间里搜索。 这两个选对了,检索的天花板才够高。
Embedding就是把文本映射成一组数字(向量),语义相近的文本在向量空间里距离近,语义远的距离远。
"苹果手机" → [0.12, -0.34, 0.56, ...] ← 跟下面距离近
"iPhone" → [0.15, -0.31, 0.52, ...] ← 跟上面距离近
"水果店" → [-0.23, 0.45, -0.12, ...] ← 跟上面距离远
RAG的检索就是:把用户问题转成向量,在向量空间里找距离最近的文档向量。Embedding模型的质量直接决定了"距离近"是否等于"语义相关"。
| 中文首选推荐 | ||||
中文项目无脑选bge-m3。原因:
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
embedding = HuggingFaceBgeEmbeddings(
model_name="BAAI/bge-m3",
model_kwargs={"device": "cuda"}, # 有GPU用GPU,没有用cpu
encode_kwargs={"normalize_embeddings": True}, # 归一化,余弦相似度
)
英文项目或追求极致方便:用OpenAI的text-embedding-3-small,调API就行。
from langchain_openai import OpenAIEmbeddings
embedding = OpenAIEmbeddings(model="text-embedding-3-small")
| Chroma | ||||
| FAISS | ||||
| Milvus | ||||
| Qdrant | ||||
| Weaviate | ||||
| pgvector |
开发阶段:Chroma或FAISS
# Chroma:最简单
from langchain_community.vectorstores import Chroma
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embedding,
persist_directory="./chroma_db",
)
# FAISS:最快
from langchain_community.vectorstores import FAISS
vectorstore = FAISS.from_documents(chunks, embedding)
vectorstore.save_local("./faiss_db")
生产环境:Milvus或Qdrant
# Milvus
from langchain_community.vectorstores import Milvus
vectorstore = Milvus.from_documents(
documents=chunks,
embedding=embedding,
connection_args={"host": "localhost", "port": "19530"},
collection_name="knowledge_base",
)
已有PostgreSQL:pgvector,不用额外部署新服务
Java类比:向量数据库选型就像你选缓存方案——开发阶段用HashMap或Caffeine(Chroma/FAISS),生产环境上Redis集群(Milvus/Qdrant),如果已经有了Redis就不折腾别的(pgvector)。别一上来就上Milvus,就像你不会在本地开发用Redis集群一样。
from langchain_community.vectorstores import PGVector
vectorstore = PGVector.from_documents(
documents=chunks,
embedding=embedding,
connection_string="postgresql://user:pass@localhost:5432/vectordb",
)
衡量两个向量方向的一致性,值域[-1, 1],1表示完全相同:
results = vectorstore.similarity_search(
query="年假怎么申请",
k=5, # 返回最相似的5个文档
)
兼顾相关性和多样性——避免返回5个内容几乎一样的chunk:
results = vectorstore.max_marginal_relevance_search(
query="年假怎么申请",
k=5,
fetch_k=20, # 先取20个候选
lambda_mult=0.5, # 0=最大多样性,1=最大相关性
)
当你的检索结果重复度很高时,MMR特别管用。
只返回相似度高于某个阈值的结果,过滤掉不太相关的:
results = vectorstore.similarity_search_with_relevance_scores(
query="年假怎么申请",
k=10,
score_threshold=0.7, # 只返回分数>0.7的
)
知识库不是一成不变的,文档会更新、新增、删除。
# 加载新文档
new_docs = loader.load()
new_chunks = splitter.split_documents(new_docs)
# 追加到现有向量库
vectorstore.add_documents(new_chunks)
# Chroma
vectorstore._collection.delete(
where={"source": "old_policy.pdf"} # 按元数据删除
)
# Milvus
vectorstore.delete(expr='source == "old_policy.pdf"')
不要每次更新都重建整个向量库,太慢了。推荐方案:
1. Embedding维度不一致
你换了Embedding模型,向量维度变了,旧的向量库就不能用了。建议在项目初期就确定好Embedding模型,后续不要换。如果必须换,就得重建整个向量库。
2. 没有做归一化
余弦相似度要求向量是归一化的。有些Embedding模型输出的向量没归一化,直接算余弦相似度结果不对。解决:在encode_kwargs里加"normalize_embeddings": True。
3. 中文Embedding用错了模型
用英文为主的Embedding(如text-embedding-ada-002)处理中文文档,检索效果惨不忍睹。中文项目一定要用bge-m3或bge-large-zh这类中文优化的模型。
4. FAISS持久化路径问题
FAISS保存和加载时路径要一致,而且它会生成多个文件(.faiss + .pkl),移动时别漏了。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-09-09
长期知识库怎么维护?WeKnora 维护机制拆解与Milvus 接入实测
2026-09-08
智能体搜索的三种技术路线
2026-09-04
向量检索之后,Agent 长期记忆又回到了知识图谱
2026-09-01
RAG的难题,已经从“查到资料”转向“组织可用上下文”
2026-08-31
zg 正式开源:本地检索,不止于关键词
2026-08-31
从0到1打造测试用例生成智能体:RAG+知识图谱实战全记录
2026-08-26
把 Office 文件喂给 AI 之前,先看看 Markdown 丢了什么
2026-08-24
RAG处理表格数据——Table RAG让我把Excel变成了知识库
2026-06-18
2026-06-23
2026-06-22
2026-06-15
2026-07-26
2026-07-09
2026-07-04
2026-07-25
2026-06-23
2026-06-18
2026-08-19
2026-08-18
2026-08-05
2026-08-05
2026-07-28
2026-07-27
2026-07-26
2026-07-25
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。