概述
文章《FastGPT原理分析-数据集创建第一步》已经分析了数据集创建的第一步:文件上传和预处理的实现逻辑。本文介绍文件上传后,数据处理任务的具体实现逻辑。
数据集创建总体实现步骤
从上文可知数据集创建总体上来说分为两大步骤:
(1)文件上传和预处理,并验证各种配置和参数的合法性;
(2)触发数据处理任务,对数据进行向量化处理和QA问答对的处理。
本文介绍第二步的详细实现逻辑。
数据处理的触发的实现逻辑
在FastGPT中会在启动时注册一个监控mongodb的insert插入动作的函数。当有数据插入到mongodb对应的数据表dataset_trainings时,就会触发对应的数据处理的执行。
根据任务类型来调用对应的处理函数。
3.数据处理的触发
在系统初始化时,FastGPT注册了一个监听mongodb插入动作的处理函数代码如下:
export async function register() {
// ...
startMongoWatch(); // 监控mongodb的动作
//...
}
// startMongoWatch函数的实现
export const startMongoWatch = async () => {
reloadConfigWatch();
refetchSystemPlugins();
createDatasetTrainingMongoWatch(); //在这里注册mongodb的数据处理函数
};
// 创建mongodb的插入操作的监控任务处理
export const createDatasetTrainingMongoWatch = () => {
const changeStream = MongoDatasetTraining.watch();
changeStream.on('change', async (change) => {
try {
// 监控mongodb的插入操作
if (change.operationType === 'insert') {
const fullDocument = change.fullDocument as DatasetTrainingSchemaType;
const { mode } = fullDocument;
// 训练类型:QA问答对处理方式
if (mode === TrainingModeEnum.qa) {
generateQA();
} else if (mode === TrainingModeEnum.chunk) {
// chunk处理方式
generateVector();
}
}
} catch (error) {}
});
};
总结
本文介绍了文件上传后的任务触发方式。可以看到,是通过监控mongodb数据表dataset_trainings的插入操作来触发数据处理任务。有两种数据处理方式:(1)QA问答方式数据处理;(2)嵌入向量处理方式。后面会介绍这两种方式的具体实现逻辑。