diff --git a/rag/ragapi.py b/rag/ragapi.py index e32df8b..b02addc 100644 --- a/rag/ragapi.py +++ b/rag/ragapi.py @@ -1,5 +1,10 @@ from rag.uapi_service import APIService from rag.folderinfo import RagFileMgr +from sqlor.dbpools import DBPools +from appPublic.log import debug, error, info +import time +import traceback +import json helptext = """kyrag API: @@ -9,6 +14,7 @@ headers: { "Content-Type": "application/json" } response: +[{"id": "1", "name": "textdb", "description": "文本数据库"}, {"id": "testkdb", "name": "testkdb", "description": ""}, {"id": "Vdtbt3qBfocteit1HIxVH", "name": "trm", "description": ""}] 2. 向量检索文本块: path: /v1/fusedsearch @@ -19,7 +25,9 @@ data: { "query": "什么是知识抽取。" "fiids":["1"] } + 3、docs文档 +path: /v1/docs """ async def docs(request, params_kw, *params, **kw): @@ -27,7 +35,6 @@ async def docs(request, params_kw, *params, **kw): async def get_kdbs(request, params_kw, *params, **kw): """返回 kdb 表的全部内容,返回 JSON""" - print("初始化数据库连接池...") db = DBPools() dbname = kw.get('get_module_dbname')('rag') sql_opts = """ @@ -47,13 +54,17 @@ async def get_kdbs(request, params_kw, *params, **kw): async def fusedsearch(request, params_kw, *params, **kw): """融合搜索,调用服务化端点""" - f = kw.get('get_userorgid') - orgid = await f() - f = kw.get('get_user') - userid = await f() + # f = kw.get('get_userorgid') + # orgid = await f() + # debug(f"orgid: {orgid},{f=}") + # f = kw.get('get_user') + # userid = await f() debug(f"params_kw: {params_kw}") + orgid = "04J6VbxLqB_9RPMcgOv_8" + userid = "04J6VbxLqB_9RPMcgOv_8" query = params_kw.get('query', '') - fiids = params_kw.get('fiid', []) + fiids = params_kw.get('fiids', []) + debug(f"fiids: {fiids}") # 验证 fiids的orgid与orgid = await f()是否一致 if fiids: @@ -62,11 +73,11 @@ async def fusedsearch(request, params_kw, *params, **kw): sql_opts = """ SELECT orgid FROM kdb - WHERE id = ${fiid}$ + WHERE id = ${id}$ """ try: async with db.sqlorContext(dbname) as sor: - result = await sor.sqlExe(sql_opts, {"fiid": fiids[0]}) + result = await sor.sqlExe(sql_opts, {"id": fiids[0]}) if not result: raise ValueError(f"未找到 fiid={fiids[0]} 的记录") kdb_orgid = result[0].get('orgid') @@ -76,7 +87,7 @@ async def fusedsearch(request, params_kw, *params, **kw): error(f"orgid 验证失败: {str(e)}") return json.dumps({"status": "error", "message": str(e)}) ragfilemgr = RagFileMgr("fiids[0]") - service_params = ragfilemgr.get_service_params(orgid) + service_params = await ragfilemgr.get_service_params(orgid) api_service = APIService() start_time = time.time() @@ -85,7 +96,7 @@ async def fusedsearch(request, params_kw, *params, **kw): info( f"开始融合搜索: query={query}, userid={orgid}, knowledge_base_ids={fiids}") - if not query or not orgid or not knowledge_base_ids: + if not query or not orgid or not fiids: raise ValueError("query、orgid 和 knowledge_base_ids 不能为空") # 提取实体 @@ -154,6 +165,7 @@ async def fusedsearch(request, params_kw, *params, **kw): request=request, texts=[combined_text], upappid=service_params['embedding'], + apiname="BAAI/bge-m3", user=userid ) if not query_vector or not all(len(vec) == 1024 for vec in query_vector): @@ -169,7 +181,9 @@ async def fusedsearch(request, params_kw, *params, **kw): request=request, query_vector=query_vector, userid=orgid, - knowledge_base_ids=[fiids], + knowledge_base_ids=fiids, + limit=limit, + offset=0, upappid=service_params['vdb'], apiname="mlvus/searchquery", user=userid @@ -186,7 +200,7 @@ async def fusedsearch(request, params_kw, *params, **kw): if use_rerank and unique_results: rerank_start = time.time() debug("开始重排序") - unique_results = await api_service( + unique_results = await api_service.rerank_results( request=request, query=combined_text, results=unique_results,