zhishiku.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from plugins.common import settings
  2. from plugins.common import error_print
  3. from plugins.common import allowCROS
  4. import json
  5. from bottle import route, response, request, static_file, hook
  6. zsk = []
  7. try:
  8. input_list = settings.library.strategy.split(" ")
  9. except:
  10. error_print("读取知识库参数失败,这可能是新版本知识库配置方式变化导致的,请参照配置文件进行修改。知识库仍将继续加载,并使用默认参数:"+"sogowx:3 bingsite:2 rtst:2 agents:0")
  11. input_list = "sogowx:3 bingsite:2 rtst:2 agents:0".split(" ")
  12. for item in input_list:
  13. item = item.split(":")
  14. from importlib import import_module
  15. zhishiku = import_module('plugins.zhishiku_'+item[0])
  16. if zhishiku is None:
  17. error_print("载入知识库失败", item[0])
  18. zsk.append({'zsk': zhishiku, "count": int(item[1])})
  19. def find(s, step=0):
  20. result = []
  21. for item in zsk:
  22. result += item['zsk'].find(s, step)[:item['count']]
  23. return result[:int(settings.library.count)]
  24. # 根据前端需求动态查找知识库相关信息
  25. # s=要查询的内容
  26. # step=分多少步查询
  27. # count=知识抽取的数量
  28. # paraJson=参数包,以json字符串的形式编写
  29. # 知识库配置模式,冒号前面是知识库类别,后面是拟抽取的数量,示例 paraJson.libraryStategy:"bing:2 bingsite:3 fess:2 rtst:3 sogowx:2"
  30. # 知识库最大抽取条目的数量,paraJson.maxItmes
  31. @route('/find_dynamic', method=("POST", "OPTIONS"))
  32. def api_find_dynamic():
  33. allowCROS()
  34. data = request.json
  35. if not data:
  36. return '0'
  37. prompt = data.get('prompt')
  38. step = data.get('step')
  39. paraJson = data.get('paraJson') # 转成json对象
  40. if step is None:
  41. step = int(settings.library.step)
  42. if paraJson is None:
  43. paraJson = {
  44. 'libraryStategy': "rtst:3", 'maxItmes': 10}
  45. print(prompt,paraJson)
  46. return json.dumps(find_dynamic(prompt, int(step), paraJson))
  47. def find_dynamic(s,step = 0,paraJson = {'libraryStategy':"bing:2 bingsite:3 fess:2 rtst:3:default sogowx:2",'maxItmes':10}):
  48. zsk=[]
  49. rtst_on=False
  50. rtst_name='default'
  51. input_list = paraJson['libraryStategy'].split(" ")
  52. # print('from dynamic:')
  53. for item in input_list:
  54. item=item.split(":")
  55. rtst_on=False
  56. from importlib import import_module
  57. zhishiku = import_module('plugins.zhishiku_'+item[0])
  58. if zhishiku is None:
  59. error_print("载入知识库失败",item[0])
  60. if len(item) >= 3:
  61. if item[0] == 'rtst' and item[2] != None:
  62. rtst_name=item[2]
  63. rtst_on=True
  64. # print(rtst_name)
  65. # else:
  66. # print('rtst 不存在')
  67. zsk.append({'zsk':zhishiku,"count":int(item[1]),'rtst_state':rtst_on})
  68. result=[]
  69. for item in zsk:
  70. # print(item)
  71. if(item['rtst_state']):
  72. result+=item['zsk'].find(s,step,rtst_name)[:item['count']]
  73. else:
  74. result+=item['zsk'].find(s,step)[:item['count']]
  75. return result[:paraJson["maxItmes"]]
粤ICP备19079148号