""" =================================== @Auther:WenZ @Company: BooWay @project:booway_dm =================================== """ # from langchain_community.chat_models import ChatOpenAI from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_core.prompts.prompt import PromptTemplate from langchain_core.output_parsers import JsonOutputParser # qwen_llm = ChatOpenAI(model='deepseek-qwen2.5-32b',base_url="http://172.20.0.145:9995/v1/",api_key='233',temperature=1) # temperature=0.7 qwen_llm = ChatOpenAI( openai_api_base="https://api.siliconflow.cn/v1", model_name="Qwen/Qwen2.5-72B-Instruct", # sk-muuqautpcyuowjtgfecbnivqodlhzydtfslqkmwbknawejsx openai_api_key="sk-bbeamiumkouptsrueilgufqqyuumelcsivxwjbdugqwsqhwj", temperature=0.1 ) deep_v3 = ChatOpenAI( openai_api_base="https://api.siliconflow.cn/v1", model_name="deepseek-ai/DeepSeek-V3", # sk-muuqautpcyuowjtgfecbnivqodlhzydtfslqkmwbknawejsx openai_api_key="sk-bbeamiumkouptsrueilgufqqyuumelcsivxwjbdugqwsqhwj", temperature=0.1 ) # ========================================= # ========================================= # 软件名重写 def software_name_rewrite(): PromptTemplate = """ 你要根据用户问题,将软件全称替换上去 用户问题:{query} 软件全称:{software_name} 仅做替换,不做其他任何改变 """ Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | qwen_llm | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain def retrieval_rewrite(): PromptTemplate = """ 你是一名专业的问答优化助手,任务是基于多维度信息,对用户的问题进行重构以提升知识库的检索准确率。 请严格按以下步骤重构用户问题: # 第一步,了解输入信息 - 原始问题:{query} - 5W2H类型:{question_type} - 意图识别:{intention_type} - 检索到的关键词:{keywords} # 第二步,关键词与意图匹配校验 - 判断检索到的关键词是否与用户意图匹配。 - 若不匹配,直接输出:知识库无检索内容,待更新 - 若匹配,进入下一步 # 步骤三:问题专业术语转换 - 以检索到的关键词替换口语化表述,明确专业术语,形成专业、自然的重构问题。 # 示例: 1. 示例1:关键词匹配 输入: 原始问题:【西藏造价软件Z1】如何把西藏老定额工程升级成西藏Z1的新定额工程 5W2H类型:how 意图识别:操作指导 检索到的关键词:【'老版本定额升级', '批量设置定额'】 输出: 【西藏造价软件Z1】如何进行【老版本定额升级】? 2. 示例2:关键词不匹配 输入: 原始问题:【西藏造价软件Z1】软件界面字体太小了怎么办? 5W2H类型:how 意图识别:界面操作 检索到的关键词:【'定额升级', '工程批量导入'】 输出: 知识库无检索内容,待更新 # 注意 - 现在请严格按照以上流程和格式,处理接下来输入的问题,确保结果的专业性和检索准确性 - 不要输出思考过程,仅输出处理结果 """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | qwen_llm | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain def to_normal_rewrite(): PromptTemplate = """ 你是一个智能问答重写助手,请将用户提出的问题,重写为结构化、规范表达,符合下列范式: 【软件名称】【其他内容】 请根据以下用户问题进行规范表达: 用户问题:{query} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain # 查询功能 def query_function_rewrite(): PromptTemplate = """ 你是一个智能问答重写助手,请将用户提出的关于“软件功能查询类”的问题,重写为结构化、规范表达,符合下列范式之一: 1. 【软件名称】的【功能模块/名词】是做什么的? 2. 【软件名称】如何【动作动词】【功能模块/名词】? 请根据以下用户问题进行规范表达: 用户问题:{query} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain # 操作指导 def operation_guidance_rewrite(): PromptTemplate = """ 你是一个智能问答重写助手,请将用户提出的关于“软件操作指导类”的问题,重写为结构化、规范表达,符合以下范式之一: 1. 【软件名称】怎么使用【某功能/工具】? 2. 【软件名称】如何【批量操作/处理】【内容类型】? 请根据以下用户问题进行规范表达: 用户问题:{query} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain # 故障排查 def troubleshooting_rewrite(): PromptTemplate = """ 你是一个智能问答重写助手,请将用户提出的关于“软件故障排查类”的问题,重写为结构化、规范表达,符合以下范式之一: 1. 【软件名称】出现【报错信息/故障现象】怎么办? 2. 为什么【软件名称】打不开/闪退/安装失败? 3. 【软件名称】提示【具体错误】是什么意思? 4. 如何修复【软件名称】中的【功能异常】问题? 请根据以下用户问题进行规范表达: 用户问题:{query} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain # 下载安装 def access_rewrite(): PromptTemplate = """ 你是一个智能问答重写助手,请将用户提出的关于“软件下载与安装类”的问题,重写为结构化、规范表达,符合以下范式之一: 1. 怎么下载【软件名称/插件】? 2. 【软件名称/插件】怎么下载不了? 3. 如何在【操作系统名称】上安装【软件名称】? 请根据以下用户问题进行规范表达: 用户问题:{query} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain # 全名扩写 def full_name_extension(): PromptTemplate = """ 你是一个智能问答重写助手,将用户问题和已知的软件名称重写为结构化、规范表达,符合以下范式: 1. 【软件名】【其他】 # 例子 输入:D3软件二次运输怎么计取 输出:【博微配网工程计价通D3软件】【二次运输怎么计取】 输入:怎么添加特征段 输出:【】【怎么添加特征段】 输入:西藏造价软件Z1 输出:【西藏造价软件Z1】【】 请根据以下用户问题进行规范表达,不要有任何解释说明: 软件名称:{soft_name} 用户问题:{query} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain def mutil_text_rewrite(): PromptTemplate = """ 你是一个智能问答重写助手,根据聊天记录进行结构化、规范表达的重写,符合以下范式: 1. 【软件名】【其他】 # 例子 输入: user: 西藏造价软件Z1 assistant: 好的,具体软件是【西藏造价软件Z1】, 请补充具体的需求 user: 进行费用统计 输出:【西藏Z1软件】【进行费用统计】 请根据以下用户问题进行规范表达,不要有任何解释说明: 聊天记录:{history} 结构化问题: """.strip() Prompt = ChatPromptTemplate.from_template(PromptTemplate) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain def software_judge(): # 费用计算另处理 PromptTemplate1 = """ 你根据用户输入的线索来选择返回输出: 1. 西藏造价软件Z1 2. 新型储能计价通C1 3. 技改检修计价通T1 4. 博微配网工程计价通D3软件 用户输入:"{query}" 输出格式:str类型 注意: 1. 你的回复答案一定是[西藏造价软件Z1、新型储能计价通C1、技改检修计价通T1、博微配网工程计价通D3软件]之一,不要有其他回答,不要解释说明 """ Prompt = ChatPromptTemplate.from_template(PromptTemplate1) Chain = Prompt | deep_v3 | StrOutputParser() # Chain = Prompt | llm | StrOutputParser() return Chain