QAnything介面文件

扫地升發表於2024-07-01

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_file FALSE Boolean 是否使用本地目錄上傳檔案:「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

相關文章