利用语言模型天生的语境分析能力,可以轻松的判断出,用户在产品留言中的问题

本案例基于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()
  • 运行结果如下:
最后修改日期: 2025年 3月 2日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。