@@ -20,19 +20,194 @@ async def get_databases(current_user: User = Depends(get_admin_user)):
2020 return {"message" : f"获取数据库列表失败 { e } " , "databases" : []}
2121 return database
2222
23+ @data .get ("/kb-types" )
24+ async def get_knowledge_base_types (current_user : User = Depends (get_admin_user )):
25+ """获取支持的知识库类型"""
26+ try :
27+ kb_types = knowledge_base .get_supported_kb_types ()
28+ return {"kb_types" : kb_types , "message" : "success" }
29+ except Exception as e :
30+ logger .error (f"获取知识库类型失败 { e } , { traceback .format_exc ()} " )
31+ return {"message" : f"获取知识库类型失败 { e } " , "kb_types" : {}}
32+
33+ @data .get ("/stats" )
34+ async def get_knowledge_base_statistics (current_user : User = Depends (get_admin_user )):
35+ """获取知识库统计信息"""
36+ try :
37+ stats = knowledge_base .get_statistics ()
38+ return {"stats" : stats , "message" : "success" }
39+ except Exception as e :
40+ logger .error (f"获取知识库统计失败 { e } , { traceback .format_exc ()} " )
41+ return {"message" : f"获取知识库统计失败 { e } " , "stats" : {}}
42+
43+ @data .get ("/query-params/{db_id}" )
44+ async def get_knowledge_base_query_params (db_id : str , current_user : User = Depends (get_admin_user )):
45+ """获取知识库类型特定的查询参数"""
46+ try :
47+ # 获取数据库信息
48+ db_info = knowledge_base .get_database_info (db_id )
49+ if not db_info :
50+ raise HTTPException (status_code = 404 , detail = "Database not found" )
51+
52+ kb_type = db_info .get ("kb_type" , "lightrag" )
53+
54+ # 根据知识库类型返回不同的查询参数
55+ if kb_type == "lightrag" :
56+ params = {
57+ "type" : "lightrag" ,
58+ "options" : [
59+ {
60+ "key" : "mode" ,
61+ "label" : "检索模式" ,
62+ "type" : "select" ,
63+ "default" : "mix" ,
64+ "options" : [
65+ {"value" : "local" , "label" : "Local" , "description" : "上下文相关信息" },
66+ {"value" : "global" , "label" : "Global" , "description" : "全局知识" },
67+ {"value" : "hybrid" , "label" : "Hybrid" , "description" : "本地和全局混合" },
68+ {"value" : "naive" , "label" : "Naive" , "description" : "基本搜索" },
69+ {"value" : "mix" , "label" : "Mix" , "description" : "知识图谱和向量检索混合" },
70+ ]
71+ },
72+ {
73+ "key" : "only_need_context" ,
74+ "label" : "只使用上下文" ,
75+ "type" : "boolean" ,
76+ "default" : True ,
77+ "description" : "只返回上下文,不生成回答"
78+ },
79+ {
80+ "key" : "only_need_prompt" ,
81+ "label" : "只使用提示" ,
82+ "type" : "boolean" ,
83+ "default" : False ,
84+ "description" : "只返回提示,不进行检索"
85+ },
86+ {
87+ "key" : "top_k" ,
88+ "label" : "TopK" ,
89+ "type" : "number" ,
90+ "default" : 10 ,
91+ "min" : 1 ,
92+ "max" : 100 ,
93+ "description" : "返回的最大结果数量"
94+ }
95+ ]
96+ }
97+ elif kb_type == "chroma" :
98+ params = {
99+ "type" : "chroma" ,
100+ "options" : [
101+ {
102+ "key" : "top_k" ,
103+ "label" : "TopK" ,
104+ "type" : "number" ,
105+ "default" : 10 ,
106+ "min" : 1 ,
107+ "max" : 100 ,
108+ "description" : "返回的最大结果数量"
109+ },
110+ {
111+ "key" : "similarity_threshold" ,
112+ "label" : "相似度阈值" ,
113+ "type" : "number" ,
114+ "default" : 0.0 ,
115+ "min" : 0.0 ,
116+ "max" : 1.0 ,
117+ "step" : 0.1 ,
118+ "description" : "过滤相似度低于此值的结果"
119+ },
120+ {
121+ "key" : "include_distances" ,
122+ "label" : "显示相似度" ,
123+ "type" : "boolean" ,
124+ "default" : True ,
125+ "description" : "在结果中显示相似度分数"
126+ }
127+ ]
128+ }
129+ elif kb_type == "milvus" :
130+ params = {
131+ "type" : "milvus" ,
132+ "options" : [
133+ {
134+ "key" : "top_k" ,
135+ "label" : "TopK" ,
136+ "type" : "number" ,
137+ "default" : 10 ,
138+ "min" : 1 ,
139+ "max" : 100 ,
140+ "description" : "返回的最大结果数量"
141+ },
142+ {
143+ "key" : "similarity_threshold" ,
144+ "label" : "相似度阈值" ,
145+ "type" : "number" ,
146+ "default" : 0.0 ,
147+ "min" : 0.0 ,
148+ "max" : 1.0 ,
149+ "step" : 0.1 ,
150+ "description" : "过滤相似度低于此值的结果"
151+ },
152+ {
153+ "key" : "include_distances" ,
154+ "label" : "显示相似度" ,
155+ "type" : "boolean" ,
156+ "default" : True ,
157+ "description" : "在结果中显示相似度分数"
158+ },
159+ {
160+ "key" : "metric_type" ,
161+ "label" : "距离度量类型" ,
162+ "type" : "select" ,
163+ "default" : "COSINE" ,
164+ "options" : [
165+ {"value" : "COSINE" , "label" : "余弦相似度" , "description" : "适合文本语义相似度" },
166+ {"value" : "L2" , "label" : "欧几里得距离" , "description" : "适合数值型数据" },
167+ {"value" : "IP" , "label" : "内积" , "description" : "适合标准化向量" }
168+ ],
169+ "description" : "向量相似度计算方法"
170+ }
171+ ]
172+ }
173+ else :
174+ # 未知类型,返回基本参数
175+ params = {
176+ "type" : "unknown" ,
177+ "options" : [
178+ {
179+ "key" : "top_k" ,
180+ "label" : "TopK" ,
181+ "type" : "number" ,
182+ "default" : 10 ,
183+ "min" : 1 ,
184+ "max" : 100 ,
185+ "description" : "返回的最大结果数量"
186+ }
187+ ]
188+ }
189+
190+ return {"params" : params , "message" : "success" }
191+
192+ except Exception as e :
193+ logger .error (f"获取知识库查询参数失败 { e } , { traceback .format_exc ()} " )
194+ return {"message" : f"获取知识库查询参数失败 { e } " , "params" : {}}
195+
23196@data .post ("/" )
24197async def create_database (
25198 database_name : str = Body (...),
26199 description : str = Body (...),
27200 embed_model_name : str = Body (...),
201+ kb_type : str = Body ("lightrag" ), # 新增:知识库类型参数,默认为lightrag
28202 current_user : User = Depends (get_admin_user )
29203):
30- logger .debug (f"Create database { database_name } " )
204+ logger .debug (f"Create database { database_name } with kb_type { kb_type } " )
31205 try :
32206 embed_info = config .embed_model_names [embed_model_name ]
33207 database_info = knowledge_base .create_database (
34208 database_name ,
35209 description ,
210+ kb_type = kb_type , # 传递知识库类型
36211 embed_info = embed_info
37212 )
38213 except Exception as e :
0 commit comments