From bc6c9078725558f75003aad337cd8459df0c820c Mon Sep 17 00:00:00 2001 From: ouyangyouzhang Date: Fri, 26 Sep 2025 11:31:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8F=90=E7=A4=BA=E8=AF=8D?= =?UTF-8?q?=E4=B8=AD=E5=A4=9A=E4=BD=99=E7=A9=BA=E6=A0=BC=E3=80=81=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=E7=AD=89=E3=80=82=E5=87=8F=E5=B0=91=E4=B8=8D=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E7=9A=84token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rag2_0/demo/dialogue_to_workorder.py | 8 ---- rag2_0/intent_recognition/DataModels.py | 45 ++++++-------------- rag2_0/intent_recognition/PromptTemplates.py | 26 ++++++----- 3 files changed, 26 insertions(+), 53 deletions(-) diff --git a/rag2_0/demo/dialogue_to_workorder.py b/rag2_0/demo/dialogue_to_workorder.py index 3312f7c..91da1d3 100755 --- a/rag2_0/demo/dialogue_to_workorder.py +++ b/rag2_0/demo/dialogue_to_workorder.py @@ -142,14 +142,6 @@ class DialogueToWorkorder: "base_url": os.getenv("OPENAI_API_BASE"), "timeout": httpx.Timeout(600.0) } - # self.llm_params = llm_params or { - # "temperature": 0.2, - # "top_p":0.95, - # "model": "deepseek-r1", - # "api_key": "25t%Syu6I9yxX2IuTN", - # "base_url": "http://10.1.0.154:8000/v1", - # "timeout": httpx.Timeout(600.0) - # } self.llm = self._get_llm_instance() # 创建工单JSON文件目录 diff --git a/rag2_0/intent_recognition/DataModels.py b/rag2_0/intent_recognition/DataModels.py index 1ed0085..26bfb5f 100755 --- a/rag2_0/intent_recognition/DataModels.py +++ b/rag2_0/intent_recognition/DataModels.py @@ -109,31 +109,20 @@ class Classification(BaseModel): @classmethod def get_format_instructions(cls): - return """ - 格式如下,必须严格以纯JSON格式输出 - { - "vertical_classification": "垂直领域一级分类", - "sub_classification": "一级分类下的二级分类" - } - 字段说明: - vertical_classification 类型:str 描述:垂直领域一级分类 - sub_classification 类型:str 描述:一级分类下的二级分类 - - """ + return """格式如下,必须严格以纯JSON格式输出 +{"vertical_classification": "垂直领域一级分类","sub_classification": "一级分类下的二级分类"} +字段说明: +vertical_classification 类型:str 描述:垂直领域一级分类 +sub_classification 类型:str 描述:一级分类下的二级分类""" class QueryRewrite(BaseModel): rewrite:str = Field(description="问题改写") @classmethod def get_format_instructions(cls): - return """ - 格式如下:必须严格以纯JSON格式输出 - { - "rewrite": "问题改写" - } - 字段说明: - "rewrite" 类型:str 描述:问题改写之后的内容 - """ + return """格式如下:必须严格以纯JSON格式输出{"rewrite": "问题改写"} +字段说明: +rewrite 类型:str 描述:问题改写之后的内容""" # 意图优化环节数据模型 @@ -145,18 +134,12 @@ class StepBackPrompt(BaseModel): @classmethod def get_format_instructions(cls): - return """ - 格式如下,必须严格以纯JSON格式输出 - { - "original_query": "原始查询", - "can_use_back_prompt": "原始查询是否可以进行后退提示(true/false),如果原始查询没有限定词或其他限定词语,则不能进行后退提示", - "step_back_query": "后退提示生成的抽象查询(多个)" - } - 字段说明: - "original_query" 类型:str 描述:用户输入的原始查询 - "can_use_back_prompt" 类型:bool 描述:原始查询是否可以进行后退提示(true/false),如果原始查询没有限定词或其他限定词语,则不能进行后退提示 - "step_back_query" 类型:list[str] 描述:后退提示生成的抽象查询(多个) - """ + return """格式如下,必须严格以纯JSON格式输出 +{"original_query": "原始查询","can_use_back_prompt": "原始查询是否可以进行后退提示(true/false),如果原始查询没有限定词或其他限定词语,则不能进行后退提示","step_back_query": "后退提示生成的抽象查询(多个)"} +字段说明: +original_query 类型:str 描述:用户输入的原始查询 +can_use_back_prompt 类型:bool 描述:原始查询是否可以进行后退提示(true/false),如果原始查询没有限定词或其他限定词语,则不能进行后退提示 +step_back_query 类型:list[str] 描述:后退提示生成的抽象查询(多个)""" class FollowUpQuestions(BaseModel): diff --git a/rag2_0/intent_recognition/PromptTemplates.py b/rag2_0/intent_recognition/PromptTemplates.py index a8766e6..fdd2b90 100755 --- a/rag2_0/intent_recognition/PromptTemplates.py +++ b/rag2_0/intent_recognition/PromptTemplates.py @@ -28,14 +28,14 @@ extract_nouns_prompt=""" """ classification_info="""【垂直领域分类】: -1. 软件问题 -- 指涉及软件使用、功能询问、软件故障排查等方面的提问或请求。 -2. 业务问题 -- 指涉及电力造价领域专业知识、造价费用计算等电力造价业务知识 -3. 安装下载注册 -- 指涉及软件(或插件)安装下载、注册、激活等操作类问题。 -4. 固定话术类 -- 指涉及需要固定话术回答的问题,如:规费咨询、调差下载更新。 -5. 其他 -- 指与软件或电力造价专业无关的日常对话、问候、感慨、情绪表达等。 +1. 软件问题 -- 涉及软件使用/功能/操作或故障排查。 +2. 业务问题 -- 涉及电力造价专业知识、计价规则或造价数据计算等。 +3. 安装下载注册 -- 及软件或插件的安装、下载、注册、激活、文件扩展名、软件锁等。 +4. 固定话术类 -- 需用固定话术回复的问题,如:规费咨询、调差下载更新。 +5. 其他 -- 与软件或电力造价无关的一般对话(问候、情绪等)。 【软件问题包括以下两类】: -1. 软件功能:询问软件功能的使用、功能操作(调整)、功能位置、如何设置、如何转换、如何导入到软件、如何安装到软件等侧重软件主体 +1. 软件功能:询问软件如何使用、设置、导入、在软件中安装/转换等(以软件为主体)。 示例:ywlk怎么安装到软件中? ywlk是文件后缀名 ---> 将文件导入到软件中 2. 故障排查:软件运行异常、软件报错、软件显示错误等 @@ -65,7 +65,7 @@ classification_info="""【垂直领域分类】: **以下两种情况才属于该类** 1、询问如何下载导入调差文件、调差插件 2、询问如何更新导入调差文件、调差插件 - 调差:价格水平差异调整 + 调差 = 价格水平差异调整 **其余涉及调差的属于其他垂直领域分类** 【其他】: @@ -73,7 +73,7 @@ classification_info="""【垂直领域分类】: 分类优先级:固定话术类 > 软件问题 、 业务问题 、 安装下载注册 > 其他""" -classification_prompt="""用户正在使用电力造价软件或想询问电力造价领域相关知识,你需要根据用户的输入内容集合历史对话(如果存在),将其归类为以下垂直领域之一: +classification_prompt="""用户在使用电力造价软件或咨询电力造价相关问题,请将用户输入(结合历史对话,如有)归为以下垂直领域之一: {classification_info} ## 【历史对话记录】 @@ -187,13 +187,11 @@ slot_filling_prompt = """ # 意图优化环节提示词模板 step_back_prompt = """# 后退提示生成器 - -你是一个专业的电力造价领域问题抽象专家。你的任务是根据用户的具体问题,提出一个更抽象、更高层次的问题,帮助系统更好地理解用户的意图。 - +你是电力造价领域的问题抽象专家。任务是把用户的具体问题抽象成更高层次的问题,帮助理解其核心意图。 ## 任务说明 -1. 分析用户的原始问题,理解其核心意图和需求 -2. 考虑历史对话和会话背景,理解用户当前问题的上下文 -3. 生成更抽象、更高层次的问题,称为"后退问题",后退问题可以生成多个,依次后退到更抽象、更高层次的问题 +1. 理解用户原始问题的核心 +2. 考虑上下文 +3. 生成逐级抽象的“后退问题” 4. 后退问题应该: - 更加通用和抽象,不应包含原始问题的具体细节(包括场景限定、界面限定等其他限定词语) - 涵盖原始问题的核心主题