import json class ParserIntentJson: def __init__(self, json_path: str): self.json_path = json_path with open(json_path, 'r', encoding='utf-8') as f: self.jsons = json.load(f) self.lv1_intent_names_str = "" self.intent_lv2_str = "" self.intent_struct = {item["一级意图"]["name"]: [sub["name"] for sub in item["二级意图"]] for item in self.jsons} # 初始化时生成所有结构 self.generate_intent_lv1_struction() self.generate_intent_lv2_struction() self.generate_pydantic_model() def generate_intent_lv1_struction(self): lv1_intent_names = [] for item in self.jsons: lv1_intent_names.append(item["一级意图"]["name"]) self.lv1_intent_names_str = str(lv1_intent_names).replace("'", "") def generate_intent_lv2_struction(self): intent_lv2_str = "" for item in self.jsons: str1 = f'## {item["一级意图"]["name"]}\n' str2 = "" for sub in item["二级意图"]: str2 += f'{sub["name"]}({sub["description"]})\n' intent_lv2_str += str1 + str2 self.intent_lv2_str = intent_lv2_str def generate_pydantic_model(self): self.pydantic_dict_lv1 = {} self.pydantic_dict_lv2 = [] for i in range(len(self.jsons)): lv1_name = self.jsons[i]["一级意图"]["name"] intent_name_lv1 = f"slot_struct_lv1_{i}" slot_lv1 = self.jsons[i]['一级意图'].get('slot') class_def_lv1 = f"class {intent_name_lv1}(BaseModel):\n" for field_name, description in slot_lv1['required'].items(): class_def_lv1 += f' {field_name}_required: str = Field(description="{description}")\n' for field_name, description in slot_lv1['optional'].items(): class_def_lv1 += f' {field_name}_optional: str = Field(description="{description}")\n' self.pydantic_dict_lv1[lv1_name] = class_def_lv1 # dict_temp_lv1 = {lv1_name: class_def_lv1} # self.pydantic_dict_lv1.append(dict_temp_lv1) intent_name_lv2 = f"slot_struct_lv2_{i}" pydantic_dict_temp = [] for j in range(len(self.jsons[i]["二级意图"])): lv2_name = self.jsons[i]["二级意图"][j].get("name") temp_list = [lv1_name, lv2_name] slot_lv2 = self.jsons[i]["二级意图"][j].get("solt") class_def_lv2 = f"class {intent_name_lv2}_{j}(BaseModel):\n" for field_name, description in slot_lv2['required'].items(): class_def_lv2 += f' {field_name}_required: str = Field(description="{description}")\n' for field_name, description in slot_lv2['optional'].items(): class_def_lv2 += f' {field_name}_optional: str = Field(description="{description}")\n' # for field_name, description in slot['inferred'].items(): # class_def += f' {field_name}: str = Field(description="{description}")\n' dict_temp = {tuple(temp_list): class_def_lv2} pydantic_dict_temp.append(dict_temp) self.pydantic_dict_lv2.append(pydantic_dict_temp) # 使用示例 if __name__ == "__main__": parser = ParserIntentJson("../data/dynamic_structure/intent_json.json") print(parser.lv1_intent_names_str) print(parser.intent_lv2_str) print(parser.pydantic_dict_lv1) print(parser.pydantic_dict_lv2)