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, Field

load_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'

### 关于LangChain4j框架的使用或文档 LangChain是一个专注于大型语言模型(LLMs)的强大工具集,提供了多种功能模块来处理提示工程、文本生成、索引以及总结等问题[^2]。尽管主要讨论的是Python版本的LangChain库,但Java开发者也可以通过LangChain4j访问这些强大的特性。 #### LangChain4j简介 LangChain4j是LangChain官方支持的一个Java实现,旨在让Java开发人员能够轻松集成并利用LLM的能力到他们的应用程序中。它允许用户构建复杂的对话系统、自动化工作流以及其他基于自然语言的任务。具体来说,该库实现了许多核心组件,例如PromptTemplates、MemoryModules和Chains等,并且可以无缝对接主流的语言模型服务提供商[^1]。 #### 安装与依赖管理 要开始使用LangChain4j,在项目中添加必要的依赖项是非常重要的第一步。如果您的环境采用Maven作为构建工具,则可以在`pom.xml`文件里加入如下声明: ```xml <dependency> <groupId>com.langchain</groupId> <artifactId>langchain4j-core</artifactId> <version>0.0.7</version> <!-- 版本号可能随时间更新 --> </dependency> ``` 对于Gradle使用者而言,相应的配置应类似于下面这样写入`build.gradle`: ```gradle implementation 'com.langchain:langchain4j-core:0.0.7' ``` 以上代码片段展示了如何正确引入LangChain4j的核心包以便后续操作[^3]。 #### 创建第一个应用实例 一旦完成了上述设置过程之后,就可以着手编写实际的应用程序逻辑了。这里给出一段简单的例子用来展示基本用法——即初始化一个OpenAI驱动器并与之交互完成特定查询请求的功能。 ```java import ai.langchain.OpenAI; import ai.langchain.ChatModel; public class Main { public static void main(String[] args) throws Exception { String apiKey = System.getenv("OPENAI_API_KEY"); ChatModel model = new OpenAI(apiKey); String response = model.call("What is the capital city of France?"); System.out.println(response); // Expected output: Paris } } ``` 在这个案例当中,我们首先定义了一个变量存储来自操作系统环境变量中的API密钥;接着创建了一个由指定密钥认证过的ChatModel对象代表我们要使用的预训练模型;最后调用了它的方法传入一个问题字符串从而获得答案返回值打印出来验证效果。 #### 高级特性和扩展能力 除了基础的消息传递之外,LangChain还额外包含了几个非常实用的功能点值得探索学习: - **记忆机制**:使得会话具备上下文感知能力。 - **多模态输入/输出支持**:不仅限于纯文字形式的数据交流。 - **自定义模板设计**:灵活调整提问方式满足不同场景需求。 - **性能优化建议**:借助Ray这样的分布式计算平台进一步提升效率表现。 综上所述,无论是初学者还是有一定经验的技术爱好者都可以从LangChain及其对应的Java封装版LangChain4j中学有所获!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值