rag
This commit is contained in:
parent
0fdb0d3393
commit
a939351267
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user