Files
DM_rewrite_3.31/chains_rewrite.py
T
2025-03-31 15:17:47 +08:00

205 lines
6.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
===================================
@AutherWenZ
@Company: BooWay
@projectbooway_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()
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()
return Chain
def to_normal_rewrite():
PromptTemplate = """
你是一个智能问答重写助手,请将用户提出的问题,重写为结构化、规范表达,符合下列范式:
【软件名称】【其他内容】
请根据以下用户问题进行规范表达:
用户问题:{query}
结构化问题:
""".strip()
Prompt = ChatPromptTemplate.from_template(PromptTemplate)
Chain = Prompt | deep_v3 | StrOutputParser()
return Chain
# 查询功能
def query_function_rewrite():
PromptTemplate = """
你是一个智能问答重写助手,请将用户提出的关于“软件功能查询类”的问题,重写为结构化、规范表达,符合下列范式之一:
1. 【软件名称】的【功能模块/名词】是做什么的?
2. 【软件名称】如何【动作动词】【功能模块/名词】?
请根据以下用户问题进行规范表达:
用户问题:{query}
结构化问题:
""".strip()
Prompt = ChatPromptTemplate.from_template(PromptTemplate)
Chain = Prompt | deep_v3 | StrOutputParser()
return Chain
# 操作指导
def operation_guidance_rewrite():
PromptTemplate = """
你是一个智能问答重写助手,请将用户提出的关于“软件操作指导类”的问题,重写为结构化、规范表达,符合以下范式之一:
1. 【软件名称】怎么使用【某功能/工具】?
2. 【软件名称】如何【批量操作/处理】【内容类型】?
请根据以下用户问题进行规范表达:
用户问题:{query}
结构化问题:
""".strip()
Prompt = ChatPromptTemplate.from_template(PromptTemplate)
Chain = Prompt | deep_v3 | StrOutputParser()
return Chain
# 故障排查
def troubleshooting_rewrite():
PromptTemplate = """
你是一个智能问答重写助手,请将用户提出的关于“软件故障排查类”的问题,重写为结构化、规范表达,符合以下范式之一:
1. 【软件名称】出现【报错信息/故障现象】怎么办?
2. 为什么【软件名称】打不开/闪退/安装失败?
3. 【软件名称】提示【具体错误】是什么意思?
4. 如何修复【软件名称】中的【功能异常】问题?
请根据以下用户问题进行规范表达:
用户问题:{query}
结构化问题:
""".strip()
Prompt = ChatPromptTemplate.from_template(PromptTemplate)
Chain = Prompt | deep_v3 | StrOutputParser()
return Chain
# 下载安装
def access_rewrite():
PromptTemplate = """
你是一个智能问答重写助手,请将用户提出的关于“软件下载与安装类”的问题,重写为结构化、规范表达,符合以下范式之一:
1. 怎么下载【软件名称/插件】?
2. 【软件名称/插件】怎么下载不了?
3. 如何在【操作系统名称】上安装【软件名称】?
请根据以下用户问题进行规范表达:
用户问题:{query}
结构化问题:
""".strip()
Prompt = ChatPromptTemplate.from_template(PromptTemplate)
Chain = Prompt | deep_v3 | StrOutputParser()
return Chain