- wwwroot/api/ 六个对外端点(Bearer Key 鉴权,路由授 any、业务鉴权在 api_core):
kb_create/kb_delete/doc_upload/doc_delete/tag_create/doc_set_tags/search
- rag/api_core.py: verify_api_key + make_api_env(org注入) + 六个业务核心
(复用 init.py 底层检索/入库能力,杜绝双实现分叉)
- 统一返回格式 {"status":"ok"|"error","data":...}
- rag/ingest.py: 入库管线从 upload_file.dspy 抽出共享(UI/API同一引擎)
- rag/tools.py: RAG_TOOL_SCHEMAS + exec_rag_tool(与API同构,供内部助手调用)
- rag_api_keys 表 model(key 只存 SHA256);管理端 api_key_create/list/revoke
- load_path.py 注册 7 个 API 端点(any) + 3 个管理端点(logined)
25 lines
1.2 KiB
Plaintext
25 lines
1.2 KiB
Plaintext
# 管理端:启用/禁用 API Key(只能操作本机构)
|
||
# POST /rag/knowledge_bases_list/api_key_revoke.dspy params: {key_id, action=disable|enable|delete}
|
||
ns = params_kw.copy()
|
||
env = request._run_ns
|
||
org_id = await env.get_userorgid()
|
||
key_id = (ns.get('key_id') or '').strip()
|
||
action = (ns.get('action') or 'disable').strip()
|
||
if not key_id:
|
||
return json.dumps({"status": "error", "error": "key_id required"})
|
||
db = DBPools()
|
||
async with db.sqlorContext(get_module_dbname('rag')) as sor:
|
||
recs = await sor.sqlExe(
|
||
"SELECT id FROM rag_api_keys WHERE id=${k}$ AND org_id=${o}$", {"k": key_id, "o": org_id})
|
||
await sor.sqlExe("COMMIT", {})
|
||
if not recs:
|
||
return json.dumps({"status": "error", "error": "key not found in your org"})
|
||
if action == 'delete':
|
||
await sor.sqlExe("DELETE FROM rag_api_keys WHERE id=${k}$", {"k": key_id})
|
||
elif action == 'enable':
|
||
await sor.sqlExe("UPDATE rag_api_keys SET status='active' WHERE id=${k}$", {"k": key_id})
|
||
else:
|
||
await sor.sqlExe("UPDATE rag_api_keys SET status='disabled' WHERE id=${k}$", {"k": key_id})
|
||
await sor.sqlExe("COMMIT", {})
|
||
return json.dumps({"status": "SUCCEEDED", "action": action, "key_id": key_id})
|