(RAG系列)FastGPT批量添加索引

devtools/2025/1/20 22:01:35/
aidu_pl">

(RAG系列)FastGPT批量添加索引

      • 引言
      • 版本
      • 使用说明
      • 脚本代码

引言

索引制作:

  • 通过模型对分块内容进行概况

  • 根据文本内容划分特点,例如,文档有明显的大小标题,把标题作为索引

版本

fastgpt v4.8.10

使用说明

根据知识库文档分块内容,提炼相对应的索引,制作索引文件 (xlsx文件)。注意索引要跟分块数量一一对应,不添加索引的把索引设置成 no,而且,该操作会直接覆盖已存在的索引,适用于还未添加索引的场景

脚本代码

import requests
import json
import pandas as pd
import osdef batch_add_index(headers: dict, datasetid: str, get_collection_url: str, get_chunk_url: str, update_index_url: str,parentid=None, index_path=None):index_filename_list = []if index_path != None:try:index_filename_list = os.listdir(index_path)for filename in index_filename_list:if filename.endswith('.xlsx'):continueelse:return print('index_path必须是文件夹路径,并且文件夹中需要是.xlsx后缀的文件')except:return print('index_path必须是文件夹路径,并且文件夹中需要是.xlsx后缀的文件')# 循环知识库里的每一页collection_pagenum = 1while True:get_collectionId = {"pageNum": collection_pagenum,"pageSize": 20,"datasetId": datasetid,"parentId": parentid,"searchText": ""}collection_response = requests.post(url=get_collection_url, headers=headers, json=get_collectionId).json()# 如果知识库该页码为空时,结束当前知识库if collection_response['data']['data'] == []:break# 循环知识库当前页码下的内容for subset in collection_response['data']['data']:# 跳过 手动录入if subset['name'] == '手动录入':continue# 如果是文件夹if subset['type'] == 'folder':# 递归进去batch_add_index(headers, datasetid, get_collection_url, get_chunk_url, update_index_url,parentid=subset['_id'], index_path=index_path)# 如果是链接elif subset['type'] == 'link':continue# 如果时是文件else:# 特用if index_path != None:if subset['name'].replace(subset['name'][subset['name'].find('.'):], '.xlsx') in index_filename_list:print(subset['name'].replace(subset['name'][subset['name'].find('.'):], '.xlsx') + " start")df_index = pd.read_excel(os.path.join(index_path, subset['name'].replace(subset['name'][subset['name'].find('.'):], '.xlsx')))try:df_index = df_index[['index']]except:return print('xlsx文件中第一列第一行第一个单元格应是单词index')df_index_list = df_index['index'].to_list()else:continuenum = 0# 循环文件下的每一页chunk_pagenum = 1while True:get_chunkId = {"pageNum": chunk_pagenum,"pageSize": 24,"collectionId": subset['_id'],"searchText": ""}chunk_response = requests.post(url=get_chunk_url, headers=headers, json=get_chunkId).json()# 如果文件该页码为空时,结束该文件if chunk_response['data']['data'] == []:break# 循环文件当前页码下的chunkfor chunk in chunk_response['data']['data']:try:print("num" + str(num))print("chunk" + str(chunk['chunkIndex']))if(chunk['chunkIndex'] != num) :print("----------------"+ str(chunk['chunkIndex']) + "------------------------")indexes = []if df_index_list[chunk['chunkIndex']] != 'no':p_l = df_index_list[chunk['chunkIndex']].split('\n')p_l = list(set(p_l))filtered_lst = [item for item in p_l if item != '']#print(filtered_lst)for i in filtered_lst:indexes.append({'text': i})update_data = {"dataId": chunk['_id'],"q": chunk['q'],"a": chunk['a'],"indexes": indexes}except:print("********************"+ subset['name'].replace(subset['name'][subset['name'].find('.'):], '.xlsx') + "有报错***************************")update_response = requests.post(url=update_index_url, headers=headers, json=update_data).json()if update_response['code'] != 200:print(update_response)print(f'集合名称:{subset["name"]}\n集合ID:{subset["_id"]}\nchunkID:{chunk["_id"]}\nchunk页码:{chunk_pagenum}')num += 1chunk_pagenum += 1print(subset['name'].replace(subset['name'][subset['name'].find('.'):], '.xlsx') + " over")collection_pagenum += 1if __name__ == '__main__':#账号->API密钥->填在Authorizationheaders = {'Authorization': 'Bearer ','Content-Type': 'application/json',}#知识库ID->打开知识库看浏览器界面链接datasetId = ''get_collection_url = 'http://xxxx:3000/api/core/dataset/collection/list'get_chunk_url = 'http://xxxx:3000/api/core/dataset/data/list'update_index_url = 'http://xxxx:3000/api/core/dataset/data/update'#文件夹ID(如果没有文件夹此项注释)->打开知识库看浏览器界面链接parentId = ''#索引文件(添加index列)->放置索引文件位置index_path = r'D:\mnt\data\111'batch_add_index(headers, datasetId, get_collection_url, get_chunk_url, update_index_url,parentid=parentId,index_path=index_path)

http://www.ppmy.cn/devtools/152201.html

相关文章

4 AXI USER IP

前言 使用AXI Interface封装IP,并使用AXI Interface实现对IP内部寄存器进行读写实现控制LED的demo,这个demo是非常必要的,因为在前面的笔记中基本都需哟PS端与PL端就行通信互相交互,在PL端可以通过中断的形式来告知PS端一些事情&…

turtle教学课程课堂学习考试在线网站

完整源码项目包获取→点击文章末尾名片!

Tesla Free - Fall attack:特斯拉汽车网络安全攻击事件分析

文章目录 一、Tesla Free - Fall attack:特斯拉汽车网络安全事件纪要1. 引言2. 攻击流程2.1 攻击切入点2.2 系统入侵2.3 CAN 总线操控 3. 影响后果4. 特斯拉应对措施5. 研究意义二、安全攻击事件技术分析以及相应的检测和缓解措施 一、Tesla Free - Fall attack&…

数据结构---并查集

目录 一、并查集的概念 二、并查集的实现 三、并查集的应用 一、并查集的概念 在一些实际问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合…

校园跑腿小程序---任务界面 发布以及后端模板下载

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

BERT与CNN结合实现糖尿病相关医学问题多分类模型

完整源码项目包获取→点击文章末尾名片! 使用HuggingFace开发的Transformers库,使用BERT模型实现中文文本分类(二分类或多分类) 首先直接利用transformer.models.bert.BertForSequenceClassification()实现文本分类 然后手动实现B…

C# 数据结构全面解析

在 C# 编程的世界里,数据结构是构建高效程序的基石。合理运用数据结构,能够优化数据的存储和访问方式,显著提升程序的性能。本文将深入探讨 C# 中常见的数据结构及其应用场景。 一、数据结构基础概念 数据结构是一种组织和存储数据的方式&a…

算法分析与设计之贪心算法

文章目录 前言一、Greedy Algorithms1.1 贪心选择性质1.2 最优子结构性质1.3 正确性证明 二、典型例题2.1 Interval Scheduling间隔调度2.2 Interval Partitioning最少间教室排课2.3 Selecting Breakpoints选择加油站停靠点2.4 硬币找零2.5 Scheduling to Minimizing Lateness2…