利用语言模型天生的语境分析能力,可以轻松的判断出,用户在产品留言中的问题
本案例基于Ollama+本地大模型开发,模型版本Qwen2.5:14b
下载相关库文件、引入ollama
pip install langchain-ollama
from langchain_ollama import OllamaLLM
定义问题分类和提示词
CATEGORY_LIST = ["产品规格", "使用咨询", "功能比较", "用户反馈", "价格查询", "故障问题", "其它"]
PROMPT_TEMPLATE = """
你的任务是为用户对产品的疑问进行分类。
请仔细阅读用户的问题内容,给出所属类别。类别应该是这些里面的其中一个:{categories}。
直接输出所属类别,不要有任何额外的描述或补充内容。
用户的问题内容会以三个#符号进行包围。
###
{question}
###
请只输出分类结果,不要包含任何其他内容。
"""
定义问题工具函数
接收初始化的模型,问题,分类
def classify_question(llm_model, question, categories):
formatted_prompt = PROMPT_TEMPLATE.format(
categories="、".join(categories), # 使用中文顿号分隔更符合中文语境
question=question.strip() # 添加输入清理
)
try:
response = llm_model.invoke(formatted_prompt)
return response.strip() # 清理响应中的多余空白
except Exception as e:
print(f"分类请求失败: {str(e)}")
return "分类失败"
初始化模型、定义问题列表、循环调用模型处理
def main():
# 初始化模型
llm_model = OllamaLLM(model="qwen2.5:14b")
# 测试问题列表
test_questions = [
"我刚买的XYZ智能手表无法同步我的日历,我应该怎么办?",
"XYZ手表的电池可以持续多久?",
"XYZ品牌的手表和ABC品牌的手表相比,有什么特别的功能吗?",
"安装XYZ智能手表的软件更新后,手表变得很慢,这是啥原因?",
"XYZ智能手表防水不?我可以用它来记录我的游泳数据吗?",
"我想知道XYZ手表的屏幕是什么材质,容不容易刮花?",
"请问XYZ手表标准版和豪华版的售价分别是多少?还有没有进行中的促销活动?"
]
# 处理每个问题并输出结果
for question in test_questions:
category = classify_question(llm_model, question, CATEGORY_LIST)
print(f"问题:{question}\n分类:{category}\n{'-' * 40}")
完整例子
from langchain_ollama import OllamaLLM
CATEGORY_LIST = ["产品规格", "使用咨询", "功能比较", "用户反馈", "价格查询", "故障问题", "其它"]
PROMPT_TEMPLATE = """
你的任务是为用户对产品的疑问进行分类。
请仔细阅读用户的问题内容,给出所属类别。类别应该是这些里面的其中一个:{categories}。
直接输出所属类别,不要有任何额外的描述或补充内容。
用户的问题内容会以三个#符号进行包围。
###
{question}
###
请只输出分类结果,不要包含任何其他内容。
"""
def classify_question(llm_model, question, categories):
formatted_prompt = PROMPT_TEMPLATE.format(
categories="、".join(categories), # 使用中文顿号分隔更符合中文语境
question=question.strip() # 添加输入清理
)
try:
response = llm_model.invoke(formatted_prompt)
return response.strip() # 清理响应中的多余空白
except Exception as e:
print(f"分类请求失败: {str(e)}")
return "分类失败"
def main():
# 初始化模型
llm_model = OllamaLLM(model="qwen2.5:14b")
# 测试问题列表
test_questions = [
"我刚买的XYZ智能手表无法同步我的日历,我应该怎么办?",
"XYZ手表的电池可以持续多久?",
"XYZ品牌的手表和ABC品牌的手表相比,有什么特别的功能吗?",
"安装XYZ智能手表的软件更新后,手表变得很慢,这是啥原因?",
"XYZ智能手表防水不?我可以用它来记录我的游泳数据吗?",
"我想知道XYZ手表的屏幕是什么材质,容不容易刮花?",
"请问XYZ手表标准版和豪华版的售价分别是多少?还有没有进行中的促销活动?"
]
# 处理每个问题并输出结果
for question in test_questions:
category = classify_question(llm_model, question, CATEGORY_LIST)
print(f"问题:{question}\n分类:{category}\n{'-' * 40}")
if __name__ == "__main__":
main()
- 运行结果如下:
留言