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.
|
|
#coding:utf8import refrom jsonpath_ng import parseimport jsonimport tracebackimport regexfrom log_util.set_logger import set_loggerdef parse_data(data,para): param_split = str(para).split(":") datasourcestr = data[param_split[0]] datasource = json.loads(datasourcestr) # 创建 JsonPath 表达式对象 expr = parse(param_split[1]) # 使用表达式来选择 JSON 元素 match = [match.value for match in expr.find(datasource)] val = match[0] return val
def parse_gptResult(output,gptContent): json_result = {} try: json_gpt=json.loads(str(gptContent).replace("```json","").replace("```","")) for key in output.keys(): if key in json_gpt.keys(): json_result[key]=json_gpt[key]
return json_result except Exception as e: try: # 直接解析失败,使用正则表达式匹配外层的 {} pattern = r'\{(?:[^{}]*|(?R))*\}' match = regex.search(pattern, gptContent, flags=regex.DOTALL) # match = re.search(pattern, gptContent, re.DOTALL) if match: json_gpt = json.loads(match.group()) for key in output.keys(): if key in json_gpt.keys(): json_result[key]=json_gpt[key] return json_result else: return None except: traceback.print_exc() return None
def get_content(inputdata,logging): """ 重新组装参数 :param inputdata:原json数据 :return: 组装的prompt及其他参数 """ res={} input=inputdata["input"] data=inputdata["data"] prompts=input["prompt"] prompt_res="" if prompts: for prompt in prompts: if str(prompt["type"])=="1": prompt_res+=prompt["value"] elif str(prompt["type"])=="2": try: tmp=parse_data(data,prompt["value"]) prompt_res +=tmp except: logging.info("动态字段获取数据失败。{}-{}".format(prompt, traceback.format_exc()))
# logging.info("拼接后的问题:{}".format(prompt_res)) res["prompt"]=prompt_res # res["authorization"]=input["authorization"] # res["model"]=input["model"] res["temperature"]=input["temperature"] res["top_p"]=input["top_p"] res["n"]=input["n"] return res
# def get_content(inputdata,logging):# """# 重新组装参数# :param inputdata:原json数据# :return: 组装的prompt及其他参数# """# res={}# admin=inputdata["metadata"]["admin"]# data=inputdata["data"]# prompt=admin["prompt"]# if_user=re.findall("{{(.*)}}",prompt)# if_data=re.findall("@@(.*)@@",prompt)# if if_user != []:# user_data=inputdata["metadata"]["user"]# if if_user[0] in user_data.keys():# tmp=user_data[if_user[0]]# prompt=re.sub("{{(.*)}}",tmp,prompt)# if if_data!=[] and if_data[0] in data.keys():# tmp1=data[if_data[0]]# prompt=re.sub("@@(.*)@@",tmp1,prompt)# res["prompt"]=prompt# res["authorization"]=admin["authorization"]# res["model"]=admin["model"]# res["temperature"]=admin["temperature"]# res["authorization"]=admin["authorization"]# res["top_p"]=admin["top_p"]# res["n"]=admin["n"]# return res
if __name__=="__main__":
parse_gptResult()
|