[docs]@TAGGING_OPS.register_module(OP_NAME)@OPERATORS.register_module(OP_NAME)classDialogIntentDetectionMapper(Mapper):""" Mapper to generate user's intent labels in dialog. Input from history_key, query_key and response_key. Output lists of labels and analysis for queries in the dialog. """DEFAULT_SYSTEM_PROMPT=("请判断用户和LLM多轮对话中用户的意图。\n""要求:\n""- 需要先进行分析,然后列出用户所具有的意图,下面是一个样例,请模仿样例格式输出""。\n""用户:你好,我最近对人工智能很感兴趣,能给我讲讲什么是机器学习吗?\n""意图分析:用户在请求信息,希望了解有关机器学习的基础知识。\n""意图类别:信息查找\n""LLM:你好!当然可以。机器学习是一种人工智能方法,允许计算机通过数据自动改进和学习。\n""用户:听起来很有趣,有没有推荐的入门书籍或资料?\n""意图分析:用户在请求建议,希望获取关于机器学习的入门资源。\n""意图类别:请求建议\n""LLM:有很多不错的入门书籍和资源。一本常被推荐的书是《Python机器学习实践》(Python"" Machine Learning),它涵盖了基础知识和一些实际案例。此外,您还可以参考Coursera""或edX上的在线课程,这些课程提供了系统的学习路径。\n""用户:谢谢你的建议!我还想知道,学习机器学习需要什么样的数学基础?\n""意图分析:用户在寻求信息,希望了解学习机器学习所需的前提条件,特别是在数学方面。\n""意图类别:信息查找\n""LLM:学习机器学习通常需要一定的数学基础,特别是线性代数、概率论和统计学。这些数学领""域帮助理解算法的工作原理和数据模式分析。如果您对这些主题不太熟悉,建议先从相关基础""书籍或在线资源开始学习。\n""用户:明白了,我会先补习这些基础知识。再次感谢你的帮助!\n""意图分析:用户表达感谢,并表示计划付诸行动来补充所需的基础知识。\n""意图类别:其他")DEFAULT_QUERY_TEMPLATE="用户:{query}\n"DEFAULT_RESPONSE_TEMPLATE="LLM:{response}\n"DEFAULT_CANDIDATES_TEMPLATE="备选意图类别:[{candidate_str}]"DEFAULT_ANALYSIS_TEMPLATE="意图分析:{analysis}\n"DEFAULT_LABELS_TEMPLATE="意图类别:{labels}\n"DEFAULT_ANALYSIS_PATTERN="意图分析:(.*?)\n"DEFAULT_LABELS_PATTERN="意图类别:(.*?)($|\n)"
[docs]def__init__(self,api_model:str="gpt-4o",intent_candidates:Optional[List[str]]=None,max_round:NonNegativeInt=10,*,labels_key:str=MetaKeys.dialog_intent_labels,analysis_key:str=MetaKeys.dialog_intent_labels_analysis,api_endpoint:Optional[str]=None,response_path:Optional[str]=None,system_prompt:Optional[str]=None,query_template:Optional[str]=None,response_template:Optional[str]=None,candidate_template:Optional[str]=None,analysis_template:Optional[str]=None,labels_template:Optional[str]=None,analysis_pattern:Optional[str]=None,labels_pattern:Optional[str]=None,try_num:PositiveInt=3,model_params:Dict={},sampling_params:Dict={},**kwargs,):""" Initialization method. :param api_model: API model name. :param intent_candidates: The output intent candidates. Use the intent labels of the open domain if it is None. :param max_round: The max num of round in the dialog to build the prompt. :param labels_key: The key name in the meta field to store the output labels. It is 'dialog_intent_labels' in default. :param analysis_key: The key name in the meta field to store the corresponding analysis. It is 'dialog_intent_labels_analysis' 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: System prompt for the task. :param query_template: Template for query part to build the input prompt. :param response_template: Template for response part to build the input prompt. :param candidate_template: Template for intent candidates to build the input prompt. :param analysis_template: Template for analysis part to build the input prompt. :param labels_template: Template for labels to build the input prompt. :param analysis_pattern: Pattern to parse the return intent analysis. :param labels_pattern: Pattern to parse the return intent labels. :param try_num: The number of retry attempts when there is an API call error or output parsing error. :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)self.intent_candidates=intent_candidatesself.max_round=max_roundself.labels_key=labels_keyself.analysis_key=analysis_keyself.system_prompt=system_promptorself.DEFAULT_SYSTEM_PROMPTself.query_template=query_templateorself.DEFAULT_QUERY_TEMPLATEself.response_template=response_templateorself.DEFAULT_RESPONSE_TEMPLATEself.candidate_template=candidate_templateorself.DEFAULT_CANDIDATES_TEMPLATEself.analysis_template=analysis_templateorself.DEFAULT_ANALYSIS_TEMPLATEself.labels_template=labels_templateorself.DEFAULT_LABELS_TEMPLATEself.analysis_pattern=analysis_patternorself.DEFAULT_ANALYSIS_PATTERNself.labels_pattern=labels_patternorself.DEFAULT_LABELS_PATTERNself.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_num