千问开源大模型
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.5 KiB

  1. #coding:utf8
  2. import re
  3. from jsonpath_ng import parse
  4. import json
  5. import traceback
  6. import regex
  7. from log_util.set_logger import set_logger
  8. def parse_data(data,para):
  9. param_split = str(para).split(":")
  10. datasourcestr = data[param_split[0]]
  11. datasource = json.loads(datasourcestr)
  12. # 创建 JsonPath 表达式对象
  13. expr = parse(param_split[1])
  14. # 使用表达式来选择 JSON 元素
  15. match = [match.value for match in expr.find(datasource)]
  16. val = match[0]
  17. return val
  18. def parse_gptResult(output,gptContent):
  19. json_result = {}
  20. try:
  21. json_gpt=json.loads(str(gptContent).replace("```json","").replace("```",""))
  22. for key in output.keys():
  23. if key in json_gpt.keys():
  24. json_result[key]=json_gpt[key]
  25. return json_result
  26. except Exception as e:
  27. try:
  28. # 直接解析失败,使用正则表达式匹配外层的 {}
  29. pattern = r'\{(?:[^{}]*|(?R))*\}'
  30. match = regex.search(pattern, gptContent, flags=regex.DOTALL)
  31. # match = re.search(pattern, gptContent, re.DOTALL)
  32. if match:
  33. json_gpt = json.loads(match.group())
  34. for key in output.keys():
  35. if key in json_gpt.keys():
  36. json_result[key]=json_gpt[key]
  37. return json_result
  38. else:
  39. return None
  40. except:
  41. traceback.print_exc()
  42. return None
  43. def get_content(inputdata,logging):
  44. """
  45. :param inputdata:json数据
  46. :return: prompt及其他参数
  47. """
  48. res={}
  49. input=inputdata["input"]
  50. if "data" not in inputdata.keys():
  51. data=""
  52. else:
  53. data=inputdata["data"]
  54. prompts=input["prompt"]
  55. prompt_res=""
  56. if prompts:
  57. for prompt in prompts:
  58. if str(prompt["type"])=="1":
  59. prompt_res+=prompt["value"]
  60. elif str(prompt["type"])=="2":
  61. try:
  62. tmp=parse_data(data,prompt["value"])
  63. prompt_res +=tmp
  64. except:
  65. logging.info("动态字段获取数据失败。{}-{}".format(prompt, traceback.format_exc()))
  66. # logging.info("拼接后的问题:{}".format(prompt_res))
  67. res["prompt"]=prompt_res
  68. # res["authorization"]=input["authorization"]
  69. # res["model"]=input["model"]
  70. res["temperature"]=input["temperature"]
  71. res["top_p"]=input["top_p"]
  72. res["n"]=input["n"]
  73. return res
  74. # def get_content(inputdata,logging):
  75. # """
  76. # 重新组装参数
  77. # :param inputdata:原json数据
  78. # :return: 组装的prompt及其他参数
  79. # """
  80. # res={}
  81. # admin=inputdata["metadata"]["admin"]
  82. # data=inputdata["data"]
  83. # prompt=admin["prompt"]
  84. # if_user=re.findall("{{(.*)}}",prompt)
  85. # if_data=re.findall("@@(.*)@@",prompt)
  86. # if if_user != []:
  87. # user_data=inputdata["metadata"]["user"]
  88. # if if_user[0] in user_data.keys():
  89. # tmp=user_data[if_user[0]]
  90. # prompt=re.sub("{{(.*)}}",tmp,prompt)
  91. # if if_data!=[] and if_data[0] in data.keys():
  92. # tmp1=data[if_data[0]]
  93. # prompt=re.sub("@@(.*)@@",tmp1,prompt)
  94. # res["prompt"]=prompt
  95. # res["authorization"]=admin["authorization"]
  96. # res["model"]=admin["model"]
  97. # res["temperature"]=admin["temperature"]
  98. # res["authorization"]=admin["authorization"]
  99. # res["top_p"]=admin["top_p"]
  100. # res["n"]=admin["n"]
  101. # return res
  102. if __name__=="__main__":
  103. parse_gptResult()