昇腾社区首页
中文
注册

upload_dir

功能描述

将指定目录下的文档保存在知识库中,仅知识库管理员有权限操作。如果文档重复,可选择强制覆盖。文档数据明文存储,请注意安全风险。只遍历当前目录下的文件,不递归查找子目录文件,目录中未注册加载器的文件类型会跳过,当上传的文档数量超过知识库的max_file_count最大限制时会退出,如果某个文档添加失败会抛出异常。

函数原型

from mx_rag.knowledge import upload_dir, FilesLoadInfo
FilesLoadInfo(knowledge, dir_path, loader_mng, embed_func, force, load_image)
def upload_dir(params: FilesLoadInfo):

内部工作流程

参数说明

参数名

数据类型

可选/必选

说明

params

FilesLoadInfo

必选

上传目录的参数对象。具体类型介绍请参见表1

表1 FilesLoadInfo类型介绍

参数名

数据类型

可选/必选

说明

knowledge

KnowledgeDB

必选

知识库对象,数据类型参见KnowledgeDB类

dir_path

str

必选

知识文档存放目录路径,路径长度取值范围为[1, 1024],目录下文档路径不能为软链接且不允许存在".."。在upload_dir下限制路径下文件个数默认不超过8000个。

loader_mng

LoaderMng

必选

提供文档解析函数的管理类对象,数据类型参见LoaderMng类

embed_func

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

必选

嵌入函数,把文件信息转换为向量。

force

bool

可选

是否强制覆盖旧数据,如果选择否,文档重复会抛出异常。默认为“False”

load_image

bool

可选

是否支持图片类型文件,默认为False。

  • 如果选择False,表示只支持文档类型如".docx"、".txt"、".md"等,具体支持类型为loader_mng注册器中loader和splitter方法支持类型的交集。
  • 如果选择True表示只支持图片类型,支持的范围仅限于loader_mng注册器中loader方法支持的类型与[".jpg", ".png"]的交集。

当支持文档类型的解析时,对应的embed_func嵌入函数应该支持对应文档类型;当支持图片类型的解析时,对应的embed_func嵌入函数也应该支持图片类型,否则会出现错误。

返回值说明

数据类型

说明

List[str]

添加到知识库中失败的文件列表,包括不支持的文档类型文件和上传失败的文件。

调用示例

from mx_rag.embedding.local import TextEmbedding
from mx_rag.knowledge import KnowledgeStore, KnowledgeDB, upload_files, delete_files, FilesLoadInfo
from mx_rag.document import LoaderMng
from mx_rag.storage.document_store import SQLiteDocstore
from mx_rag.storage.vectorstore import MindFAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from mx_rag.knowledge import upload_dir
from mx_rag.document.loader import DocxLoader, PdfLoader, ExcelLoader

loader_mng = LoaderMng()
loader_mng.register_loader(DocxLoader, [".docx"])
loader_mng.register_loader(PdfLoader, [".pdf"])
loader_mng.register_loader(ExcelLoader, [".xlsx"])
# loader_mng.register_loader(ImageLoader, [".png"])
loader_mng.register_splitter(RecursiveCharacterTextSplitter,
                             [".docx", ".pdf", ".xlsx"])
# 设置向量检索使用的NPU卡
dev = 0
# 加载embedding模型
emb = TextEmbedding("/path/to/model", dev_id=dev)
# 初始化向量数据库
vector_store = MindFAISS(x_dim=1024, devs=[dev], 
                         load_local_index="/path/to/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/"])
# 上传领域知识文档
# 调用upload_files
upload_files(knowledge=knowledge_db, files=["/path/data/test.docx"], loader_mng=loader_mng,
             embed_func=emb.embed_documents, force=True)
# 上传领域知识文档目录
# 调用upload_dir
params = FilesLoadInfo(knowledge=knowledge_db, dir_path="/path/data/files", loader_mng=loader_mng,
                       embed_func=emb.embed_documents, force=True, load_image=False)
upload_dir(params=params)
# 调用delete_files
delete_files(knowledge_db, ["test.docx"])