欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):github.com/zq2599/blog…
LangChain4j实战全系列链接
本篇概览
- 本篇是全系列第一次动手编码实战,力求极速入门,核心目标为:写最少的代码,看最直接的结果
- 简单的说就是基于LangChain4j的库,用几行代码完成通义千问大模型的服务调用
- 废话少说,开始编码
编码: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>
- 上述内容说明了调用通义千问大模型服务时用到的库,有两点需要注意:
- langchain4j-core:这是核心库,里面封装了langchain4j统一的API和数据结构
- langchain4j-open-ai:您可能会有疑问,明明是调用通义千问的服务,为什么用OpenAI的库?实际上通义千问提供了OpenAI兼容的接口,所以这里直接使用open-ai的库也能正常调用服务,这样的好处是如果您打算使用OpenAI服务,那么仅需改动一些配置即可
- 再修改父工程的pom.xml,把子工程加进去,如下图
编码:日志配置文件
- 为了方便管理日志使用了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);
}
}
- 接下来对代码做简单说明
- 最重要的当然是realChat方法,这里面通过OpenAiChatModel.builder方法创建了model实例,然后调用chat方法就完成了和大模型的对话,方法返回值就是大模型返回的内容
- 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文件夹下,如下图红色箭头所示: