微信扫码
与创始人交个朋友
我要投稿
向量模型是RAG系统中实现有效信息检索和生成的关键技术之一,它们使得系统能够处理复杂的语言理解任务,并生成更加准确和相关的输出。
向量模型将文本转换为向量形式,便于在高维空间中进行快速的相似性检索,这是RAG系统中检索相关信息的基石。通过向量化,模型能够评估不同文本之间的语义相似度,即使在词汇不完全匹配的情况下也能找到语义相关的文档。向量模型帮助系统捕捉输入查询的上下文信息,这对于理解用户意图并检索最相关的信息至关重要。
本篇文章将为大家介绍在langchain中使用自己向量模型的方法,帮助大家扫清障碍快速搭建RAG和Agent流程。
环境依赖
pip install torch langchain sentence_transformers
模型选择
# 榜单地址https://huggingface.co/spaces/mteb/leaderboard
本文采用bge-m3模型作为例子,其是向量维数为1024维,支持的最大长度为8192,是一个支持多语言的模型,目前效果还算比较好。后面会专门写一篇文章介绍向量模型如何选择和评测。以下是bge-m3的一些信息:
示例代码
import torch
from typing import Any, List
from pydantic import Extra
from langchain.embeddings.base import Embeddings
from sentence_transformers import SentenceTransformer
device = 'cpu'
class CustomEmbedding(Embeddings):
client: Any#: :meta private:
tokenizer: Any
context_sequence_length: int = 512
query_sequence_length: int = 512
model_name: str = ''
"""Model name to use."""
def __init__(self, **kwargs: Any):
"""Initialize the sentence_transformer."""
# super().__init__(**kwargs)
self.client = SentenceTransformer(
'BAAI/bge-m3',
device=device,
trust_remote_code=True)
self.context_sequence_length = 512
self.query_sequence_length = 512
class Config:
extra = Extra.forbid
def mean_pooling(model_output, attention_mask):
# First element of model_output contains all token embeddings
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(
-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / \
torch.clamp(input_mask_expanded.sum(1), min=1e-9)
def embed_documents(self, texts: List[str]) -> List[List[float]]:
with torch.no_grad():
embeddings = self.client.encode(texts)
embeddings = embeddings.astype('float32')
return embeddings.tolist()
def embed_query(self, text: str) -> List[float]:
return self.embed_documents([text])[0]
# 使用测试
model = CustomEmbedding()
emb = model.embed_query("张三")
print(len(emb))
正确运行后,输出的结果是1024,即代表query被向量化后的维数为1024维;可以用这个模型替换上篇文章中的OpenAIEmbeddings.
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-26
GraphRAG和轻量级LightRAG技术及应用案例深度解析
2024-12-26
使用 Markdown 和 Gemini 为 RAG 解锁 PDF
2024-12-26
长文 | RAG的实战指南及探索之路
2024-12-26
2024年,百万上下文依然没有杀死RAG
2024-12-26
在推荐、RAG等业务中,如何完成亿级向量的快速检索?
2024-12-25
RAG 工程实践优化点及方法总结
2024-12-25
强化 RAG 应用:生成式 AI 返回准确率提升的高效策略与实践
2024-12-25
RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
2024-07-18
2024-05-05
2024-06-20
2024-09-04
2024-05-19
2024-07-09
2024-07-09
2024-07-07
2024-06-13
2024-07-07
2024-12-26
2024-12-24
2024-12-21
2024-12-14
2024-12-01
2024-11-27
2024-11-25
2024-11-06