昇腾社区首页
中文
注册

类功能

功能描述

将待搜索的问题进行向量化后使用近似算法在向量数据库中检索相似的topk个向量ID,通过向量ID获取关系数据库中topk个相关文档。该类继承langchain_core.retrievers.BaseRetriever,通过调用基类的invoke方法使用检索功能,待检索的问题为str类型,长度不超过100万。

函数原型

from mx_rag.retrievers import Retriever
# 所有参数需通过关键字参数传递
Retriever(vector_store, document_store, embed_func, k, score_threshold)

依赖关系

参数说明

所有参数需通过关键字参数传递

参数名

数据类型

可选/必选

说明

vector_store

VectorStore

必选

向量数据库实例,具体类型可参见VectorStore

document_store

Docstore

必选

关系型数据库实例,具体类型可参见Docstore类

embed_func

Callable[[List[str]], List[List[float]]]

必选

embedding回调函数。

k

int

可选

检索的条目范围topk,取值范围[1, 10000],默认值为“1”

score_threshold

float

可选

检索分数阈值,默认值为None,如果为None则不使能阈值过滤功能。

如果使用,则取值范围在[0, 1],阈值取得越大,匹配越严格;阈值取得越小,匹配越不严格。

调用示例

from paddle.base import libpaddle
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from mx_rag.embedding.local import TextEmbedding
from mx_rag.storage.document_store import SQLiteDocstore
from mx_rag.storage.vectorstore import MindFAISS
from mx_rag.document import LoaderMng
from mx_rag.knowledge.knowledge import KnowledgeStore
from mx_rag.knowledge.handler import upload_files
from mx_rag.knowledge import KnowledgeDB
from mx_rag.retrievers import Retriever
# STET1:构建知识库,首先注册文档处理器
loader_mng = LoaderMng()
# 加载文档加载器,可以使用RAG SDK自有的,也可以使用langchain的
loader_mng.register_loader(loader_class=TextLoader, file_types=[".txt"])
# 加载文档切分器,使用langchain的
loader_mng.register_splitter(splitter_class=RecursiveCharacterTextSplitter,
                             file_types=[".txt"],
                             splitter_params={"chunk_size": 750,
                                              "chunk_overlap": 150,
                                              "keep_separator": False
                                              })
# 初始化embedding模型
emb = TextEmbedding(model_path="/path/to/acge_text_embedding", dev_id=0)
# 初始化向量数据库
vector_store = MindFAISS(x_dim=1024,
                         
                         devs=[0],
                         load_local_index="./faiss.index",
                         auto_save=True
                         )
# 初始化文档chunk关系数据库
chunk_store = SQLiteDocstore(db_path="./sql.db")
# 初始化知识管理关系数据库
knowledge_store = KnowledgeStore(db_path="./sql.db")
#添加知识库及管理员
knowledge_store.add_knowledge(knowledge_name="test", user_id='Default', role='admin')
# 初始化知识库管理
knowledge_db = KnowledgeDB(knowledge_store=knowledge_store,
                           chunk_store=chunk_store,
                           vector_store=vector_store,
                           knowledge_name="test",
                           user_id='Default',
                           white_paths=["/home"]
                           )
# 完成离线知识库构建,上传领域知识gaokao.txt文档。
upload_files(knowledge=knowledge_db,
             files=["/home/data/gaokao.txt"],
             loader_mng=loader_mng,
             embed_func=emb.embed_documents,
             force=True
             )
# STET2:初始化检索器
text_retriever = Retriever(vector_store=vector_store,
                           document_store=chunk_store,
                           embed_func=emb.embed_documents,
                           k=1,
                           score_threshold=0.2
                           )
res = text_retriever.invoke("请描述一下2024年高考语文作文题目")
print(res)