LangChain4j集成AI大模型的两种方式

LangChain4j 是一款专为 Java 开发者设计的框架,旨在简化与 LLM 的集成过程,使开发者能够更加专注于业务逻辑而非底层的技术细节。LangChain4j 是 LangChain 的一个 Java 封装器,它将 LangChain 应用于 Java 环境中,利用 Java 强大的功能和丰富的库来处理数据,并提供了与多种流行的大语言模型无缝对接的能力。通过 LangChain4j,Java 开发者可以轻松地将最先进的 AI 技术融入到他们的应用程序中,无论是构建聊天机器人、还是智能客服系统,都能得心应手。

关于如何集成 AI 大模型到现有的 Java 应用程序中,LangChain4j 提供了两种主要的方法:一种是直接调用每种大模型提供的 API 接口,这种方式需要开发者熟悉不同模型的具体接口规范,并根据需求编写相应的代码来实现交互;另一种则是通过 Spring Boot 的自动装配机制,利用 LangChain4j 提供的 starter 依赖,自动化配置所需的组件和服务,极大地减少了手动设置的工作量 。在这篇文章中,我们将重点介绍 LangChain4j对接AI大模型的两种方式。

一、前提条件

  • JDK为17以上版本,本人使用的jdk21版本;
  • SpringBoot版本为3.x以上,本项目使用的是SpringBoot 3.4.0版本;
  • 本文采用了阿里巴巴的Qwen大模型进行实验与验证,但您同样可以选择使用DeepSeek大模型作为替代方案。若选用阿里巴巴的AI服务,则需首先在阿里云平台上开通相应的大型模型服务,并获取所需的API密钥,以便在后续代码中调用。具体的开通与配置步骤,请参阅阿里云大模型服务平台“百炼”的相关文档和指南如何获取API Key_大模型服务平台百炼(Model Studio)-阿里云帮助中心。这样可以确保您能够顺利地集成和使用这些先进的AI资源。

二、方式一:手动编码方式对接大模型

1、添加maven依赖

本示例调用阿里巴巴大模型服务,所以引入langchain4j-community-dashscope-spring-boot-starter

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.0</version>
    </parent>

    <groupId>com.yuncheng</groupId>
    <artifactId>langchain4j-rag-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <langchain4j.version>1.0.0-beta1</langchain4j.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
            <version>${langchain4j.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>
</project>

2、手动编码调用大模型服务

手动编码创建ChatLanguageModel对象,实现跟大模型对话。由于本示例使用的是阿里云Qwen大模型,所以使用QwenChatModel类构建,如果你使用的是其他厂商的大模型,那么需要调用对应的SDK类进行创建。比如:百度千帆大模型使用QianfanChatModel、本地部署的大模型使用OllamaChatModel、OpenAI标准大模型使用OpenAiChatModel等。

import dev.langchain4j.community.model.dashscope.QwenChatModel;
import dev.langchain4j.model.chat.ChatLanguageModel;
public class HelloWorld {
    public static void main(String[] args) {
        ChatLanguageModel model = QwenChatModel.builder()
                .apiKey("sk-4d6e6db446014411ad92c0e8fa143964")
                .modelName("qwen-plus")
                //以下的参数,根据具体业务需求设置
                //.temperature(0.5F)
                //.topK(2)
                //.topP(0.7)
                .build();

        String answer = model.chat("请给我讲一个笑话");

        System.out.println(answer);
    }
}

三、方式二:spring自动装配对接大模型

1、添加maven依赖

本示例调用阿里巴巴大模型服务,所以引入langchain4j-community-dashscope-spring-boot-starter,本示例是一个springboot工程,还需要引入spring-boot-starter-webflux。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.0</version>
    </parent>

    <groupId>com.yuncheng</groupId>
    <artifactId>langchain4j-rag-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <langchain4j.version>1.0.0-beta1</langchain4j.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
            <version>${langchain4j.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>
</project>

2、调用大模型服务

2.1、配置yml文件

server:
  port: 8099

langchain4j:
  community:
    dashscope:
      chat-model:
        model-name: qwen-plus
        api-key: sk-4d6e6db446014411ad92c0e8fa143964
logging:
  level:
    org.springframework.boot.autoconfigure: DEBUG

注意:如果你不知道yml文件里的装配参数怎么写,可以把springboot自动装配参数日志打开,查看具体有哪些参数可配置使用。在yml文件配置org.springframework.boot.autoconfigure: DEBUG即可。

2.1、springboot调用大模型服务

由于springboot自动装配过程中,已经生成了ChatLanguageModel对象,所以无需手动构建了,在需要跟大模型对话的地方直接使用ChatLanguageModel即可。

import dev.langchain4j.model.chat.ChatLanguageModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ChatController {

    ChatLanguageModel chatLanguageModel;

    ChatController(ChatLanguageModel chatLanguageModel) {
        this.chatLanguageModel = chatLanguageModel;
    }

    @GetMapping("/hello")
    public String hello(@RequestParam(value = "message", defaultValue = "请给我讲一个笑话") String message) {
        return chatLanguageModel.chat(message);
    }
}

再创建一个springboot启动类即可:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;

@SpringBootApplication
public class Langchain4jApplication {

    private static final Logger log = LoggerFactory.getLogger(Langchain4jApplication.class);

    public static void main(String[] args) {
        ConfigurableApplicationContext application = SpringApplication.run(Langchain4jApplication.class, args);
        Environment env = application.getEnvironment();
        String port = env.getProperty("server.port");
        log.info("Application启动成功,服务端口为:" + port);

    }
}

启动Langchain4jApplication后,浏览器里直接输入http://localhost:8099/hello,测试调用大模型效果。

四、关于ChatLanguageModel和StreamingChatLanguageModel区别

我们在验证langchain4j框架的过程中,发现有两类对话模型的接口,分别是ChatLanguageModel和StreamingChatLanguageModel,这跟Spring AI框架的设计思想是有区别的,在SpringAI中,是通过一个统一的对象ChatClient

进行参数化构建的。那么,langchain4j中为什么会区分ChatLanguageModel和StreamingChatLanguageModel呢?

1、ChatLanguageModel 和 StreamingChatLanguageModel 都是 LangChain4j 库中用于与大语言模型(LLM)交互的接口,但它们在实现和使用场景上有显著的区别。

2、ChatLanguageModel 是一个同步接口,它接受一个或多个 ChatMessage 对象作为输入,并返回一个包含 AI 响应的 AiMessage 对象。这意味着整个响应是在一次调用中生成并返回的。这种方法适用于那些不需要实时反馈的应用场景,或者当您希望一次性接收完整响应时非常有用。

3、StreamingChatLanguageModel 提供了流式处理的能力。它允许逐个 token 地接收来自 LLM 的响应,这使得它可以像打字机一样逐步展示文本给用户,从而提供更好的用户体验。这对于聊天应用或其他需要即时反馈的场景尤为重要。

4、设计原则:保持接口职责单一是一个良好的设计实践。每个接口专注于一种特定的行为模式,有助于代码的可维护性和扩展性。例如,如果您需要修改流式处理逻辑,只需关注 StreamingChatLanguageModel 相关的部分,而不影响同步处理逻辑。

### 使用 LangChain4J 集成千帆大模型 LangChain4J 是一种用于构建复杂应用程序的语言链框架,支持多种大型语言模型 (LLM) 的集成。以下是关于如何使用 LangChain4J 来集成千帆大模型的相关说明。 #### 1. 添加依赖项 为了能够使用 LangChain4J 和千帆大模型,首先需要确保项目中包含了必要的 Maven 或 Gradle 依赖项。以下是一个典型的 Maven 配置: ```xml <dependency> <groupId>com.langchain</groupId> <artifactId>langchain4j</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 千帆大模型 SDK --> <dependency> <groupId>cn.qwen</groupId> <artifactId>qwen-sdk</artifactId> <version>latest-version</version> </dependency> ``` 上述配置中的 `langchain4j` 提供了核心功能,而 `qwen-sdk` 则提供了访问千帆大模型所需的 API 功能[^2]。 #### 2. 初始化 LangChain4J 并连接到千帆大模型 初始化 LangChain4J 后,可以通过其提供的接口来调用千帆大模型的服务。下面是一段示例代码展示如何完成这一过程: ```java import com.langchain.LangChain; import cn.qwen.QwenClient; public class QwenIntegration { public static void main(String[] args) { // 创建 LangChain 实例 LangChain langChain = new LangChain(); // 初始化千帆大模型客户端 QwenClient qwenClient = new QwenClient("your-api-key", "your-secret"); // 将千帆大模型设置为 LangChain 的 LLM 提供者 langChain.setLlmProvider(qwenClient); // 测试请求 String result = langChain.generateText("请解释什么是强化学习?"); System.out.println(result); } } ``` 在此代码片段中,`QwenClient` 被用来代表千帆大模型的客户端实例,并将其作为提供者传递给 LangChain 对象[^1]。 #### 3. 处理长上下文输入 如果应用涉及处理较长的文本数据,则可以利用千帆大模型强大的长上下文处理能力。这通常涉及到调整参数以适应更大的 token 数量限制。例如,在 Java 中可这样实现: ```java // 设置最大上下文长度 qwenClient.setMaxContextLength(1_000_000); // 支持百万 tokens 上下文长度 String longResult = langChain.generateText(longInputText, options -> { options.setMaxTokensOutput(500); // 控制输出的最大 token 数 }); System.out.println(longResult); ``` 这里展示了如何通过编程方式设定最大上下文长度以及控制生成结果的大小。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大龄码农有梦想

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

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

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

打赏作者

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

抵扣说明:

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

余额充值