0Pricing
AI Agents · 课时

多向量检索(ColBERT)

为每个文档建立多个向量(每个令牌或每个分块一个),以实现细粒度匹配。

多向量检索(ColBERT) 是 CoddyKit 上的免费 AI Agents 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

一个向量并不够

标准 RAG 会将每个片段嵌入为单个向量。该向量包含片段中的所有信息的平均表示,因此会丢失细粒度信号。

多向量检索会为每个文档存储 MULTIPLE 个向量,并进行更加精确的匹配。

ColBERT 思路

ColBERT(Khattab 和 Zaharia,2020 年)会分别嵌入文档中的每个 TOKEN 和查询中的每个词元,然后计算最大相似度:

score(q, d) = sum over q_token in q: max over d_token in d: cos(q_token, d_token)

ColBERT 为什么优于单向量

  • 能够捕捉文档的多个方面(一个向量无法做到)
  • 更好地处理长文档
  • 对罕见词的召回率更高

ColBERT 的成本

不再为每个片段存储一个向量,而是为每个词元存储一个向量:

  • 如果一个片段包含 500 个词元,存储量就会增加 500 倍
  • 每次搜索都要比较更多的向量对

量化和剪枝可以将这一成本降低 10–50 倍,但成本仍然很高。

ColBERTv2

ColBERTv2 增加了残差压缩——将词元聚类到质心中,并将每个词元存储为(质心 ID、小残差)。存储量可降低 50 倍。

运行 ColBERT

RAGatouille 库让这一过程变得简单:

# pip install ragatouille
from ragatouille import RAGPretrainedModel

rag = RAGPretrainedModel.from_pretrained('colbert-ir/colbertv2.0')
rag.index(collection=documents, index_name='my_corpus')

results = rag.search(query='What is the refund policy?', k=5)

多向量的实际应用

除了 ColBERT,还有其他多向量方法:

  • 父子文档——嵌入小片段,检索较大的父文档
  • 摘要 + 片段——同时嵌入文档摘要和各个片段
  • 假设问题——为每个文档合成问答对并进行嵌入

Hypothetical Questions Pattern

def index_with_hypos(doc):
    # Generate 5 plausible questions this doc could answer
    questions = llm.invoke(f'Write 5 questions answered by this doc:\n{doc}').content.split('\n')
    for q in questions:
        vector_db.add(embed(q), payload={'doc': doc, 'question': q})
# Now queries that match a stored hypothetical question retrieve the doc.

Parent-Child with LangChain

from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore

store = InMemoryStore()
retriever = ParentDocumentRetriever(
    vectorstore=child_vectorstore,
    docstore=store,
    child_splitter=child_splitter,    # small
    parent_splitter=parent_splitter   # large
)
retriever.add_documents(documents)
# Indexes small chunks, returns large parents.

何时使用 ColBERT

  • 高风险搜索(法律、医疗)
  • 长文档
  • 能够承担存储成本的场景

何时跳过

  • 小型语料库
  • 对延迟敏感的路径
  • 受成本限制的项目

与 BM25 混合

要获得最高召回率,请将多向量检索与经典的 BM25 关键词搜索结合起来。使用倒数排名融合来合并结果。

ColBERT 的权衡

使用 ColBERT 风格的多向量检索时,主要的权衡是什么?

回顾

每个片段只有一个向量会丢失信息。ColBERT 为每个词元存储向量,以获得更高的精确度。RAGatouille 让这一过程变得简单。在召回率重要且成本允许时使用它。

常见问题解答

「多向量检索(ColBERT)」课时是免费的吗?

是的 — 「多向量检索(ColBERT)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。

「多向量检索(ColBERT)」这节课中我会学到什么?

为每个文档建立多个向量(每个令牌或每个分块一个),以实现细粒度匹配。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Agents 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「多向量检索(ColBERT)」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Agents 课中编写并运行代码吗?

能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用交叉编码器重新排序
  2. HyDE:假设性文档嵌入
  3. 多向量检索(ColBERT)
  4. RAG 评估(RAGAS、Recall@K)
← 返回 AI Agents