007:RAG 入门-向量嵌入与检索

RAG 检索链路追踪系统构建实战:打通向量检索 → Prompt 拼接 → 问题定位的全链路可观测体系 本文聚焦于国产大模型 RAG 系统中的“检索黑箱问题”:明明有知识却没命中?输出错误却无从排查?我们将构建一个轻量、高效、可视化的检索链路追踪系统,实现 request_id 全链路绑定、embedding 配置记录、检索命中片段持久化、Prompt 拼接还原,以及 Streamlit 可视化界面。 本文配套提供结构化日志模板 × 实战代码 × 可视化 demo,帮助你彻底打通 RAG 系统的检索可观测能力,为后续的调优、反馈闭环和版本对比评估打下基础。 阅读详情

本文是 refine-rag 系列教程的第七篇,我们来学习一下什么是向量嵌入?有哪些检索方法?
本文所有代码都在:https://github.com/zonezoen/refine-rag

目录

  • • 前言

  • • 什么是向量嵌入?为什么需要它?

  • • 检索方法对比

  • • BM25 检索(关键词匹配)

  • • BGE-M3(多功能嵌入)

  • • 多模态嵌入(图文检索)

  • • 混合检索策略

  • • 方案对比与选择

  • • 向量维度越高越好吗?

  • • 学习路径

前言

前面我们学习了如何读取数据和切块,现在到了 RAG 的核心环节:向量嵌入与检索。

这一步决定了你的 RAG 系统能不能找到正确的知识点。就像图书馆的索引系统,索引做得好,找书就快;索引做得差,找半天也找不到。

什么是向量嵌入?为什么需要它?

简单来说,向量嵌入就是把文字(或图片)转成一串数字。

比如:

文本: "孙悟空使用金箍棒"
向量: [0.12, -0.34, 0.56, ..., 0.78]  # 1024 个数字

为什么要转成数字?因为计算机只认识数字,不认识文字。把文字转成向量后,就可以:

  • • 计算相似度(两段文字有多像)

  • • 快速检索(从海量文档中找到相关内容)

  • • 聚类分析(把相似的内容归类)

向量的神奇之处:

语义相似的文本,向量也相似:

"孙悟空使用金箍棒" → [0.12, -0.34, 0.56, ...]
"悟空拿着金箍棒"   → [0.15, -0.30, 0.52, ...]  # 对比第一句向量很接近
"一只猫在睡觉"     → [0.89, 0.23, -0.67, ...] # 对比第一句向量差异大

检索方法对比

目前主流的检索方法有三种:

1. 关键词检索(BM25)

原理:基于词频统计,不需要 embedding 模型。

示例:

查询: "烈焰拳"
文档1: "猢狲使用烈焰拳击退妖怪" ✅ 包含关键词,匹配度高
文档2: "孙悟空施展火焰技能" ❌ 不包含关键词,匹配度低

特点:

  • • ✅ 精确匹配关键词

  • • ✅ 速度快

  • • ❌ 无法理解同义词

2. 向量检索(Semantic Search)

原理:基于语义相似度,使用 embedding 模型。

示例:

查询: "烈焰拳"
文档1: "猢狲使用烈焰拳击退妖怪" ✅ 包含关键词,相似度高
文档2: "孙悟空施展火焰技能" ✅ 语义相似,相似度也高

特点:

  • • ✅ 理解语义

  • • ✅ 支持同义词

  • • ❌ 速度较慢

3. 混合检索(Hybrid Search)

原理:结合 BM25 和向量检索的优势。

示例:

查询: "烈焰拳"
BM25 分数: [0.8, 0.1, 0.6]
向量分数: [0.9, 0.7, 0.5]
混合分数: 0.7 * BM25 + 0.3 * 向量 = [0.83, 0.28, 0.57]

特点:

  • • ✅ 结合两者优势

  • • ✅ 检索质量最高

  • • ❌ 实现稍复杂

对比总结

方法

速度

精度

关键词匹配

语义理解

推荐度

BM25

⚡⚡⚡

⭐⭐⭐

✅ 强

❌ 弱

⭐⭐⭐

向量检索

⚡⚡

⭐⭐⭐⭐

❌ 弱

✅ 强

⭐⭐⭐⭐

混合检索

⚡⚡

⭐⭐⭐⭐⭐

✅ 强

✅ 强

⭐⭐⭐⭐⭐

BM25 检索(关键词匹配)

最经典的检索算法,基于词频统计,不需要 embedding 模型。

文件名:01-BM25检索-修复版.py

from langchain_community.retrievers import BM25Retriever
from langchain_core.documents import Document

# 1. 准备测试数据
docs = [
    Document(page_content="猢狲在无回谷遭遇了妖怪,妖怪开始攻击,猢狲使用铜云棒抵挡。"),
    Document(page_content="妖怪使用寒冰箭攻击猢狲但被烈焰拳反击击溃。"),
    Document(page_content="猢狲施展烈焰拳击退妖怪随后开启金刚体抵挡神兵攻击。"),
    Document(page_content="猢狲召唤烈焰拳与毁灭咆哮击败妖怪随后收集妖怪精华。"),
    Document(page_content="在战斗中猢狲使用了多种技能包括烈焰拳金刚体和铜云棒。"),
]

print("文档数量:", len(docs))
print("\n文档内容:")
for i, doc in enumerate(docs, 1):
    print(f"{i}. {doc.page_content}")

# 2. 创建 BM25 检索器
bm25_retriever = BM25Retriever.from_documents(docs)
bm25_retriever.k = 3  # 返回前3个最相关的文档

# 3. 测试检索
queries = [
    "烈焰拳",
    "妖怪攻击",
    "铜云棒",
    "战斗技能"
]

for query in queries:
    print(f"\n查询: {query}")
    results = bm25_retriever.invoke(query)
    
    print(f"检索到 {len(results)} 个相关文档:")
    for i, doc in enumerate(results, 1):
        print(f"  {i}. {doc.page_content}")
    print("-" * 50)

参数说明:

  • • k=3:返回前 3 个最相关的文档

  • • k1=1.5:词频饱和度参数(高级,一般不用改)

  • • b=0.75:文档长度归一化参数(高级,一般不用改)

工作原理:

  1. 1. 分词:把文档和查询分成词

  2. 2. 计算词频:统计每个词出现的次数

  3. 3. 计算 IDF:词的重要性(越少见的词越重要)

  4. 4. 打分:综合词频和 IDF 计算相关度

优点:

  • • 速度快,无需模型

  • • 精确匹配关键词

  • • 适合专业术语搜索

缺点:

  • • 无法理解同义词

  • • 无法理解语义

适用场景: 代码搜索、专业术语搜索、关键词精确匹配

BGE-M3(多功能嵌入)

BGE-M3 是目前强大的开源嵌入模型,支持三种嵌入方式。

什么是 BGE-M3?

M3 代表:

  • • Multi-Functionality(多功能):支持三种嵌入方式

  • • Multi-Linguality(多语言):支持 100+ 种语言

  • • Multi-Granularity(多粒度):支持不同长度的文本

三种嵌入方式

1. 密集嵌入(Dense Embedding)

把整个文本压缩成一个向量,适合语义搜索。

文件名:04-BGE-M3.py

from FlagEmbedding import BGEM3FlagModel

# 1. 加载模型
print("正在加载 BGE-M3 模型...")
model = BGEM3FlagModel("BAAI/bge-m3", use_fp16=False)
print("模型加载完成!\n")

# 2. 准备文本
passage = ["猢狲施展烈焰拳,击退妖怪;随后开启金刚体,抵挡神兵攻击。"]

print(f"原始文本: {passage[0]}\n")

# 3. 生成密集嵌入
passage_embeddings = model.encode(
    passage,
    return_dense=True  # 只返回密集嵌入
)

dense_vecs = passage_embeddings["dense_vecs"]

print("【1. 密集嵌入 (Dense Embedding)】")
print(f"维度: {dense_vecs[0].shape}")
print(f"说明: 整个文本被压缩成一个 {dense_vecs[0].shape[0]} 维的向量")
print(f"用途: 语义搜索、相似度计算")
print(f"前10维示例: {dense_vecs[0][:10]}")

特点:

  • • 整个文本一个向量

  • • 理解语义相似度

  • • 适合问答系统

2. 稀疏嵌入(Sparse Embedding)

类似 BM25,只存储重要的词及其权重。

# 生成稀疏嵌入
passage_embeddings = model.encode(
    passage,
    return_sparse=True  # 只返回稀疏嵌入
)

sparse_vecs = passage_embeddings["lexical_weights"]

print("【2. 稀疏嵌入 (Sparse Embedding)】")
print(f"非零元素数量: {len(sparse_vecs[0])}")
print(f"说明: 只存储重要的 token 及其权重(类似 BM25)")
print(f"用途: 关键词匹配、精确检索")
print(f"前10个非零值示例:")
for token_id, weight in list(sparse_vecs[0].items())[:10]:
    print(f"  Token ID {token_id}: 权重 {weight:.4f}")

特点:

  • • 只存储重要的词

  • • 精确匹配关键词

  • • 类似 BM25 效果

3. 多向量嵌入(ColBERT Multi-Vector)

每个词都有一个独立的向量,最精确但最慢。
你可以把“多向量嵌入”想象成一个为文档的每个词都配备了独立“小磁铁”的精确搜索系统。

通俗解释:

  • • 普通搜索(单向量):把一整段话变成一个“大毛线团”来代表。比较两个“毛线团”时,只能看整体像不像,比较粗糙。

  • • 多向量搜索:把一段话的每个词都变成一块独立的“小磁铁”。搜索时,把你的问题也拆成“小磁铁”,然后去文档里一块一块地对吸。只要有一块能对上,就能找到相关信息。

举个例子:

  • • 文档:“这只棕色的狐狸敏捷地跳过了那只懒惰的狗。”

  • • 你的问题:“关于那只狗的句子。”

过程如下:

  1. 1. 拆成“小磁铁”:

  • • 文档被拆成:[这, 只, 棕色, 的, 狐狸, 敏捷, 地, 跳过, 了, 那, 只, 懒惰, 的, 狗],每个词变成一个向量(小磁铁)。

  • • 你的问题被拆成:[关于, 那, 只, 狗],每个词也变成一个向量。

  • 2. 精细匹配:系统会用你问题里的每个“小磁铁”,去文档里寻找能“吸住”(即相似)的磁铁。

    • • 问题中的 狗会强烈匹配文档中的 狗。

    • • 问题中的 那和 只也可能匹配到文档中“那只狗”前面的 那和 只。

  • 3. 得出结果:由于“狗”这个词的磁铁完美匹配上了,系统就能精准地找到包含“狗”的这句话,并返回给你。

  • 总结它的特点:

    • • 为什么最精确:因为它进行的是“词对词”的精细对比,能捕捉到具体的术语和表述,即使整体意思不完全一样。

    • • 为什么最慢:想象一下,一段话有20个词,问题有5个词,那就需要比较 20 x 5 = 100 次。如果文档库很大,这个计算量是非常惊人的。

    如果你在做对准确率要求极高的搜索(比如法律条文查询、精密技术文档检索),哪怕多花点钱、慢一点,也要用 ColBERT;如果只是普通的网页搜索或聊天机器人,普通向量就够用了。

    # 生成多向量嵌入
    passage_embeddings = model.encode(
        passage,
        return_colbert_vecs=True  # 返回多向量嵌入
    )
    
    colbert_vecs = passage_embeddings["colbert_vecs"]
    
    print("【3. 多向量嵌入 (ColBERT Multi-Vector)】")
    print(f"维度: {colbert_vecs[0].shape}")
    print(f"说明: 文本被分成 {colbert_vecs[0].shape[0]} 个 token")
    print(f"      每个 token 有一个 {colbert_vecs[0].shape[1]} 维向量")
    print(f"用途: 精确匹配、细粒度检索")

    特点:

    • • 每个词一个向量

    • • 最精确的匹配

    • • 计算成本最高

    三种嵌入对比

    嵌入类型

    维度

    速度

    精度

    适用场景

    密集嵌入

    (1024,)

    ⚡⚡⚡

    ⭐⭐⭐⭐

    语义搜索、问答系统

    稀疏嵌入

    字典

    ⚡⚡⚡

    ⭐⭐⭐

    关键词搜索、精确匹配

    多向量嵌入

    (tokens, 1024)

    ⚡

    ⭐⭐⭐⭐⭐

    高精度检索、学术研究

    多模态嵌入(图文检索)

    多模态嵌入可以将图片和文本映射到同一个向量空间,实现图文检索。

    什么是多模态嵌入?

    简单来说,就是让图片和文字"说同一种语言"。

    示例:

    图片: [一张悟空战斗的图片]
    图片向量: [0.12, -0.34, 0.56, ..., 0.78]
    
    文本: "悟空在战斗"
    文本向量: [0.15, -0.30, 0.52, ..., 0.75]
    
    相似度: 0.95 ✅ 很相似!

    3.1 本地 CLIP 模型(推荐)

    CLIP 是 OpenAI 开发的多模态模型,可以理解图片和文本的关系。

    文件名:05-多模态嵌入-CLIP版本.py,代码就不详细展示了,可以看看:https://github.com/zonezoen/refine-rag

    优点:

    • • 完全免费,无限制

    • • 支持图文检索

    • • 模型成熟稳定

    • • 可以实现以图搜图

    缺点:

    • • 需要下载模型(约 600MB)

    • • 需要本地计算资源

    适用场景: 图文检索、以图搜图、零样本图像分类

    3.2 Jina AI API(真正的多模态)

    如果不想下载模型,可以使用 Jina AI 的多模态 embedding API。

    文件名:07-真正的多模态嵌入-JinaAI.py

    import os
    import requests
    import base64
    from io import BytesIO
    from PIL import Image
    from dotenv import load_dotenv
    import numpy as np
    
    load_dotenv()
    
    class JinaMultimodalEmbedding:
        """Jina AI 多模态嵌入客户端"""
        
        def __init__(self, api_key=None):
            self.api_key = api_key or os.getenv("JINA_API_KEY")
            self.api_url = "https://api.jina.ai/v1/embeddings"
            self.model = "jina-clip-v1"
        
        def image_to_base64(self, image_path):
            """将图片转为 base64 编码"""
            with Image.open(image_path) as img:
                img.thumbnail((512, 512))
                
                if img.mode == 'RGBA':
                    img = img.convert('RGB')
                
                buffered = BytesIO()
                img.save(buffered, format="JPEG")
                img_str = base64.b64encode(buffered.getvalue()).decode()
                
                return f"data:image/jpeg;base64,{img_str}"
        
        def encode_text(self, text):
            """编码文本"""
            headers = {
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json"
            }
            
            data = {
                "model": self.model,
                "input": [{"text": t} for t in (text if isinstance(text, list) else [text])]
            }
            
            response = requests.post(self.api_url, headers=headers, json=data)
            result = response.json()
            embeddings = [item["embedding"] for item in result["data"]]
            return np.array(embeddings)
        
        def encode_image(self, image_path):
            """编码图片"""
            headers = {
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json"
            }
            
            image_base64 = self.image_to_base64(image_path)
            
            data = {
                "model": self.model,
                "input": [{"image": image_base64}]
            }
            
            response = requests.post(self.api_url, headers=headers, json=data)
            result = response.json()
            embedding = result["data"][0]["embedding"]
            return np.array(embedding)
    
    # 使用示例
    client = JinaMultimodalEmbedding()
    
    # 编码图片和文本
    image_vec = client.encode_image("image.jpg")
    text_vec = client.encode_text("悟空在战斗")
    
    # 计算相似度
    similarity = np.dot(image_vec, text_vec[0])
    print(f"相似度: {similarity:.4f}")

    优点:

    • • API 调用,无需下载模型

    • • 真正的多模态 embedding

    • • 国内可访问

    • • 有免费额度(100万 tokens/月)

    缺点:

    • • 需要注册账号

    • • 超出免费额度需付费

    适用场景: 不想下载模型、需要真正的多模态 embedding

    混合检索策略

    实际项目中,混合检索往往效果最好。通常很多面试官问你的问题,都会涉及到混合检索,或者说也是你的回答要点之一。

    文件名:03-LangChain-BM25-OpenSource.py

    from langchain_community.retrievers import BM25Retriever
    from langchain_huggingface import HuggingFaceEmbeddings
    from langchain_core.vectorstores import InMemoryVectorStore
    from langchain_core.documents import Document
    
    # 1. 准备数据
    battle_logs = [
        "猢狲身披锁子甲。",
        "猢狲在无回谷遭遇了妖怪,妖怪开始攻击,猢狲使用铜云棒抵挡。",
        "猢狲施展烈焰拳击退妖怪随后开启金刚体抵挡神兵攻击。",
        "妖怪使用寒冰箭攻击猢狲但被烈焰拳反击击溃。",
        "猢狲召唤烈焰拳与毁灭咆哮击败妖怪随后收集妖怪精华。"
    ]
    
    docs = [Document(page_content=log) for log in battle_logs]
    
    # 2. 创建 BM25 检索器
    bm25_retriever = BM25Retriever.from_texts(battle_logs)
    bm25_retriever.k = 3
    
    # 3. 创建向量检索器
    embeddings = HuggingFaceEmbeddings(
        model_name="BAAI/bge-small-zh-v1.5",
        model_kwargs={'device': 'cpu'},
        encode_kwargs={'normalize_embeddings': True}
    )
    
    vector_store = InMemoryVectorStore(embeddings)
    vector_store.add_documents(docs)
    vector_retriever = vector_store.as_retriever()
    
    # 4. 查询
    query = "猢狲有什么装备和招数?"
    
    # BM25 检索
    bm25_results = bm25_retriever.invoke(query)
    print("BM25 检索结果:")
    for doc in bm25_results:
        print(f"  - {doc.page_content}")
    
    # 向量检索
    vector_results = vector_retriever.invoke(query)
    print("\n向量检索结果:")
    for doc in vector_results:
        print(f"  - {doc.page_content}")
    
    # 混合检索(去重)
    hybrid_results = list({doc.page_content for doc in bm25_results + vector_results})
    print("\n混合检索结果:")
    for content in hybrid_results:
        print(f"  - {content}")

    混合策略说明:

    1. 1. 简单合并(上面的示例)

    • • 取两种检索结果的并集

    • • 去重

    • • 简单但有效

  • 2. 加权融合(高级)

    # 计算加权分数
    final_score = 0.7 * bm25_score + 0.3 * vector_score
  • 3. 重排序(最优)

    # 先用 BM25 快速筛选
    # 再用向量模型重排序
    candidates = bm25_retriever.invoke(query, k=20)
    final_results = rerank_with_vector(candidates, query, k=5)
  • 方案对比与选择

    文本检索方案对比

    方案

    速度

    精度

    成本

    适用场景

    推荐度

    BM25

    ⚡⚡⚡

    ⭐⭐⭐

    免费

    关键词搜索、代码搜索

    ⭐⭐⭐

    BGE-M3 密集

    ⚡⚡

    ⭐⭐⭐⭐

    免费

    语义搜索、问答系统

    ⭐⭐⭐⭐

    BGE-M3 混合

    ⚡⚡

    ⭐⭐⭐⭐⭐

    免费

    高质量检索

    ⭐⭐⭐⭐⭐

    混合检索

    ⚡⚡

    ⭐⭐⭐⭐⭐

    免费

    通用场景

    ⭐⭐⭐⭐⭐

    多模态方案对比

    方案

    类型

    成本

    国内访问

    推荐度

    本地 CLIP

    真多模态

    免费

    ✅

    ⭐⭐⭐⭐⭐

    Jina AI

    真多模态

    有免费额度

    ✅

    ⭐⭐⭐⭐⭐

    千问+BGE

    伪多模态

    ¥0.008/千tokens

    ✅

    ⭐⭐⭐⭐

    向量维度越高越好吗?

    答:不一定。

    • • 维度高:表达能力强,但计算慢,存储大

    • • 维度低:速度快,存储小,但精度稍低

    常见维度:

    • • 384 维:轻量级,适合移动端

    • • 768 维:平衡,最常用

    • • 1024 维:高精度,适合服务器

    推荐:

    • • 一般应用:768 维(如 BGE-base)

    • • 高精度:1024 维(如 BGE-M3)

    • • 移动端:384 维(如 BGE-small)

    学习路径

    1. 1. 简易RAG 学习

    2. 2. LCEL 语法学习

    3. 3. LangChain 读取数据

      1. 1. LangChain 读取文本数据

      2. 2. LangChain 读取图片数据

      3. 3. LangChain 读取 PDF 数据

      4. 4. LangChain 读取表格数据

    4. 4. 文本切块

    5. 5. 向量嵌入与检索

    6. 6. 向量存储

    7. 7. 检索前处理

    8. 8. 索引优化

    9. 9. 检索后处理

    10. 10. 响应生成

    11. 11. 系统评估

    项目地址

    本文所有代码示例都在 GitHub 开源:

    https://github.com/zonezoen/refine-rag

    欢迎 Star 和 Fork,一起学习 RAG 技术!

RAG向量库选型与实战:FAISS、Chroma、Qdrant、Weaviate深度对比 向量数据库是RAG(检索增强生成)系统的核心基础设施,其本质是将非结构化文本转化为高维语义向量,并通过高效近似最近邻搜索(ANN)实现毫秒级相关片段召回。不同于传统数据库,它需兼顾向量索引构建效率、混合检索(关键词+语义)、元数据过滤与生产级扩展能力。在企业落地中,Embedding Libraries(嵌入向量库)直接决定答案准确率与服务延迟——选型不当会导致‘检索对、回答错’或P99延迟飙升。本文基于5万文档真实压测,解析FAISS、Chroma、Qdrant、Weaviate在单机启动、QPS、水平扩 阅读详情

相关推荐

RAG进阶检索四大实战技术:查询重写、混合检索、分层检索与元数据增强

RAG检索不是简单的向量相似度匹配,而是面向业务意图的证据链构建过程。其核心原理在于融合关键词的精确性与向量语义的泛化性,在精度、延迟与可解释性之间取得工程平衡。技术价值体现在显著降低bad case率、提升首条召回准确率(P@1)、压降P95延迟,并满足金融、医疗等强合规场景的审计追溯要求。典型应用场景包括智能客服知识库、设备故障诊断、法律合同比对及信贷风控问答系统。本文聚焦生产验证有效的四大关键技术:查询重写(解决口语歧义)、混合检索(BM25+向量协同)、分层检索(粗筛+精排降算力)和元数据增强(业务

weixin_30258901的博客 314

RAG实战:从向量嵌入到混合检索的完整实现与对比

向量嵌入技术是自然语言处理中的核心基础,它将文本转化为计算机可理解的数学向量,使语义相似的文本在向量空间中距离相近。其原理基于深度学习模型学习词语和句子的分布式表示,从而捕捉深层次的语义信息。这项技术的核心价值在于为AI系统提供了理解和处理非结构化文本数据的能力,是实现语义搜索、智能问答和个性化推荐等高级应用的基石。在检索增强生成(RAG)系统中,向量嵌入与高效的检索策略(如BM25和语义搜索)结合,构成了系统的“心脏”和“搜索引擎”,直接决定了知识库问答的准确性和效率。本文聚焦于RAG最核心的嵌入与检索环

weixin_30780649的博客 397

LLM之RAG实战(五十七)| RAG 20多种常见算法对比

在本文,将介绍一下RAG常用的20多种算法。源码原始地址:https://github.com/FareedKhan-dev/all-rag-techniques源码完善后的地址:https://github.com/ArronAI007/Awesome-AGI/tree/main/RAG/examples/rag_examples。

wshzd的博客 1163

向量嵌入及检索的理论极限

本文介绍向量嵌入概念、RAG应用及发展,论证了向量嵌入存在维度瓶颈,需结合混合检索与精排突破极限,并通过实验进行支撑,最终提炼出“对业务的启示及解决思路”。

极客专栏 388

私有文档RAG系统实战:从PDF解析到幻觉抑制的全链路工程指南

RAG(检索增强生成)是一种将语义检索与大语言模型生成能力结合的基础架构范式,其核心原理在于解耦知识存储与语言理解——用向量数据库保障事实可追溯性,用LLM实现自然语言表达。该技术显著提升私有知识服务的准确性与可控性,尤其适用于企业内部文档问答、合规咨询、员工自助支持等强事实依赖场景。相比端到端微调,RAG具备知识实时更新、审计可追溯、部署成本低等工程优势。本文聚焦bge-m3嵌入、ChromaDB索引、结构化提示词与PDF鲁棒解析四大关键实践,直击私有文档问答中语义检索失效与LLM幻觉两大高频痛点。

weixin_30698527的博客 458

011、RAG入门:为什么需要检索增强生成

上一期咱们聊了Prompt注入攻击,你可能会想:LLM连自己的“边界”都守不住,还敢让它回答专业问题?别急,今天讲的RAG(检索增强生成)正是解决这个痛点的利器——它让LLM从“闭卷考试”变成“开卷考试”,知识局限和幻觉问题迎刃而解。

Y_gao的博客 149

008-01:RAG 入门-向量存储与企业级向量数据库 milvus

向量数据库不仅仅是“存数据”,它还提供了成熟的 CRUD、多租户隔离、数据备份和水平扩展(Scale-out)能力,这些是简单的内存库(如 FAISS)难以胜任的。向量数据库专门优化了数据的压缩与加载策略。本文是 refine-rag 系列教程的第八篇,我们来学习向量存储的核心技术和 Milvus 数据库的使用。向量数据库就像是为向量量身定制的"仓库管理系统",它不仅能存储海量向量,还能快速检索、高效管理。:擅长模糊搜索,基于向量索引(HNSW、IVF),返回的是 Top-K 个“最相似”的候选者。

zone_的博客 410

MCP详解:手把手教你理解和如何使用各种开源MCP服务

MCP 作为一种开放协议,为 AI 模型与外部世界的连接提供了标准化的解决方案。它不仅降低了开发门槛,还极大地扩展了 AI 应用的边界。无论是开发者还是普通用户,都可以通过 MCP 更高效地利用 AI 技术,实现更多智能化的功能。

王哥儿聊AI的博客 6056

Graph-RAG实战:用知识图谱增强向量检索的因果推理能力

知识图谱是一种结构化表达实体、属性与关系的技术,其核心原理在于通过节点与边构建可遍历、可推理的语义网络,从而突破传统向量检索仅依赖语义相似性的局限。相比纯向量匹配,图谱能显式建模‘禁忌’‘导致’‘适用于’等逻辑关系,显著提升医疗、法律等强推理场景下的答案可信度与可解释性。技术价值体现在支持反向查询、路径推理与证据溯源,典型应用场景包括药品禁忌分析、合同条款关联审查、个性化教育推荐等。本文聚焦Graph-RAG落地实践,详解如何用NetworkX构建轻量知识图谱,并与ChromaDB向量库协同实现因果驱动的混

chongkuachan8070的博客 320

Matplotlib字体警告终结者:为什么总提示DejaVu Sans?5种场景解决方案大全

本文深入解析Matplotlib中常见的DejaVu Sans字体警告问题,并提供5种典型场景的完整解决方案。从理解字体系统的三层架构和缓存机制,到解决中文显示、远程服务器部署、TeX渲染、缓存优化及生产环境配置等实际问题,帮助开发者彻底摆脱字体警告困扰,实现稳定可靠的数据可视化。

view3的博客 502

保姆级教程:用GMT6.1绘制专业地形起伏图(从数据下载到出图避坑)

本文提供了一份详细的GMT6.1绘制地形起伏图的保姆级教程,从环境搭建到数据下载,再到核心绘图命令解析,帮助用户避开常见错误。特别适合科研人员和地理信息爱好者快速掌握专业地形图的绘制技巧,提升工作效率。

weixin_42549723的博客 278

008-02:RAG 入门-向量存储索引算法详解

DiskANN 是微软开发的基于磁盘的索引算法,通过精心设计的图结构和缓存策略,实现在磁盘上也能高效搜索。IVF (Inverted File) 通过聚类算法将向量空间分成多个区域(称为"桶"或"聚类中心"),搜索时只在最相关的几个区域内查找。它通过特殊的数据结构,让你能快速找到与查询向量最相似的向量,而不需要逐个比较所有向量。找书时,先确定是哪个类别,然后只在那个类别的书架上找,而不是整个图书馆都翻一遍。建立多个不同的分类系统(比如按作者、按年代、按主题),查找时同时在多个系统中搜索,然后合并结果。

zone_的博客 618

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3217

008-03:RAG 入门-向量存储中向量搜索和度量方法

ANN (Approximate Nearest Neighbor) 是最基础的向量搜索,找到与查询向量最相似的 Top-K 个结果。向量搜索不是简单的"找最近的",而是一门艺术。不同的距离度量方式、不同的搜索策略,会带来完全不同的结果。搜索"好看的电影",不想结果全是"漫威电影",而是希望每个类型(动作、喜剧、科幻)都返回几部。不是找"最近的 5 家餐厅",而是找"距离我 1-3 公里之间的所有餐厅"。在图书馆找最相关的 5 本书。在图书馆找书,但只在"2020年后出版"且"评分>4.5"的书中找。

zone_的博客 394

CentOS7上装不了最新Chrome?别折腾依赖了,试试这个老版本安装法(附103.0.5060.24 beta下载地址)

本文提供了在CentOS7上安装兼容版Chrome的详细指南,解决了因GLIBC版本限制导致的最新版Chrome无法安装的问题。推荐使用Chrome 103.0.5060.24 beta版本,并附有下载地址和完整安装步骤,包括禁用自动更新和配套工具安装,确保系统稳定性和功能完整性。

weixin_29289821的博客 570

OpenMMLab实战指南:从环境搭建到首个检测模型运行

本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。

weixin_28678151的博客 158

009-03:RAG 入门-RAG 优化,查询路由技术详解

",如果你有 Python、JavaScript、Go 三个文档库,显然应该只在 Python 文档库中搜索,而不是在所有文档中搜索。前面我们学习了查询构建和查询翻译技术,知道如何优化查询内容。查询路由就是这样的"导诊系统",它根据用户的问题内容,智能地将查询发送到最合适的数据源或处理流程。本文是 refine-rag 系列教程的第十三篇,我们来学习检索前处理的查询路由技术。将数据源描述和查询都转换为向量,通过计算相似度选择最匹配的数据源。这时候就需要查询路由技术,根据查询内容智能分发到最合适的数据源。

zone_的博客 599

5G射频到底是啥?方案怎么搭?工作流程、SAW选型、PA选型一口气讲透(工程师秒懂版)

很多人一提 5G 射频,脑子里先冒出来的是几个零件名:👉 PA👉 LNA👉 SAW👉 天线👉 开关但真正做方案时,这些东西不是一堆分立器件,而是一条完整的“信号流水线”。更准确地说,。Qualcomm 对 RFFE 的定义就是“把信息转换成可发送的射频信号,并把接收到的信号转换回有用信息”的那一整套组件。

weixin_43199439的博客 536

Bilibili RAG:把收藏夹变成可对话的知识库

Bilibili RAG项目将B站收藏夹转化为可交互的知识库,通过自动拉取视频、语音转写和向量检索实现智能问答。该项目解决了收藏夹"搜不到、看不完、用不了"的痛点,让收藏内容变成可用知识。技术栈采用FastAPI+Next.js+ChromaDB,支持ASR兜底机制确保稳定性。适合技术视频收藏者、播客用户等群体,未来计划扩展会话管理和更多模型支持。项目开源地址提供,旨在让收藏夹从仓库升级为可检索、可对话的知识资产。

weixin_43264001的博客 798

【ComfyUI】Animate 保留原视频背景角色替换视频生成

本文介绍了智能创作与视频生成的工作流设计,强调其作为围绕业务目标、数据流转和模型能力的有机整体。工作流由数据输入、模型处理、结果合成和输出展示构成,通过节点化连接实现高效复用与扩展。文章重点解析了核心模型(如CLIP Vision、WanVideo等)的功能和协作方式,以及各类节点(输入、处理、控制、输出)的作用。最后展示了工作流在视频角色替换、虚拟试衣等场景的应用价值,并提供了相关开发资源链接。该设计通过模块化实现了灵活适配不同业务需求的能力。

Mr数据杨 1868

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

009-02:RAG 入门-RAG 优化,查询翻译技术详解

但还有个问题:用户的查询往往是口语化、模糊的,直接用来检索效果不好。比如用户说"那个,我刚开始玩这个游戏,感觉很难,在普陀山那一关,嗯,怎么也过不去",这样的查询很难匹配到相关文档。查询翻译就是把用户的原始查询"翻译"成更适合检索的形式。本文是 refine-rag 系列教程的第十二篇,我们来学习检索前处理的查询翻译技术。• 原始查询:"那个,我刚开始玩这个游戏,感觉很难,在普陀山那一关,嗯,怎么也过不去"这时候就需要查询翻译技术,将用户的原始查询"翻译"成更适合检索的形式。

zone_的博客 270

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

009-01:RAG 入门-RAG 优化,查询构建技术详解

这时候就需要查询构建技术,将自然语言转换为结构化查询,结合向量检索的语义理解和结构化查询的精确性。查询构建就是把自然语言查询转换为结构化查询语言(SQL、Cypher、元数据过滤器等)。本文是 refine-rag 系列教程的第十一篇,我们来学习检索前处理的查询构建技术。2. Text-to-Cypher(自然语言转图查询)• Text-to-Cypher(自然语言转图查询)• 找到包含"演员"、"年龄"、"30岁"的文档。• Text-to-SQL(自然语言转SQL)

zone_的博客 371

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RAG 检索性能评估体系

推荐话术“我们的 RAG 检索在内部测试集上达到了 Top-5 召回率 82%、准确率 86% 的水平。这个指标是通过构建 500 个标注问答对,自动化评估得出的。虽然还有优化空间,但在当前基于轻量级嵌入模型的方案中已经表现不错。如果追求更高精度,可以引入重排序模型或混合检索策略,预计能将召回率提升到 90% 以上。关键点✅ 给出具体数字(82%、86%)✅ 说明测试方法(500 个标注问答对)✅ 承认不足(还有优化空间)✅ 展示优化思路(重排序、混合检索)

手写ArrayList 452

从入门到精通:RAG 20余种算法对比与实践解析

在本文,将介绍一下RAG常用的20多种算法。为了便于展示,这里采用jupyter notebook进行演示,代码目录结构如下

2401_85373691的博客 721

UEmbed:统一多模态稀疏与稠密嵌入的检索新思路

向量检索是搜索引擎、推荐系统和 RAG 应用的核心环节,而 Embedding 的质量直接决定了召回效果。传统方案中,稠密嵌入擅长语义理解,但难以精确匹配长尾实体;稀疏嵌入则精确可解释,却存在词汇鸿沟。UEmbed 作为统一多模态嵌入的新方向,将两种表示融合进单一模型,一次推理同时输出稀疏和稠密向量,兼顾语义泛化与精确匹配。其在图文跨模态检索、商品搜索、视频片段定位等场景中,能有效降低系统复杂度并提升混合检索效果。本文从概念到实践,拆解 UEmbed 的设计动机和核心原理,展示一个可运行的多模态混合检索 D

weixin_30323631的博客 309

#VDB|RAG|AIGC#(含代码)向量检索工具FAISS的搭建和使用教程、经验分享

本文将依faiss使用全流程来教学gpu版的faiss如何使用。

weixin_45312236的博客 2773
上一篇: 006:RAG 入门-面试官问你,RAG 为什么要切块?
下一篇: 008-01:RAG 入门-向量存储与企业级向量数据库 milvus
zone7_
博客等级 码龄10年 144粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值