@@ -60,10 +60,6 @@ def __init__(
6060 # "/kb/media/delete": ("POST", self.delete_media),
6161 # 检索
6262 "/kb/retrieve" : ("POST" , self .retrieve ),
63- # 会话知识库配置
64- "/kb/session/config/get" : ("GET" , self .get_session_kb_config ),
65- "/kb/session/config/set" : ("POST" , self .set_session_kb_config ),
66- "/kb/session/config/delete" : ("POST" , self .delete_session_kb_config ),
6763 }
6864 self .register_routes ()
6965
@@ -920,158 +916,6 @@ async def retrieve(self):
920916 logger .error (traceback .format_exc ())
921917 return Response ().error (f"检索失败: { e !s} " ).__dict__
922918
923- # ===== 会话知识库配置 API =====
924-
925- async def get_session_kb_config (self ):
926- """获取会话的知识库配置
927-
928- Query 参数:
929- - session_id: 会话 ID (必填)
930-
931- 返回:
932- - kb_ids: 知识库 ID 列表
933- - top_k: 返回结果数量
934- - enable_rerank: 是否启用重排序
935- """
936- try :
937- from astrbot .core import sp
938-
939- session_id = request .args .get ("session_id" )
940-
941- if not session_id :
942- return Response ().error ("缺少参数 session_id" ).__dict__
943-
944- # 从 SharedPreferences 获取配置
945- config = await sp .session_get (session_id , "kb_config" , default = {})
946-
947- logger .debug (f"[KB配置] 读取到配置: session_id={ session_id } " )
948-
949- # 如果没有配置,返回默认值
950- if not config :
951- config = {"kb_ids" : [], "top_k" : 5 , "enable_rerank" : True }
952-
953- return Response ().ok (config ).__dict__
954-
955- except Exception as e :
956- logger .error (f"[KB配置] 获取配置时出错: { e } " , exc_info = True )
957- return Response ().error (f"获取会话知识库配置失败: { e !s} " ).__dict__
958-
959- async def set_session_kb_config (self ):
960- """设置会话的知识库配置
961-
962- Body:
963- - scope: 配置范围 (目前只支持 "session")
964- - scope_id: 会话 ID (必填)
965- - kb_ids: 知识库 ID 列表 (必填)
966- - top_k: 返回结果数量 (可选, 默认 5)
967- - enable_rerank: 是否启用重排序 (可选, 默认 true)
968- """
969- try :
970- from astrbot .core import sp
971-
972- data = await request .json
973-
974- scope = data .get ("scope" )
975- scope_id = data .get ("scope_id" )
976- kb_ids = data .get ("kb_ids" , [])
977- top_k = data .get ("top_k" , 5 )
978- enable_rerank = data .get ("enable_rerank" , True )
979-
980- # 验证参数
981- if scope != "session" :
982- return Response ().error ("目前仅支持 session 范围的配置" ).__dict__
983-
984- if not scope_id :
985- return Response ().error ("缺少参数 scope_id" ).__dict__
986-
987- if not isinstance (kb_ids , list ):
988- return Response ().error ("kb_ids 必须是列表" ).__dict__
989-
990- # 验证知识库是否存在
991- kb_mgr = self ._get_kb_manager ()
992- invalid_ids = []
993- valid_ids = []
994- for kb_id in kb_ids :
995- kb_helper = await kb_mgr .get_kb (kb_id )
996- if kb_helper :
997- valid_ids .append (kb_id )
998- else :
999- invalid_ids .append (kb_id )
1000- logger .warning (f"[KB配置] 知识库不存在: { kb_id } " )
1001-
1002- if invalid_ids :
1003- logger .warning (f"[KB配置] 以下知识库ID无效: { invalid_ids } " )
1004-
1005- # 允许保存空列表,表示明确不使用任何知识库
1006- if kb_ids and not valid_ids :
1007- # 只有当用户提供了 kb_ids 但全部无效时才报错
1008- return Response ().error (f"所有提供的知识库ID都无效: { kb_ids } " ).__dict__
1009-
1010- # 如果 kb_ids 为空列表,表示用户想清空配置
1011- if not kb_ids :
1012- valid_ids = []
1013-
1014- # 构建配置对象(只保存有效的ID)
1015- config = {
1016- "kb_ids" : valid_ids ,
1017- "top_k" : top_k ,
1018- "enable_rerank" : enable_rerank ,
1019- }
1020-
1021- # 保存到 SharedPreferences
1022- await sp .session_put (scope_id , "kb_config" , config )
1023-
1024- # 立即验证是否保存成功
1025- verify_config = await sp .session_get (scope_id , "kb_config" , default = {})
1026-
1027- if verify_config == config :
1028- return (
1029- Response ()
1030- .ok (
1031- {"valid_ids" : valid_ids , "invalid_ids" : invalid_ids },
1032- "保存知识库配置成功" ,
1033- )
1034- .__dict__
1035- )
1036- logger .error ("[KB配置] 配置保存失败,验证不匹配" )
1037- return Response ().error ("配置保存失败" ).__dict__
1038-
1039- except Exception as e :
1040- logger .error (f"[KB配置] 设置配置时出错: { e } " , exc_info = True )
1041- return Response ().error (f"设置会话知识库配置失败: { e !s} " ).__dict__
1042-
1043- async def delete_session_kb_config (self ):
1044- """删除会话的知识库配置
1045-
1046- Body:
1047- - scope: 配置范围 (目前只支持 "session")
1048- - scope_id: 会话 ID (必填)
1049- """
1050- try :
1051- from astrbot .core import sp
1052-
1053- data = await request .json
1054-
1055- scope = data .get ("scope" )
1056- scope_id = data .get ("scope_id" )
1057-
1058- # 验证参数
1059- if scope != "session" :
1060- return Response ().error ("目前仅支持 session 范围的配置" ).__dict__
1061-
1062- if not scope_id :
1063- return Response ().error ("缺少参数 scope_id" ).__dict__
1064-
1065- # 从 SharedPreferences 删除配置
1066- await sp .session_remove (scope_id , "kb_config" )
1067-
1068- return Response ().ok (message = "删除知识库配置成功" ).__dict__
1069-
1070- except Exception as e :
1071- logger .error (f"删除会话知识库配置失败: { e } " )
1072- logger .error (traceback .format_exc ())
1073- return Response ().error (f"删除会话知识库配置失败: { e !s} " ).__dict__
1074-
1075919 async def upload_document_from_url (self ):
1076920 """从 URL 上传文档
1077921
0 commit comments