当前位置: 首页 > news >正文

Qanything 2 0源码解析系列1:新建知识库

Qanything 2.0源码解析系列1:新建知识库

文章转载自:https://www.feifeixu.top/article/19c76951-5881-4181-bb63-4188b28d3917

如何启动qanything服务,参考 Qanything 2.0项目部署启动手把手教程

📝 逐行代码解析

handle.py中找到new_knowledge_base这个方法。

@get_time_async
async def new_knowledge_base(req: request):# local_doc_qa这个是在app.run启动之前初始化好的一个全局变量,是LocalDocQA类的类对象,是Qanything的核心类。local_doc_qa: LocalDocQA = req.app.ctx.local_doc_qa# 拿到请求参数传递的user_id的值user_id = safe_get(req, 'user_id')# 拿到请求参数传递的user_info的值,不传默认是1234user_info = safe_get(req, 'user_info', "1234")'''检查user_id和user_info的有效性1. user_id、user_info不能是None2. user_id的长度不能超过64,必须是字符串类型,只能是数字、字母、下划线的组合,且必须以字母开头3. user_info必须是纯数字'''passed, msg = check_user_id_and_user_info(user_id, user_info)if not passed:return sanic_json({"code": 2001, "msg": msg})# 将user_id和user_info拼成一个新user_iduser_id = user_id + '__' + user_infodebug_logger.info("new_knowledge_base %s", user_id)# 拿到请求参数传递的kb_name的值kb_name = safe_get(req, 'kb_name')debug_logger.info("kb_name: %s", kb_name)# 随机初始化一个默认kb_iddefault_kb_id = 'KB' + uuid.uuid4().hex# 如果请求参数中传递了kb_id,那么以请求传递的这个做为kb_id,否则以随机初始化的作为kb_idkb_id = safe_get(req, 'kb_id', default_kb_id)'''kb_id纠正, 就是在这个kb_id后面拼接一个KB_SUFFIX,如果有这个KB_SUFFIX,直接返回kb_id,如果不存在,那么:1. 如果kb_id以"_FAQ"结尾,比如KBc86eaa3f278f4ef9908780e8e558c6eb_FAQ,那么在kb_id和FAQ之间增加一个KB_SUFFIX,默认是_240625, 最终变成了如KBc86eaa3f278f4ef9908780e8e558c6eb_240625_FAQ2. 如果kb_id不以"_FAQ"结尾,直接在kb_id后面增加一个KB_SUFFIX3. 返回新的kb_id'''kb_id = correct_kb_id(kb_id)# 拿到请求参数传递的quick的值is_quick = safe_get(req, 'quick', False)if is_quick:kb_id += "_QUICK"# kb_id必须以“KB”开头if kb_id[:2] != 'KB':return sanic_json({"code": 2001, "msg": "fail, kb_id must start with 'KB'"})# 从mysql qanything数据库 KnowledgeBase表中 查看这个user_id对应的kb_id是否存在not_exist_kb_ids = local_doc_qa.milvus_summary.check_kb_exist(user_id, [kb_id])# kb_id如果存在,直接返回已存在if not not_exist_kb_ids:return sanic_json({"code": 2001, "msg": "fail, knowledge Base {} already exist".format(kb_id)})# local_doc_qa.create_milvus_collection(user_id, kb_id, kb_name)'''先从User表中检查一下User_id是否存在,如果不存在,往User表中插入一条记录,包含(user_id, user_name)这两个字段,user_name默认为None。这里官方有个bug,有人提了issue:https://github.com/netease-youdao/QAnything/issues/506. 自己先改一下代码。往KnowledgeBase表中,插入一条记录,kb_id, user_id, kb_name'''local_doc_qa.milvus_summary.new_milvus_base(kb_id, user_id, kb_name)now = datetime.now()timestamp = now.strftime("%Y%m%d%H%M")return sanic_json({"code": 200, "msg": "success create knowledge base {}".format(kb_id),"data": {"kb_id": kb_id, "kb_name": kb_name, "timestamp": timestamp}})

🤗 总结归纳

新建知识库请求传参如下:

{"user_id": "feifeixu","kb_name": "qanything2.0","kb_id": "KBb17bd2d168604a84a59abe24e855d574"
}

返回结果:

{"code": 200,"msg": "success create knowledge base KBb17bd2d168604a84a59abe24e855d574_240625","data": {"kb_id": "KBb17bd2d168604a84a59abe24e855d574_240625","kb_name": "qanything2.0","timestamp": "202409191505"}
}

新建知识库主要是写数据库的操作,主要涉及两张表:

  1. 在User表中增加user_id的记录
  2. 在KnowledgeBase中增加user_id, kb_id, kb_name的记录

📎 参考文章

相关文章:

Qanything 2 0源码解析系列1:新建知识库

Qanything 2.0源码解析系列1:新建知识库 文章转载自:https://www.feifeixu.top/article/19c76951-5881-4181-bb63-4188b28d3917 😀 前言: qanything所有接口都定义在sanic_api.py中 接口函数定义在同级目录下的handler.py中 新建…...

Redis-01 入门和十大数据类型

Redis支持两种持久化方式:RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上,可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照,可以通过恢复RDB文件来恢复数据。 2.AOF持久化…...

IT行业的现状与未来发展趋势

IT行业的现状与未来发展趋势 近年来,随着科技的迅猛发展,IT行业无疑已经成为全球经济增长的重要驱动力之一。无论是人工智能、大数据,还是云计算和区块链技术,IT行业的创新始终在不断推动着各个领域的变革。 人工智能的广泛应用…...

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台 Jenkins 是一个开源的自动化服务器,用于持续集成(CI)和持续交付(CD)软件项目。它允许开发人员在软件开发过程中自动化各种任务&…...

今日 leetCode 15.三数之和

15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元…...

Games101笔记-二维Transform变换(二)

1、什么是Transform Transform就是通过一个矩阵,进行缩放、旋转、平移等变换 2、缩放、旋转、切变、平移等基础变换 缩放变换: 反射变换: 切变: 绕原点旋转: 以上都是线性变换: 平移变换&#xf…...

【洛谷】AT_abc371_c [ABC371C] Make Isomorphic 的题解

【洛谷】AT_abc371_c [ABC371C] Make Isomorphic 的题解 洛谷传送门 AT传送门 题解 抽象题目,抽象翻译,可能是我太菜了,根本没看懂题目,后面是听大佬讲题才发现,这不就是一题全排列暴力题吗。谔谔,真的…...

全国职业院校技能大赛(大数据赛项)-平台搭建Spark、Scala笔记

Spark作为一个开源的分布式计算框架拥有高效的数据处理能力、丰富的生态系统、多语言支持以及广泛的行业应用。Scala是一种静态类型的编程语言,它结合了面向对象编程和函数式编程的特性,被誉为通用的“大数据语言”。而二者的结合更能迸发出新奇的化学反…...

【Java】JVM基本组成

一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …...

解决【WVP服务+ZLMediaKit媒体服务】加入海康摄像头后,能发现设备,播放/点播失败,提示推流超时!

环境介绍 每人搭建的环境不一样,情况不一样,但是原因都是下面几种: wvp配置不当网络端口未放开网络不通 我搭建的环境: WVP服务:windows下,用idea运行的源码 ZLM服务:虚拟机里 问题描述 1.…...

淘宝商品详情接口item_get响应参数解析:props、props_list、prop_img

在电商数据分析和应用开发中,淘宝商品详情接口item_get是一个至关重要的工具。通过该接口,开发者可以高效地获取淘宝平台商品的详细信息,从而优化商品展示、搜索、推荐等功能,提升用户体验和转化率。本文将详细解析item_get接口的…...

Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)

一、显示效果展示 二、OpenCV 4.5.0 OpenCV 4.5.0是OpenCV(Open Source Computer Vision Library,开源计算机视觉库)的一个重要更新版本,该版本在多个方面进行了优化和新增了多项功能。 三、ONNX模型 ONNX(Open Neu…...

Pandas_iloc_loc_哪个是inclusive哪个是exclusive

iloc 和 loc 包括不包括结尾写的那个行(列)? 不一样! iloc[istart:iend] exclusive on iend 不包括结尾那行(列)! loc[start:end] inclusive on end 包括结尾那行(列)&am…...

python是什么语言写的

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火,可有人提问,这么火的语言它的底层又是什么语言编写的呢? python是C语言编写的,它有很多包也是用C语言写的。 所以说,C语言还是很…...

python编程,把所有子目录和文件输出到文本文件

要将所有子目录和文件输出到文本文件,你可以使用Python的os模块来遍历目录结构,并将结果写入文件。以下是一个简单的Python脚本示例,它会递归地遍历指定目录,并将每个子目录和文件的相对路径写入到一个文本文件中: im…...

使用 IntelliJ IDEA 连接到达梦数据库(DM)

前言 达梦数据库是一款国产的关系型数据库管理系统,因其高性能和稳定性而被广泛应用于政府、金融等多个领域。本文将详细介绍如何在 IntelliJ IDEA 中配置并连接到达梦数据库。 准备工作 获取达梦JDBC驱动: 访问达梦在线服务平台网站或通过其他官方渠道…...

【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

Java中的事件(动作监听-ActionListener)

(一)、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件,例如:按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法,该方法会在动作发生时被调用。 &#…...

STM32篇:开发环境安装

编程语言:C语言 需要安装的软件有两个:Keil5 和 STM32CubeMX 一.Keil5 的安装 使用 Keil4 写 STM32 代码其实也是可以,但需要很复杂的配置,不建议新手操作。 比较推荐 Keil5 编写 STM32 ,只需要一些简单的设置就可…...

AIGC实战——多模态模型Flamingo

AIGC实战——多模态模型Flamingo 0. 前言1. Flamingo 架构2. 视觉编码器3. Perceiver 重采样器4. 语言模型5. FIamingo 应用小结系列链接0. 前言 我们已经学习了文本生成图像模型 DALL.E 2,在本节中,我们将探索另一种多模态模型 Flamingo,它可以根据给定文本和视觉数据流生…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...