第9章:LangChain结构化输出-示例1(情感分析AI服务)

如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。

本章主要讲述基于LangChain调用大模型如何进行结构化输出的真实示例,一共列列举,本章主要介绍如何通过自然语言借助大模型分析用户情感分析的例子

整体代码结果说明

代码定义了多个静态内部类,每个类都展示了LangChain4j中不同类型的AI服务示例。这些服务通过接口和注解定义,并通过AiServices.create()方法动态生成实现。每个类都包含一个main方法,用于演示如何调用这些服务。

情感分析服务(SentimentAnalyzer)

1. 接口定义

情感分析服务通过定义一个接口SentimentAnalyzer来封装情感分析功能。接口中包含两个方法:

  • analyzeSentimentOf(String text):分析文本的情感倾向,并返回一个Sentiment枚举值(POSITIVE、NEUTRAL、NEGATIVE)。
  • isPositive(String text):判断文本是否具有正面情感,并返回一个布尔值。
interface SentimentAnalyzer {
    @UserMessage("Analyze sentiment of {{it}}")
    Sentiment analyzeSentimentOf(String text);

    @UserMessage("Does {{it}} have a positive sentiment?")
    boolean isPositive(String text);
}

2. 注解的使用

  • @UserMessage:用于定义用户消息模板。模板中的{{it}}会被替换为方法参数(即要分析的文本)。这使得AI能够理解用户的意图,并生成相应的响应。
  • @SystemMessage:虽然在这个示例中没有使用,但可以用来定义系统消息,设置AI的行为风格(例如,要求AI以特定的方式回答问题)。

3. 枚举类型

情感分析的结果通过一个枚举类型Sentiment表示,包含三个可能的值:

  • POSITIVE:正面情感
  • NEUTRAL:中性情感
  • NEGATIVE:负面情感
enum Sentiment {
    POSITIVE, NEUTRAL, NEGATIVE;
}

4. 动态生成服务实现

通过AiServices.create()方法,LangChain4j框架动态生成了SentimentAnalyzer接口的实现。这意味着开发者不需要手动实现接口方法,而是由框架根据接口定义和注解自动生成实现逻辑。

SentimentAnalyzer sentimentAnalyzer = AiServices.create(SentimentAnalyzer.class, chatLanguageModel);

5. 调用服务

在main方法中,通过调用SentimentAnalyzer的两个方法,展示了如何使用该服务:
调用analyzeSentimentOf(String text)方法分析文本的情感倾向。
调用isPositive(String text)方法判断文本是否具有正面情感。

Sentiment sentiment = sentimentAnalyzer.analyzeSentimentOf("It is good!");
System.out.println(sentiment); // 输出:POSITIVE

boolean positive = sentimentAnalyzer.isPositive("It is bad!");
System.out.println(positive); // 输出:false

6. 完整代码


public class OtherServiceExamples {

    // 使用OpenAI的API密钥初始化ChatLanguageModel
    static ChatLanguageModel chatLanguageModel = OpenAiChatModel
    								.withApiKey(ApiKeys.OPENAI_API_KEY);

    /**
     * 情感分析服务示例
     */
    static class Sentiment_Extracting_AI_Service_Example {

        // 定义情感枚举
        enum Sentiment {
            POSITIVE, NEUTRAL, NEGATIVE;
        }

        // 定义情感分析接口
        interface SentimentAnalyzer {

            // 使用@UserMessage注解定义用户消息模板,{{it}}会被替换为方法参数
            @UserMessage("Analyze sentiment of {{it}}")
            Sentiment analyzeSentimentOf(String text);

            // 判断文本是否具有正面情感
            @UserMessage("Does {{it}} have a positive sentiment?")
            boolean isPositive(String text);
        }

        public static void main(String[] args) {

            // 动态生成情感分析服务的实现
            SentimentAnalyzer sentimentAnalyzer = AiServices.create(SentimentAnalyzer.class, chatLanguageModel);

            // 分析文本情感倾向
            Sentiment sentiment = sentimentAnalyzer.analyzeSentimentOf("It is good!");
            System.out.println(sentiment); // 输出:POSITIVE

            // 判断文本是否具有正面情感
            boolean positive = sentimentAnalyzer.isPositive("It is bad!");
            System.out.println(positive); // 输出:false
        }
    }
  }	

代码解读

功能
情感分析服务,用于分析文本的情感倾向(正面、中性、负面)。
实现
定义了一个SentimentAnalyzer接口,包含两个方法:

  • analyzeSentimentOf(String text):分析文本的情感倾向。
  • isPositive(String text):判断文本是否具有正面情感。

使用@UserMessage注解定义了用户消息模板,{{it}}是模板变量,会被替换为方法参数。
通过AiServices.create()动态生成SentimentAnalyzer的实现。
调用

  • 分析文本"It is good!"的情感倾向,输出POSITIVE。
  • 判断文本"It is bad!"是否具有正面情感,输出false。

7. 技术优势

  • 封装性:通过接口和注解,将情感分析功能封装为一个服务,使得代码更加模块化,易于维护和扩展。
  • 动态性:利用LangChain4j框架的动态生成能力,自动实现接口方法,减少了手动编码的工作量。
  • 灵活性:通过注解定义用户消息模板,可以灵活地调整AI的输入和输出格式,适应不同的业务需求。
  • 可扩展性:可以轻松添加更多的情感分析功能或扩展到其他自然语言处理任务。

总结

情感分析服务(SentimentAnalyzer)通过定义接口、使用注解和动态生成服务实现,展示了LangChain4j框架的强大功能。这种实现方式不仅简化了开发流程,还提高了代码的可维护性和可扩展性。通过@UserMessage注解,AI能够理解用户意图并生成相应的响应,而动态生成的服务实现则避免了手动编写复杂的逻辑。这种模式可以广泛应用于其他自然语言处理任务,为开发者提供了一种高效、灵活的解决方案。

注释说明

  • @UserMessage:定义用户消息模板,{{it}}会被替换为方法参数。
  • @SystemMessage:定义系统消息,用于设置AI的行为风格。
  • @StructuredPrompt:定义结构化提示,用于更复杂的用户消息模板。
  • @Description:为字段添加描述,帮助AI更好地理解任务。
  • @V:定义变量,用于在注解中传递参数。
  • AiServices.create():动态生成服务的实现。

导读说明:
这是LangChain开发智能体的系列文档,欢迎连读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起学开源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值