[docs]@TAGGING_OPS.register_module(OP_NAME)@OPERATORS.register_module(OP_NAME)classRelationIdentityMapper(Mapper):""" identify relation between two entity in the text. """DEFAULT_SYSTEM_PROMPT_TEMPLATE=('给定关于{entity1}和{entity2}的文本信息。''判断{entity1}和{entity2}之间的关系。\n''要求:\n''- 关系用一个或多个词语表示,必要时可以加一个形容词来描述这段关系\n''- 输出关系时不要参杂任何标点符号\n''- 需要你进行合理的推理才能得出结论\n''- 如果两个人物身份是同一个人,输出关系为:另一个身份\n''- 输出格式为:\n''分析推理:...\n''所以{entity2}是{entity1}的:...\n''- 注意输出的是{entity2}是{entity1}的什么关系,而不是{entity1}是{entity2}的什么关系')DEFAULT_INPUT_TEMPLATE='关于{entity1}和{entity2}的文本信息:\n```\n{text}\n```\n'DEFAULT_OUTPUT_PATTERN_TEMPLATE=r""" \s*分析推理:\s*(.*?)\s* \s*所以{entity2}是{entity1}的:\s*(.*?)\Z """
[docs]def__init__(self,api_model:str='gpt-4o',source_entity:str=None,target_entity:str=None,*,output_key:str=MetaKeys.role_relation,api_endpoint:Optional[str]=None,response_path:Optional[str]=None,system_prompt_template:Optional[str]=None,input_template:Optional[str]=None,output_pattern_template:Optional[str]=None,try_num:PositiveInt=3,drop_text:bool=False,model_params:Dict={},sampling_params:Dict={},**kwargs):""" Initialization method. :param api_model: API model name. :param source_entity: The source entity of the relation to be identified. :param target_entity: The target entity of the relation to be identified. :param output_key: The output key in the meta field in the samples. It is 'role_relation' in default. :param api_endpoint: URL endpoint for the API. :param response_path: Path to extract content from the API response. Defaults to 'choices.0.message.content'. :param system_prompt_template: System prompt template for the task. :param input_template: Template for building the model input. :param output_pattern_template: Regular expression template for parsing model output. :param try_num: The number of retry attempts when there is an API call error or output parsing error. :param drop_text: If drop the text in the output. :param model_params: Parameters for initializing the API model. :param sampling_params: Extra parameters passed to the API call. e.g {'temperature': 0.9, 'top_p': 0.95} :param kwargs: Extra keyword arguments. """super().__init__(**kwargs)ifsource_entityisNoneortarget_entityisNone:logger.warning('source_entity and target_entity cannot be None')self.source_entity=source_entityself.target_entity=target_entityself.output_key=output_keysystem_prompt_template=system_prompt_templateor \
self.DEFAULT_SYSTEM_PROMPT_TEMPLATEself.system_prompt=system_prompt_template.format(entity1=source_entity,entity2=target_entity)self.input_template=input_templateorself.DEFAULT_INPUT_TEMPLATEoutput_pattern_template=output_pattern_templateor \
self.DEFAULT_OUTPUT_PATTERN_TEMPLATEself.output_pattern=output_pattern_template.format(entity1=source_entity,entity2=target_entity)self.sampling_params=sampling_paramsself.model_key=prepare_model(model_type='api',model=api_model,endpoint=api_endpoint,response_path=response_path,**model_params)self.try_num=try_numself.drop_text=drop_text