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" , "kb_name" : "kb_test"
}
4.响应示例
{ "code" : 200 , "msg" : "success" , "data" : { "kb_id" : "KB4c50de98d6b548af9aa0bc5e10b2e3a7" , "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_file FALSE 是 Boolean 是否使用本地目录上传文件:「source/data」,可选:【true,false】
3.请求示例
同步请求示例:
import os
import requestsurl = "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" ) : 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 statisticsfiles = [ ]
for root, dirs, file_names in os. walk( "./docx_data" ) : for file_name in file_names: if file_name. endswith( ".docx" ) : file_path = os. path. join( root, file_name) 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: file_size = os. path. getsize( file_path) total_size += file_sizedata. 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} 秒" ) 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_timeqps = total_requests / total_timeprint ( 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"
}
4.响应示例
{ "code" : 200 , "msg" : "success" , "data" : [ { "kb_id" : "KB973d4aea07f14c60ae1974404a636ad4" , "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" , "kb_id" : "KBb1dd58e8485443ce81166d24f6febda7"
}
4.响应示例
{ "code" : 200 , "msg" : "success" , "data" : { "total" : { "green" : 100 , "red" : 1 , "gray" : 1 , "yellow" : 1 , } , "details" : { { "file_id" : "21a9f13832594b0f936b62a54254543b" , "file_name" : "有道知识库问答产品介绍.pptx" , "status" : "green" } , { "file_id" : "333e69374a8d4b9bac54f274291f313e" , "file_name" : "网易有道智云平台产品介绍2023.6.ppt" , "status" : "green" } , { "file_id" : "709d6c3e071947038645f1f26ad99c6f" , "file_name" : "韦小宝身份证.jpg" , "status" : "green" } , { "file_id" : "85297c0b56104028913e89b6834c1a39" , "file_name" : "成长中心-辅导老师日常问题文档.pdf" , "status" : "green" } , } }
}
五.问答(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" , "kb_ids" : [ "KBb1dd58e8485443ce81166d24f6febda7" ] , "question" : "保险单号是多少?" , "history" : [ ]
}
4.响应示例
{ "code" : 200 , "msg" : "success" , "question" : "保险单号是多少?" , "response" : "保险单号是601J389343982022000536" , "related_questions" : [ ] , "history" : [ [ "保险单号是多少?" , "保险单号是601J389343982022000536。" ] ] , "source_documents" : [ { "file_id" : "f9b794233c304dd5b5a010f2ead67f51" , "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" } ] , "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" , "kb_id" : "KB1271e71c36ec4028a6542586946a3906" , "file_ids" : [ "73ff7cf76ff34c8aa3a5a0b4ba3cf534" ]
}
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" , "kb_ids" : [ "KB1cd81f2bc515437294bda1934a20b235" ]
}
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