课程讲解

一、LangChain4j入门

1、简介

LangChain4j 的目标是简化将大语言模型(LLM - Large Language Model)集成到 Java 应用程序中的过程。

1.1、历史背景

2022 年11月30日OpenAI发布了Chat GPT(GPT-3.5)

早在 2022 年10月,Harrison Chase 发布了基于Python的LangChain。

随后同时包含了Python版和JavaScript(LangChain.js)版的LangChain 也发布了。

2023 年 11 月,Quarkus 发布了 LangChain4j 的 0.1 版本,2025 年 2 月发布了 1.0 - Beta1 版本,4 月发布了 1.0 - Beta3 版本

官网:https://docs.langchain4j.dev

1.2、主要功能

与大型语言模型和向量数据库的便捷交互

通过统一的应用程序编程接口(API),可以轻松访问所有主要的商业和开源大型语言模型以及向量数据库,使你能够构建聊天机器人、智能助手等应用。

专为 Java 打造

借助Spring Boot 集成,能够将大模型集成到ava 应用程序中。大型语言模型与 Java 之间实现了双向集成:你可以从 Java 中调用大型语言模型,同时也允许大型语言模型反过来调用你的 Java 代码

智能代理、工具、检索增强生成(RAG)

为常见的大语言模型操作提供了广泛的工具,涵盖从底层的提示词模板创建、聊天记忆管理和输出解析,到智能代理和检索增强生成等高级模式。

2、创建SpringBoot项目

2.1、创建一个Maven项目

2.2、添加SpringBoot相关依赖
<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring-boot.version>3.2.6</spring-boot.version>
    <knife4j.version>4.3.0</knife4j.version>
    <langchain4j.version>1.0.0-beta3</langchain4j.version>
    <mybatis-plus.version>3.5.11</mybatis-plus.version>
</properties>
​
​
<dependencies>
    <!-- web应用程序核心依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 编写和运行测试用例 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- 前后端分离中的后端接口测试工具 -->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
        <version>${knife4j.version}</version>
    </dependency>
</dependencies>
​
<dependencyManagement>
    <dependencies>
        <!--引入SpringBoot依赖管理清单-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
2.3、创建配置文件

在resources下创建配置文件application.properties

# web服务访问端口
server.port=8080
2.4、创建启动类
package com.atguigu.java.ai.langchain4j;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
public class XiaozhiApp {
    public static void main(String[] args) {
        SpringApplication.run(XiaozhiApp.class, args);
    }
}
2.5、启动启动类

访问 http://localhost:8080/doc.html 查看程序能否成功运行并显示如下页面

3、接入大模型

  • 参考文档: Get Startedhttps://docs.langchain4j.dev/get-started

    3.1、添加LangChain4j相关依赖
    <properties>
        <langchain4j.version>1.0.0-beta3</langchain4j.version>
    </properties>
    ​
    <dependencies>
        <!-- 基于open-ai的langchain4j接口:ChatGPT、deepseek都是open-ai标准下的大模型 -->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>
    </dependencies>
    ​
    <dependencyManagement>
        <dependencies>
            <!--引入langchain4j依赖管理清单-->
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-bom</artifactId>
                <version>${langchain4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    3.2、创建测试用例

    接入任何一个大模型都需要先去申请apiKey。

    如果你暂时没有密钥,也可以使用LangChain4j 提供的演示密钥,这个密钥是免费的,有使用配额限制,且仅限于 gpt-4o-mini 模型。

    package com.zhentao.demo;
    ​
    import dev.langchain4j.model.openai.OpenAiChatModel;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    ​
    @SpringBootTest
    public class LLMTest {
    ​
        /**
         * gpt-4o-mini语言模型接入测试
         */
        @Test
        public void testGPTDemo() {
            OpenAiChatModel model = OpenAiChatModel.builder()
                    .baseUrl("http://langchain4j.dev/demo/openai/v1")
                    .apiKey("demo")
                    .modelName("gpt-4o-mini")
                    .build();
    ​
            //向模型提问
            String answer = model.chat("你是谁");
            //输出结果
            System.out.println(answer);
        }
    }

    4、SpringBoot整合

    参考文档:https://docs.langchain4j.dev/tutorials/spring-boot-integration

    4.1、替换依赖

    langchain4j-open-ai 替换成 langchain4j-open-ai-spring-boot-starter

    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    </dependency>
    4.2、配置模型参数
    #langchain4j测试模型
    langchain4j.open-ai.chat-model.api-key=demo
    langchain4j.open-ai.chat-model.model-name=gpt-4o-mini
    langchain4j.open-ai.chat-model.base-url=http://langchain4j.dev/demo/openai/v1
    #应用程序发送给大模型的请求和响应日志
    langchain4j.open-ai.chat-model.log-requests=true
    langchain4j.open-ai.chat-model.log-responses=true
    #将系统日志提升至debug级别
    logging.level.root=debug
    4.3、创建测试用例
    /**
     * 整合SpringBoot
     */
    @Autowired
    private OpenAiChatModel openAiChatModel;
    ​
    @Test
    public void testSpringBoot() {
        //向模型提问
        String answer = openAiChatModel.chat("你是谁?");
        //输出结果
        System.out.println(answer);
    }

    二、接入其他大模型

    1、都有哪些大模型

    2、接入DeepSeek

    2.1、获取开发参数
    2.2、配置开发参数

    为了apikay的安全,建议将其配置在服务器的环境变量中。变量名自定义即可,例如 DEEP_SEEK_API_KEY

  • 2.3、配置模型参数

    DeepSeek API文档:https://api-docs.deepseek.com/zh-cn/

    在 LangChain4j 中,DeepSeek 和 GPT 一样也使用了 OpenAI 的接口标准,因此也使用OpenAiChatModel进行接入

    #DeepSeek
    langchain4j.open-ai.chat-model.base-url=https://api.deepseek.com
    langchain4j.open-ai.chat-model.api-key=${DEEP_SEEK_API_KEY}
    #DeepSeek-V3
    langchain4j.open-ai.chat-model.model-name=deepseek-chat
    #DeepSeek-R1 推理模型
    #langchain4j.open-ai.chat-model.model-name=deepseek-reasoner
    2.4、创建测试用例
    /**
     * 整合SpringBoot
     */
    @Autowired
    private OpenAiChatModel openAiChatModel;
    ​
    @Test
    public void testSpringBoot() {
        //向模型提问
        String answer = openAiChatModel.chat("你是谁?");
        //输出结果
        System.out.println(answer);
    }

    三、接入阿里百炼平台

    1、什么是阿里百炼
    • 阿里云百炼是 2023 年 10 月推出的。它集成了阿里的通义系列大模型和第三方大模型,涵盖文本、图像、音视频等不同模态。

    • 功能优势:集成超百款大模型 API,模型选择丰富;5-10 分钟就能低代码快速构建智能体,应用构建高效;提供全链路模型训练、评估工具及全套应用开发工具,模型服务多元;在线部署可按需扩缩容,新用户有千万 token 免费送,业务落地成本低。

    2、申请免费体验

    (1)点击进入免费体验页面

  • (2)点击免费体验

  • (3)点击开通服务

  • (4)确认开通

    3、配置apiKey

    申请apiKey:https://bailian.console.aliyun.com/?apiKey=1&productCode=p_efm#/api-key

  • 配置apiKey:配置在环境变量DASH_SCOPE_API_KEY
  • 4、添加依赖

    LangChain4j参考文档:https://docs.langchain4j.dev/integrations/language-models/dashscope#plain-java

    <dependencies>
        <!-- 接入阿里云百炼平台 -->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    ​
    ​
    <dependencyManagement>
      <dependencies>
        <!--引入百炼依赖管理清单-->
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-community-bom</artifactId>
            <version>${langchain4j.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
     </dependencies>
    </dependencyManagement>
    5、配置模型参数
    #阿里百炼平台
    langchain4j.community.dashscope.chat-model.api-key=${DASH_SCOPE_API_KEY}
    langchain4j.community.dashscope.chat-model.model-name=qwen-max
    6、测试通义千问
    /**
     * 通义千问大模型
     */
    @Autowired
    private QwenChatModel qwenChatModel;
    @Test
    public void testDashScopeQwen() {
        //向模型提问
        String answer = qwenChatModel.chat("你是谁?");
        //输出结果
        System.out.println(answer);
    }

    四 直接集成通义千问

    获取API Key 并将其配置到环境变量

    安装Dash Scope SDK

    1.1、添加依赖
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dashscope-sdk-java</artifactId>
        <!-- 请将 'the-latest-version' 替换为最新版本号:https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
        <version>the-latest-version</version>
    </dependency>
    ​
    ​
    会出现报错信息 SLF4J 日志框架冲突
    log
    SLF4J(W): Class path contains multiple SLF4J providers.
    SLF4J(W): Found provider [org.slf4j.simple.SimpleServiceProvider@61064425]
    SLF4J(W): Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@7b1d7fff]
    原因:
    项目同时引入了 slf4j-simple 和 logback-classic,它们都是 SLF4J 的实现,导致冲突。
    所以移除 slf4j-simple:
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>2.0.13</version>
        <scope>test</scope> <!-- 如果必须保留,限定在 test 范围 -->
    </dependency>
    ​
    将依赖修改为
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dashscope-sdk-java</artifactId>
        <version>2.18.5</version>
        <exclusions>
            <!-- 排除 slf4j-simple -->
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    其他报错信息环境变量中找不到api key

    需要在环境变量中配置好 并且重启电脑

    如果不想重启电脑 就用硬编码的格式:apiKey("sk-xxx") 或是在yml文件配置模型参数

    dashscope:
      api-key: "your-dashscope-api-key"  # 替换为真实 Key
    1.2、测试千问
    package com.zhentao;
    ​
    import java.util.Arrays;
    import java.lang.System;
    import com.alibaba.dashscope.aigc.generation.Generation;
    import com.alibaba.dashscope.aigc.generation.GenerationParam;
    import com.alibaba.dashscope.aigc.generation.GenerationResult;
    import com.alibaba.dashscope.common.Message;
    import com.alibaba.dashscope.common.Role;
    import com.alibaba.dashscope.exception.ApiException;
    import com.alibaba.dashscope.exception.InputRequiredException;
    import com.alibaba.dashscope.exception.NoApiKeyException;
    import com.alibaba.dashscope.utils.JsonUtils;
    ​
    public class Main {
        public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
            Generation gen = new Generation();
            Message systemMsg = Message.builder()
                    .role(Role.SYSTEM.getValue())
                    .content("You are a helpful assistant.")
                    .build();
            Message userMsg = Message.builder()
                    .role(Role.USER.getValue())
                    .content("你是谁?")
                    .build();
            GenerationParam param = GenerationParam.builder()
                    // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx")
                    .apiKey("sk-c321eddd8a3549889fa460c1e695e0f2")
                    // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                    .model("qwen-max")
                    .messages(Arrays.asList(systemMsg, userMsg))
                    .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                    .build();
            return gen.call(param);
        }
        public static void main(String[] args) {
            try {
                GenerationResult result = callWithMessage();
                System.out.println(JsonUtils.toJson(result));
            } catch (ApiException | NoApiKeyException | InputRequiredException e) {
                // 使用日志框架记录异常信息
                System.err.println("An error occurred while calling the generation service: " + e.getMessage());
            }
            System.exit(0);
        }
    }
    ​

    1.3、测试通义万象

    生成图片测试

    @Test
    public void testDashScopeWanx(){
        WanxImageModel wanxImageModel = WanxImageModel.builder()
                .modelName("wanx2.1-t2i-plus")
                .apiKey(System.getenv("DASH_SCOPE_API_KEY"))
                .build();
        Response<Image> response = wanxImageModel.generate("奇幻森林精灵:在一片弥漫着轻柔薄雾的古老森林深处,阳光透过茂密枝叶洒下金色光斑。一位身材娇小、长着透明薄翼的精灵少女站在一朵硕大的蘑菇上。她有着海藻般的绿色长发,发间点缀着蓝色的小花,皮肤泛着珍珠般的微光。身上穿着由翠绿树叶和白色藤蔓编织而成的连衣裙,手中捧着一颗散发着柔和光芒的水晶球,周围环绕着五彩斑斓的蝴蝶,脚下是铺满苔藓的地面,蘑菇和蕨类植物丛生,营造出神秘而梦幻的氛围。");
        System.out.println(response.content().url());
    }
    2.1、测试DeepSeek

    也可以在阿里百炼上集成第三方大模型,如DeepSeek

    将配置参数上的base-url参数指定到百炼平台,使用百炼上的大模型名称和apiKey即可

    #集成百炼-deepseek
    langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
    langchain4j.open-ai.chat-model.api-key=${DASH_SCOPE_API_KEY}
    langchain4j.open-ai.chat-model.model-name=deepseek-v3
    #温度系数:取值范围通常在 0 到 1 之间。值越高,模型的输出越随机、富有创造性;
    # 值越低,输出越确定、保守。这里设置为 0.9,意味着模型会有一定的随机性,生成的回复可能会比较多样化。
    langchain4j.open-ai.chat-model.temperature=0.9

    使用之前的测试用例testSpringBoot测试即可

Logo

更多推荐