具有结构化输出的LLM使得文本分类和标记变得极其简单。今天,我们将编写一个脚本来实现这一点——对客户服务聊天进行分类。
我们将从聊天中提取并标记关键细节,包括用户的姓名、情感、语言以及他们与客户服务代表的对话主题。
在进入代码之前,让我们回顾一下工具和要求:
- 本地安装Python
- OpenAI API密钥
- 一个包含代表与客户之间对话的文本文件
创建项目目录
现在,让我们创建项目目录并使用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驱动的分析集成到您的工作流程中的基础。
尝试调整分类方案,添加更多类别,或者将多个提示串联在一起,尽情享受吧!
如果您有任何问题,欢迎留言