LangChain4j实战之二:极速开发体验

137 阅读6分钟

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):github.com/zq2599/blog…

LangChain4j实战全系列链接

  1. 准备工作
  2. 极速开发体验

本篇概览

  • 本篇是全系列第一次动手编码实战,力求极速入门,核心目标为:写最少的代码,看最直接的结果
  • 简单的说就是基于LangChain4j的库,用几行代码完成通义千问大模型的服务调用

image.png

  • 废话少说,开始编码

编码:pom.xml

  • 前文已经为整个系列准备好了父工程langchain4j-totorials,所以本篇直接在此工程中新建子工程即可
  • 在父工程目录下新建子目录,名为hello-world,pom.xml内容如下
<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>com.bolingcavalry</groupId>
    <artifactId>langchain4j-totorials</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>hello-world</artifactId>

  <dependencies>
    <!-- LangChain4j 核心库 -->
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-core</artifactId>
    </dependency>
    
    <!-- 通义千问模型支持 - 在langchain4j 1.x版本中使用 -->
    <dependency>
      <groupId>dev.langchain4j</groupId>
      <artifactId>langchain4j-open-ai</artifactId>
    </dependency>
    
    <!-- langchain4j 1.x版本中的服务功能已包含在core模块中 -->
    
    <!-- SLF4J 日志门面 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    
    <!-- Logback 日志实现 -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </dependency>
  </dependencies>
</project>
  • 上述内容说明了调用通义千问大模型服务时用到的库,有两点需要注意:
  1. langchain4j-core:这是核心库,里面封装了langchain4j统一的API和数据结构
  2. langchain4j-open-ai:您可能会有疑问,明明是调用通义千问的服务,为什么用OpenAI的库?实际上通义千问提供了OpenAI兼容的接口,所以这里直接使用open-ai的库也能正常调用服务,这样的好处是如果您打算使用OpenAI服务,那么仅需改动一些配置即可
  • 再修改父工程的pom.xml,把子工程加进去,如下图

image.png

编码:日志配置文件

  • 为了方便管理日志使用了logback库,这里把对于的配置文件加上
  • 新建日志配置文件langchain4j-totorials/hello-world/src/main/resources/logback.xml
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>

    <!-- 为com.bolingcavalry包设置日志级别 -->
    <logger name="com.bolingcavalry" level="info" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
</configuration>

编码:功能开发

  • 完整代码如下,后面会有重点说明
package com.bolingcavalry;

import dev.langchain4j.model.openai.OpenAiChatModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 这个示例演示了如何使用LangChain4j创建一个简单的对话模型(使用通义千问)
 */
public class LangChain4jHelloWorld {
    
    private static final Logger logger = LoggerFactory.getLogger(LangChain4jHelloWorld.class);
    
    public static void main(String[] args) {
        logger.info("LangChain4j Hello World示例(使用通义千问)");
        logger.info("--------------------------------");
        
        try {
            // 注意:在实际使用中,您需要提供有效的通义千问API密钥
            // 这里我们使用一个简单的示例,可能需要替换为实际可用的模型
            String apiKey = System.getenv("DASHSCOPE_API_KEY");
            
            if (apiKey == null || apiKey.isEmpty()) {
                logger.warn("警告:未设置DASHSCOPE_API_KEY环境变量,立即结束");
            } else {
                realChat(apiKey);
            }
        } catch (Exception e) {
            logger.error("执行过程中出现错误", e);
        }
    }

    /**
     * 使用通义千问API进行真实聊天
     */
    private static void realChat(String apiKey) {
        // 在langchain4j 1.x版本中,直接使用OpenAiChatModel类
        OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey(apiKey)
                .modelName("qwen3-max")
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
        
        logger.info("\n=== 真实AI聊天演示 ===");
        
        // 直接发送字符串消息
        String prompt = "你好,世界!请简要介绍一下你自己,包括详细的版本情况,再带上最新的年月日时分秒。";
        
        // 尝试直接使用字符串作为参数
        String response = model.chat(prompt);
        logger.info("AI响应: {}", response);
    }
}
  • 接下来对代码做简单说明
  1. 最重要的当然是realChat方法,这里面通过OpenAiChatModel.builder方法创建了model实例,然后调用chat方法就完成了和大模型的对话,方法返回值就是大模型返回的内容
  2. apiKey如何传输更安全?相比hard code、配置文件,从系统环境变量中获取相对来说更为安全,所以这里通过System.getenv方法从环境变量中拿到apiKey,所以运行代码时要确保环境变量中有正确的apiKey
  • 现在代码已写完,没错其实就两行,创建实例和执行对话,咱们运行起来试试吧

运行

  • 进入hello-world目录,执行以下命令即可运行,注意要用你自己的apiKey
DASHSCOPE_API_KEY=你的apiKey mvn exec:java -Dexec.mainClass=com.bolingcavalry.LangChain4jHelloWorld 
  • 控制台输出如下,可见调用大模型服务已经成功
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------< com.bolingcavalry:hello-world >--------------------
[INFO] Building hello-world 1.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- exec:3.6.2:java (default-cli) @ hello-world ---
15:31:39.256 [com.bolingcavalry.LangChain4jHelloWorld.main()] INFO  c.b.LangChain4jHelloWorld - LangChain4j Hello World示例(使用通义千问)
15:31:39.256 [com.bolingcavalry.LangChain4jHelloWorld.main()] INFO  c.b.LangChain4jHelloWorld - --------------------------------
15:31:39.358 [com.bolingcavalry.LangChain4jHelloWorld.main()] INFO  c.b.LangChain4jHelloWorld - 
=== 真实AI聊天演示 ===
15:31:48.929 [com.bolingcavalry.LangChain4jHelloWorld.main()] INFO  c.b.LangChain4jHelloWorld - AI响应: 你好,世界!👋

我是通义千问(Qwen),由阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我能够回答问题、创作文字(如写故事、写公文、写邮件、写剧本、逻辑推理、编程等),还能表达观点、玩游戏等。我支持多种语言,包括但不限于中文、英文、德语、法语、西班牙语等。

截至目前,我的最新版本是 **Qwen3**,这是通义千问系列中的第三代大模型,于2024年10月正式发布。相比前代(如 Qwen2、Qwen1.5、Qwen-Max、Qwen-Plus 等),Qwen3 在语言理解、多语言支持、代码生成、数学推理和对话连贯性等方面均有显著提升,并进一步优化了推理效率与响应速度。

当前系统时间(UTC+8 北京时间)为:  
**2024年12月19日 15时32分47秒**

请注意:具体功能和版本细节可能随阿里云平台更新而有所调整,建议访问 [通义实验室官网](https://tongyi.aliyun.com/) 或 [Qwen 官方文档](https://help.aliyun.com/zh/qwen) 获取最新信息。

很高兴为你提供帮助!😊
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.092 s
[INFO] Finished at: 2025-11-23T15:31:48+08:00
[INFO] -----------------------------------------------------------------------
  • 至此,咱们学习LangChain4j的第一次实战就完成了,太简单,感觉是学到了东西,但又不多...
  • 没关系,这只是刚开始而已,后面还有更多丰富的内容等着咱们,准备好一起拥抱AI吧,Java老友们

源码下载(觉得作者啰嗦的,直接在这里下载)

  • 如果您只想快速浏览完整源码,可以在GitHub下载代码直接运行,地址和链接信息如下表所示(github.com/zq2599/blog…
名称链接备注
项目主页github.com/zq2599/blog…该项目在GitHub上的主页
git仓库地址(https)github.com/zq2599/blog…该项目源码的仓库地址,https协议
git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该项目源码的仓库地址,ssh协议
  • 这个git项目中有多个文件夹,本篇的源码在langchain4j-tutorials文件夹下,如下图红色箭头所示:

image.png

欢迎关注掘金:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...