Langchian - 实现文本分类实际应用
文本分类是 自然语言处理 领域中的一个重要任务,旨在将文本数据自动归类到预定义的类别中。 它是实现信息检索、智能推荐、情感分析等应用的基础技术之一。
以下程序实现了 文本分类任务,适用于:
- 社交媒体情绪分析
- 客服对话情感识别
- 多语言内容自动检测
- 用户评论质量评估(是否攻击性强)
1.加载配置并初始化大模型
import os
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel, Fieldload_dotenv()
llm = ChatOpenAI(model=os.getenv("MODEL"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("BASE_URL")
)
2.定义文本分类的数据模型
定义一个 TextClassification 模型,用于指定输出格式:
sentiment:情感倾向(如“愤怒”、“高兴”等)
aggressiveness:攻击性评分(1~10 分)
language:识别使用的语言(如“中文”、“英语”)
class TextClassification(BaseModel):sentiment: str = Field(description="文本的情感")aggressiveness: int = Field(description="描述文本的攻击性,数字越大表示越攻击性")language: str = Field(description="文本使用的语言")
3.构建提示模板
定义一个系统提示,要求模型只提取与 TextClassification 相关的信息。
{input} 是占位符,将在运行时被实际文本替换。
prompt = ChatPromptTemplate.from_template("""从以下段落中提取所需信息。只提取'TextClassification'类中提到的属性。段落:{input}"""
)
4.构建执行链并执行输出
使用 LangChain 的管道操作符 | 构建一个链式流程。
with_structured_output 强制模型输出符合 TextClassification 结构的 JSON 数据。
调用链处理该文本,并将结果解析为 TextClassification 类型对象。
chain = prompt | llm.with_structured_output(schema=TextClassification)input_text = "你这个小孩儿,太不懂事了,做出的事情实在让我生气!"
result: TextClassification = chain.invoke({'input': input_text})
print(result)
执行结果:
sentiment='negative' aggressiveness=3 language='Chinese'
如果你需要扩展支持更多分类维度(如主题、意图识别等),只需在 TextClassification 模型中添加字段即可。
class TextClassification(BaseModel):"""定义一个Pydantic的数据模型,未来需要根据该类型,完成文本的分类"""# 文本的情感倾向,预期为字符串类型sentiment: str = Field(..., enum=["happy", "neutral", "sad"], description="文本的情感")# 文本的攻击性,预期为1到5的整数aggressiveness: int = Field(..., enum=[1, 2, 3, 4, 5], description="描述文本的攻击性,数字越大表示越攻击性")# 文本使用的语言,预期为字符串类型language: str = Field(..., enum=["spanish", "english", "french", "中文", "italian"], description="文本使用的语言")input_text = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"
执行结果:
sentiment='happy' aggressiveness=1 language='spanish'