QAnything接口文档

news2024/7/4 6:12:51

QAnything接口主要包括7个接口:新建知识库、查看知识库、删除知识库;上传文件、获取文件列表、删除文件;问答。

一.新建知识库(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/new_knowledge_base

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
user_id“zzp”String用户id (如需使用前端填zzp不要更换)
kb_name“kb_test”String知识库名称 (可以随意指定)

3.请求示例

{
    "user_id": "zzp",  //用户id
    "kb_name": "kb_test"  //知识库名称
}

4.响应示例

{
        "code": 200, //状态码
        "msg": "success", //提示信息
        "data": {
                "kb_id": "KB4c50de98d6b548af9aa0bc5e10b2e3a7", //知识库id
                "kb_name": "kb_test" //知识库名称
        }
}

二.上传文件(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/upload_files

说明:Content-Type: multipart/form-data

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
files文件二进制[文件类型]需要上传的文件,可多选(当use_lcoal_file为true时,选择无效)
user_id“zzp”String用户id
kb_id“KBb1dd58e8485443ce81166d24f6febda7”String知识库id
mode“strong”String上传模式,soft:文件名重复的文件不再上传,strong:文件名重复的文件强制上传
use_local_fileFALSEBoolean是否使用本地目录上传文件:「source/data」,可选:【true,false】

3.请求示例

同步请求示例:

import os
import requests

url = "http://{your_host}:8777/api/local_doc_qa/upload_files"
folder_path = "./docx_data"
data = {
    "user_id": "zzp",
    "kb_id": "KB6dae785cdd5d47a997e890521acbe1c9"
}

files = []
for root, dirs, file_names in os.walk(folder_path):
    for file_name in file_names:
        if file_name.endswith(".md"):  # 只上传md文件
            file_path = os.path.join(root, file_name)
            files.append(("files", open(file_path, "rb")))

response = requests.post(url, files=files, data=data)
print(response.text)

异步请求示例:

import argparse
import os
import sys
import json
import aiohttp
import asyncio
import time
import random
import string
import hashlib
import statistics

files = []
for root, dirs, file_names in os.walk("./docx_data"):
    for file_name in file_names:
        if file_name.endswith(".docx"):  # 只上传docx文件
            file_path = os.path.join(root, file_name)
            # if len(file_path) < 50:
            # print(file_path)
            files.append(file_path)
print(len(files))
response_times = []

async def send_request(round_, files):
    print(len(files))
    url = 'http://{your_host}:8777/api/local_doc_qa/upload_files'
    data = aiohttp.FormData()
    data.add_field('user_id', 'zzp')
    data.add_field('kb_id', 'KBf1dafefdb08742f89530acb7e9ed66dd')
    data.add_field('mode', 'soft')
    
    total_size = 0
    for file_path in files:
        # print(file_path)
        file_size = os.path.getsize(file_path)
        total_size += file_size
        data.add_field('files', open(file_path, 'rb'))
    print('size:', total_size / (1024 * 1024))
    try:
        start_time = time.time()
        async with aiohttp.ClientSession() as session:
            async with session.post(url, data=data) as response:
                end_time = time.time()
                response_times.append(end_time - start_time)
                print(f"round_:{round_}, 响应状态码: {response.status}, 响应时间: {end_time - start_time}秒")
              #print(await response.json())
    except Exception as e:
        print(f"请求发送失败: {e}")

async def main():
    start_time = time.time()
    num = int(sys.argv[1])  // 一次上传数量,http协议限制一次请求data不能大于100M,请自行控制数量
    round_ = 0
    r_files = files[:num]
    tasks = []
    task = asyncio.create_task(send_request(round_, r_files))
    tasks.append(task)
    await asyncio.gather(*tasks)

    print(f"请求完成")
    end_time = time.time()
    total_requests = len(response_times)
    total_time = end_time - start_time
    qps = total_requests / total_time
    print(f"total_time:{total_time}")

if __name__ == '__main__':
    asyncio.run(main())

4.响应示例

{
        "code": 200,  //状态码
        "msg": "success,后台正在飞速上传文件,请耐心等待",  //提示信息
        "data": [
                {
                        "file_id": "1b6c0781fb9245b2973504cb031cc2f3",  //文件id
                        "file_name": "网易有道智云平台产品介绍2023.6.ppt",  //文件名
                        "status": "gray"  //文件状态(red:入库失败-切分失败,green,成功入库,yellow:入库失败-milvus失败,gray:正在入库)
                },
                {
                        "file_id": "aeaec708c7a34952b7de484fb3374f5d",
                        "file_name": "有道知识库问答产品介绍.pptx",
                        "status": "gray"
                },
                {
                        "file_id": "8ee98a88457c414a986a09c536fedde9",
                        "file_name": "韦小宝身份证.jpg",
                        "status": "gray"
                },
                {
                        "file_id": "67af479f907b497cadb30c6e4b2d3fbc",
                        "file_name": "成长中心-辅导老师日常问题文档.pdf",
                        "status": "gray"
                }
        ]  //文件列表
}

三.查看知识库(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/list_knowledge_base

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
user_id“zzp”String用户id

3.请求示例

{
        "user_id": "zzp" //用户id
}

4.响应示例

{
        "code": 200,  //状态码
        "msg": "success",  //提示信息
        "data": [
                {
                        "kb_id": "KB973d4aea07f14c60ae1974404a636ad4",  //知识库id
                        "kb_name": "kb_test"  //知识库名称
                }
        ]   //知识库列表
}

四.获取文件列表(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/list_files

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
user_id“zzp”String用户id
kb_id“KBb1dd58e8485443ce81166d24f6febda7”String知识库id

3.请求示例

{
        "user_id": "zzp", //用户id  注意需要满足 只含有字母 数字 和下划线且字母开头 的要求
        "kb_id": "KBb1dd58e8485443ce81166d24f6febda7" //知识库id
}

4.响应示例

{
        "code": 200, //状态码
        "msg": "success", //提示信息
        "data": {
                "total": {  // 知识库所有文件状态
                "green": 100,
                "red": 1,
                "gray": 1,
                "yellow": 1,
                },        
                "details": {  // 每个文件的具体状态
                    {
                        "file_id": "21a9f13832594b0f936b62a54254543b", //文件id
                        "file_name": "有道知识库问答产品介绍.pptx", //文件名
                        "status": "green" //文件状态(red:入库失败-切分失败,green,成功入库,yellow:入库失败-milvus失败,gray:正在入库)
                    },
                    {
                        "file_id": "333e69374a8d4b9bac54f274291f313e", //文件id
                        "file_name": "网易有道智云平台产品介绍2023.6.ppt", //文件名
                        "status": "green" //文件状态(red:入库失败-切分失败,green,成功入库,yellow:入库失败-milvus失败,gray:正在入库)
                    },
                    {
                         "file_id": "709d6c3e071947038645f1f26ad99c6f", //文件id
                         "file_name": "韦小宝身份证.jpg", //文件名
                         "status": "green" //文件状态(red:入库失败-切分失败,green,成功入库,yellow:入库失败-milvus失败,gray:正在入库)
                    },
                    {
                        "file_id": "85297c0b56104028913e89b6834c1a39", //文件id
                        "file_name": "成长中心-辅导老师日常问题文档.pdf", //文件名
                        "status": "green" //文件状态(red:入库失败-切分失败,green,成功入库,yellow:入库失败-milvus失败,gray:正在入库)
                    },
                }
        }
}                

五.问答(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/local_doc_chat

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
user_id“zzp”String用户id
kb_ids[“KBb1dd58e8485443ce81166d24f6febda7”]Array知识库id的列表,支持多个知识库联合问答
question“保险单号是多少?”String知识库id的列表,支持多个知识库联合问答
history[[“question1”,“answer1”],[“question2”,“answer2”]]Array历史对话

3.请求示例

{
        "user_id": "zzp", //用户id
        "kb_ids": ["KBb1dd58e8485443ce81166d24f6febda7"], //知识库id,支持多个知识库联合问答
        "question": "保险单号是多少?", //用户问题
        "history": [] //历史对话:List[str]
}

4.响应示例

{
        "code": 200, //状态码
        "msg": "success", //提示信息
        "question": "保险单号是多少?", //用户问题
        "response": "保险单号是601J389343982022000536",  //模型回答
        "related_questions": [],  //相关问题
        "history": [
                [
                        "保险单号是多少?",
                        "保险单号是601J389343982022000536。"
                ]
        ], //历史对话:List[List[str]]
        "source_documents": [
                {
                        "file_id": "f9b794233c304dd5b5a010f2ead67f51", //文本内容对应的文件id
                        "file_name": "一嗨案件支付三者车损、人伤保险赔款及权益转让授权书.docx", //文本内容对应的文件名
                        "content": "未支付第三者车损、人伤赔款及同意直赔第三者确认书 华泰财产保险有限公司  北京   分公司: 本人租用一嗨在贵司承保车辆(车牌号:京KML920)商业险保单号: 601J389343982022000536、交强险保单号:  601J310028493882022000570, 对 2023 年 03 月 25日所发生的保险事故(事故号:  9010020230325004124)中所涉及的交强险和商业险的保险赔款总金额 (依:三者京AFT5538定损金额), 同意支付给本次事故中第三者方。 在此本人确认:本人从未支付给第三者方任何赔偿,且承诺不就本次事故再向贵司及一嗨进行索赔。 同时本人保证如上述内容不属实、违反承诺,造成保险人损失的,由本人承担赔偿责任。 确认人(驾驶员)签字:              第三者方签字: 联系电话:                        联系电话: 确认日期:    年    月    日", //文本内容
                        "retrieval_query": "保险单号是多少?", //文本内容对应的问题
                        "score": "3.5585756", //相关性得分,分数越高越相关
                        "embed_version": "local_v0.0.1_20230525_6d4019f1559aef84abc2ab8257e1ad4c" //embedding模型版本号
                }
        ], //知识库相关文本内容
        "rematched_source_documents": [] //重新匹配的文本内容
}

六.删除文件(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/delete_files

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
user_id“zzp”String用户id
kb_id“KB1271e71c36ec4028a6542586946a3906”String知识库id
file_ids[“73ff7cf76ff34c8aa3a5a0b4ba3cf534”]Array要删除文件的id,支持批量删除

3.请求示例

{
        "user_id": "zzp", //用户id
        "kb_id": "KB1271e71c36ec4028a6542586946a3906", //知识库id
        "file_ids": [
                "73ff7cf76ff34c8aa3a5a0b4ba3cf534"
        ] //文件id列表
}

4.响应示例

{
        "code": 200, //状态码
        "msg": "documents ['73ff7cf76ff34c8aa3a5a0b4ba3cf534'] delete success" //提示信息
}

七.删除知识库(POST)

1.URL

http://{your_host}:8777/api/local_doc_qa/delete_knowledge_base

2.请求参数(Body)

参数名示例参数值是否必填参数类型描述说明
user_id“zzp”String用户id
kb_ids[“KB1cd81f2bc515437294bda1934a20b235”]Array要删除的知识库id,支持批量删除

3.请求示例

{
        "user_id": "zzp", //用户id
        "kb_ids": [
                "KB1cd81f2bc515437294bda1934a20b235"
        ] //知识库id列表
}

4.响应示例

{
        "code": 200, //状态码
        "msg": "Knowledge Base [('KB1cd81f2bc515437294bda1934a20b235',)] delete success" //提示信息
}

参考文献

[1] https://github.com/netease-youdao/QAnything/blob/develop_for_v1.2.2/docs/API.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

试用笔记之-汇通汉诺塔-益智游戏

首先下载汇通汉诺塔&#xff1a; http://www.htsoft.com.cn/download/HanoiTower.rar 汇通汉诺塔游戏规则:把X轴的圈圈都移到Z轴过关。 还可以选择自动游戏哦&#xff0c;看看AI机器人玩汇通汉诺塔

前程无忧滑块

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

启智畅想火车集装箱箱号识别系统,同时识别车皮号、火车底盘号码

1、应用背景 在现代物流体系中&#xff0c;铁路集装箱运输扮演着举足轻重的角色&#xff0c;目前各个铁路系统在管理集装箱车厢进出站时&#xff0c;方法传统&#xff0c;采用人工登记集装箱箱号、车皮号以及火车底盘号码的方式&#xff0c;效率低、错误率高、人员工作量大、信…

湖北大学2024年成人高考函授报名专升本会计学专业介绍

湖北大学&#xff0c;这所坐落于历史文化名城武汉的高等学府&#xff0c;自其创立之初&#xff0c;便秉持着“厚德博学&#xff0c;求是创新”的校训&#xff0c;致力于培养一代又一代的优秀人才。而今&#xff0c;为满足广大社会人士对高等教育的渴求&#xff0c;特别是那些已…

新的里程碑丨deepin校园联盟在拉丁美洲自由软件节上的国际风采

deepin校园联盟秉持推广开源文化与技术的宗旨&#xff0c;在全球技术交流的洪流中&#xff0c;再次于海外掀起热烈浪潮。在厄瓜多尔雅才理工大学&#xff08;Yachay Tech University&#xff09;&#xff0c;deepin校园联盟大使Mosquera率领团队&#xff0c;跨越数百公里之遥&a…

Jenkins教程-12-发送html邮件测试报告

上一小节我们学习了发送钉钉测试报告通知的方法&#xff0c;本小节我们讲解一下发送html邮件测试报告的方法。 1、自动化用例执行完后&#xff0c;使用pytest_terminal_summary钩子函数收集测试结果&#xff0c;存入本地status.txt文件中&#xff0c;供Jenkins调用 #conftest…

Optional类方法

Optional类 方法empty()方法of(T value)ofNullable(T value)filter(Predicate<? super T> predicate)get()ifPresent(Consumer<? super T> consumer)isPresent()map(Function<? super T,? extends U> mapper)orElse(T other)orElseGet(Supplier<? ex…

如何实现Action菜单

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容&#xff0c;本章回中将介绍自定义Action菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

Swift 中的 StoreKit 测试

文章目录 前言创建一个 StoreKit Demo使用 SKTestSessionaskToBuyEnabled 属性总结前言 StoreKit 框架的第二次迭代是我在过去几年中应用程序中最重大的变化。最近版本的 StoreKit 框架已完全采用了 Swift 语言特性,如 async 和 await。本篇内容我们将讨论 StoreKitTest 框架…

AutoGen 两个agent讲相声

Lesson 1: Multi-Agent Conversation and Stand-up Comedy 第 1 课&#xff1a;多人对话和单口相声 Setup from utils import get_openai_api_key OPENAI_API_KEY get_openai_api_key() llm_config {"model": "gpt-3.5-turbo"}Define an AutoGen agent…

教育心理学期末考试重点

人本主义学习理论 人本主义主张&#xff0c;心理学应当把人作为一个整体来研究&#xff0c;而不是将人的心理肢解为不完整的几个部分&#xff0c;应该研究正常的人&#xff0c;而且更应该关注人的高级心理活动&#xff0c;如热情、信念、生命、尊严等内容。人本主义的学习理论…

线性代数|机器学习-P20鞍点和极值

文章目录 1 . 瑞利商的思考1.1 瑞利商的定义1.2 投影向量 2. 拉格朗日乘子法3. 鞍点4. 线性拟合4.1 范德蒙矩阵线性拟合4.2 python 代码4.3 范德蒙矩阵缺点 5. 均值和方差5.1 样本均值和方差5.2 总体期望 μ \mu μ,总体方差 σ 2 \sigma^2 σ2 1 . 瑞利商的思考 1.1 瑞利商…

算法金 | Transformer,一个神奇的算法模型!!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 在现代自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Transformer 模型的出现带来了革命性的变…

算法 —— 滑动窗口

目录 长度最小的子数组 无重复字符的最长子串 最大连续1的个数 将x减到0的最小操作数 找到字符串中所有字母异位词 长度最小的子数组 sum比target小就进窗口&#xff0c;sum比target大就出窗口&#xff0c;由于数组是正数&#xff0c;所以相加会使sum变大&#xff0c;相减…

云计算与生成式AI的技术盛宴!亚马逊云科技深圳 Community Day 社区活动流程抢先知道!

小李哥最近要给大家分享7月7日在深圳的即将举办的亚马逊云科技生成式AI社区活动Community Day &#xff0c;干货很多内容非常硬核&#xff0c;不仅有技术分享学习前沿AI技术&#xff0c;大家在现场还可以动手实践沉浸式体验大模型&#xff0c;另外参与现场活动还可以领取诸多精…

高优先线程

你开发的时候有么有遇到过一个问题&#xff1a;服务器的一个服务线程过几个小时断连一次&#xff0c;断连之后会马上重连这种情况。这是由于CPU负载较高,线程调度时将处理数据的线程挂起了一段时间导致的。 因此&#xff0c;我有考虑到把cpu的核心进行分散开来&#xff0c;就类…

关于发那科机器人系统升级方法

首先需要镜像备份和全备份&#xff0c;最好把机器人要到刻度线位置&#xff0c;零点位置 选择控制器启动&#xff0c;也可以按preevnext进入控制器模式

技术革新:如何用数据中台实现数字化转型

作为程序员&#xff0c;我们总是对技术如何改变企业运作充满好奇。今天&#xff0c;我们将深入探讨森马集团如何利用数据中台技术&#xff0c;实现从传统数据分析到数字化转型的华丽转身。 1. 技术背景&#xff1a;森马集团的数字化挑战 森马集团&#xff0c;一个在服饰行业占…

幻兽帕鲁服务器如何安装模组安装

由于模组多数为Window版本的&#xff0c;所以本教程以服务端为Window的作为演示&#xff08;Linux服务端的也是一样的操作&#xff09;百度莱卡云开服 如果你你是Linux版本的&#xff0c;请点击跳转切换服务端教程 接下来是本地安装模组包的方法&#xff08;服务器自带&#xf…

浅谈定时器之同步定时器

浅谈定时器之同步定时器 “同步定时器”&#xff08;Synchronizing Timer&#xff09;是一个特别的定时器&#xff0c;它用于确保在特定时间点上多个线程&#xff08;或虚拟用户&#xff09;同时发起请求&#xff0c;这对于测试系统在高并发情况下的表现尤为重要。本文将深入解…