LangchainChatChat批量上传文档到知识库的方法

概要

使用 LangchainChatChat 时,要上传的知识库文件非常多,且分布在不同的文件夹中,使用 Web UI 前端界面进行批量选择上传一次只能全选一个文件夹,所以想到了调用接口上传的办法。

在这里插入图片描述

思路

  • 访问 fastapiapi 文档
    http://LangchainChatChatIP地址:7861/docs
    在这里插入图片描述
  • 找到需要的接口
    在这里插入图片描述
  • 点击 Try it out
  • 随便选择一个文件
  • 填写知识库名称
  • 点击 Execute 执行
  • 得到curl请求
curl -X 'POST' \
  'http://ip:7861/knowledge_base/upload_docs' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'to_vector_store=true' \
  -F 'override=false' \
  -F 'not_refresh_vs_cache=false' \
  -F 'chunk_size=250' \
  -F 'chunk_overlap=50' \
  -F 'zh_title_enhance=false' \
  -F 'files=@1602298756694.txt;type=text/plain' \
  -F 'knowledge_base_name=aiops' \
  -F 'docs={
  "test.txt": [
    {
      "page_content": "custom doc",
      "metadata": {},
      "type": "Document"
    }
  ]
}'
  • curl 改写成 request 请求

代码实现

import os
import requests
from tqdm import tqdm

def upload_txt_files(folder_path, upload_url, knowledge_base_name):
    # 初始化一个空列表,用于存储找到的txt文件的路径
    txt_files = []
    # 初始化一个变量,用于记录找到的txt文件总数
    total_files = 0
    
    # 使用os.walk遍历指定文件夹及其子文件夹
    for root, dirs, files in os.walk(folder_path):
        # 遍历当前文件夹中的所有文件
        for file in files:
            # 如果文件是txt文件,则将其路径添加到txt_files列表中
            if file.endswith(".txt"):
                txt_files.append(os.path.join(root, file))
    # 更新找到的txt文件总数
    total_files = len(txt_files)
    # 打印找到的txt文件总数
    print("Total txt files found:", total_files)

    # 初始化一个变量,用于记录已上传的文件数量
    uploaded_count = 0
    
    with tqdm(total=total_files, desc="Uploading") as pbar:
        # 遍历所有找到的txt文件
        for txt_file in txt_files:
            # 准备上传的文件,包括文件名、文件对象和文件类型
            files = {'files': (os.path.basename(txt_file), open(txt_file, 'rb'), 'text/plain')}
            # 准备上传的数据,包括一些设置参数和知识库名称
            data = {
                'to_vector_store': 'true',
                'override': 'false',
                'not_refresh_vs_cache': 'false',
                'chunk_size': '500',
                'chunk_overlap': '50',
                'zh_title_enhance': 'true',
                'knowledge_base_name': knowledge_base_name
            }
            # 发送POST请求,上传文件
            response = requests.post(upload_url, files=files, data=data)
            # 更新已上传的文件数量
            uploaded_count += 1
            # 更新进度条
            pbar.update(1)
            # 更新进度条的后缀,显示已上传的文件数量
            pbar.set_postfix({"Uploaded": uploaded_count})
            # 打印服务器的响应
            print("Response:", response.text)

if __name__ == "__main__":
    # 设置需要上传的txt文件所在的文件夹路径
    folder_path = "知识库文件夹路径"
    # 设置LangChainChatChat的API上传地址
    upload_url = 'http://填写LangchainChatChatIP地址:7861/knowledge_base/upload_docs'
    # 设置要上传到的知识库的名称
    knowledge_base_name = "填写知识库名称"  
    # 调用函数,开始上传txt文件
    upload_txt_files(folder_path, upload_url, knowledge_base_name)

TODO 进一步优化速度

这个接口是支持批量的,所以可以每次把1000个txt作为一个请求发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值