首页 论坛 置顶 使用Python、OpenAI和Langchain对客户服务聊天进行分类与标注

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #13402

    具有结构化输出的LLM使得文本分类和标记变得极其简单。今天,我们将编写一个脚本来实现这一点——对客户服务聊天进行分类。

    我们将从聊天中提取并标记关键细节,包括用户的姓名、情感、语言以及他们与客户服务代表的对话主题。

    在进入代码之前,让我们回顾一下工具和要求:

    1. 本地安装Python
    2. OpenAI API密钥
    3. 一个包含代表与客户之间对话的文本文件

    创建项目目录

    现在,让我们创建项目目录并使用cd命令进入该目录。

    mkdir text_classification && cd text_classification

     

    让我们确保准备好工具和项目。因此,让我们在根目录中创建项目的入口文件

    touch main.py

     

    现在,创建一个虚拟环境以保持我们的依赖项被隔离,这样它们就不会干扰系统范围的Python包,然后激活它。

    python -m venv .venv
    source .venv/bin/activate
    

    安装依赖项

    在我们的虚拟环境设置好后,接下来安装我们的依赖项。我将使用pip,因此我将在我的项目终端中运行以下命令:

    • pydantic,一个广泛使用的Python验证库。它将允许我们声明我们期望从LLM获得的结构化输出响应的模式。
    • langchain 是一个框架和包,使得在 Python 中使用 LLM(大语言模型)变得更加简单。
    • langchain-openai 是一个 Langchain 包,提供与 OpenAI 模型的无缝集成。

    我使用 pip 来安装这些依赖项,因此我将在我的项目终端运行以下命令:

    pip install pydantic langchain langchain-openai
    

    环境变量与聊天文本文件

    太好了!现在我们已经安装了依赖项,让我们创建一个 .env 文件来存储我们的 OpenAI API 密钥。

    OPENAI_API_KEY=sk….
    
    在我们开始动手之前,别忘了聊天数据!

    将一段客服代表与客户之间的对话从WhatsApp导出到一个文本文件中。

    你可以使用我的示例聊天文件,或者使用你自己的文件。

    我会把这个文本文件放在项目的根目录中,以便稍后将该文件的内容传递给LLM。

     

    开始使用

    现在一切都已设置好,是时候打开main.py并开始编码了。

    首先,我们需要确保 OpenAI API 密钥已正确设置——否则我们将无法获得 LLM 的响应。

    import os
    
    if not os.getenv("OPENAI_API_KEY"):
       raise ValueError("OPENAI_API_KEY is not set")
    
    接下来,让我们在终端中运行以下命令:
    python main.py
    
    如果没有出现错误,你就可以继续了。

    但如果出现错误,请尝试关闭并重新打开你的终端。新的终端将加载你在 .env 文件中的变量。

    接下来,让我们导入这个脚本所需的其他模块

    from pydantic import BaseModel, Field
    from langchain.chat_models import init_chat_model

    分类架构

    现在让我们来看一下这个分类和标记脚本的核心内容。

    我们将使用 Pydantic 来定义一个 Classification 类,这个类将作为我们稍后传递给 LLM 的架构,以便它知道从聊天中提取和标记哪些信息。

    class Classification(BaseModel):
       name: str = Field(description=The name of the user)
       sentiment: str = Field(
           description="The sentiment of the user",
           enum=["positive", "negative", "neutral"],
         )
       language: str = Field(
           description="The language of the user",
           enum=["spanish", "english"],
       )
       issue: str = Field(
           description="The issue of the user",
           enum=["technical", "billing", "account", "other"],
       )
    

    如您所见,模式的 name 字段仅具有一个 description 属性,用于指定获取客户的名称。然而,其他字段也包含一个 enum

    在某些字段中添加 enum 的原因是确保模型仅在预定义类别内进行分类,从而减少歧义并使数据更易于存储和分析。

     

    结构化输出

    现在,让我们创建一个聊天模型。我们将使用 with_structured_output 来传递我们的 Classification 模式。

    在底层,Langchain 的 with_structured_output 方法确保 LLM 启用了结构化输出。

    
    llm = init_chat_model(
    "gpt-4o-mini", model_provider="openai").with_structured_output(Classification)
    

     

    接下来,我们将保存来自 `chat.txt` 的聊天内容,并为 LLM 创建一个完整的提示。

    with open("chat.txt", "r") as f:
       chat_text = f.read()
    
    prompt = """Extract the desired information from the following chat.
    Only extract the properties mentioned in the 'Classification' function.
    Conversation:n"""
    

    最后,让我们使用我们的提示和聊天文本内容调用LLM,并打印结果

    response = llm.invoke(prompt + chat_text)
    print(response)

     

    在我们的终端中,运行脚本

    > python main.py
    name='Andres Urdaneta' sentiment='neutral' language='spanish' issue='other'
    

    总结与下一步

    这就是我们所需的——一个使用Python、OpenAI API和Langchain对客户服务聊天进行分类和标记的完整脚本!

    只需几行代码,我们就将一段杂乱的对话结构化为清晰、可操作的数据。

    这个设置可以作为自动化客户洞察、构建更智能的聊天机器人,或甚至将AI驱动的分析集成到您的工作流程中的基础。

    尝试调整分类方案,添加更多类别,或者将多个提示串联在一起,尽情享受吧!


    如果您有任何问题,欢迎留言

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。