LangChain4j实战一:入门介绍
如果用 ChatModel 的基础功能对话,会发现可以传两种参数:ChatMessage 集合,或者 ChatRequest。:调用外部工具的结果(比如问模型 “今天天气”,模型调用天气工具后,工具返回的天气数据就存在这里)。ChatMessage和ChatRequest的区别(单条消息 or 多次对话的消息+设置):给模型定规矩的消息(比如告诉模型 “你要扮演客服,回复要简洁”)。:你(用户)发
1. 关于LangChain4j
- 简单说,LangChain 的 Java 版本(langchain4j)把 AI 开发的核心步骤 ——“写提示模板 → 调用大模型 → 解析回答结果 → 调用工具 → 保存聊天记忆”,全都封装成了 Java 接口。你用它就像写 MyBatis Mapper 一样简单,不用自己从头写复杂的 AI 调用逻辑。
- 核心模块说明:
| 模块 | 说明 | 通俗类比(懂 Java/Spring 就秒懂) |
|---|---|---|
| langchain4j-core | 提供通用的 AI 开发接口(比如调用模型、处理消息、解析结果) | 像 JDBC:定好了通用规则,不管连哪个数据库都按这套来 |
| langchain4j-openai / langchain4j-zhipu | 对接 OpenAI、智谱等不同大模型的 “专属驱动” | 像 mysql-driver:连 MySQL 就得用这个专属驱动,连不同模型用不同包 |
| langchain4j-spring-boot-starter | 自动配置 + 配置项(比如在 yml 里配模型密钥) | 像 SpringBoot 的各种 starter:引入即能用,不用手动配一堆东西 |
| langchain4j-easy-rag | 几行代码就能给自家文档建索引、做问答 | 像 Spring Data JPA:不用写复杂 SQL,简单操作就能操作数据 |
| langchain4j-tools | 让大模型直接调用你写的 @Service 方法 | 像 FeignClient:简单配置就能调用其他服务 |
| langchain4j-memory | 保存聊天记录、缓存对话内容 | 像 Spring-Session:专门管会话数据存储 |
2. LangChain4j 能做什么
-
“搭架子” 省时间:比如你想做一个 “能查公司内部文档的问答机器人”,不用从零写流程,LangChain4j 给你现成的 “模块”:
- 一个模块负责把公司文档拆成小块、存起来(叫 “向量存储”,不用懂啥意思,用就行);
- 一个模块负责接收用户的问题,去文档里找相关内容;
- 一个模块负责把 “问题 + 相关文档” 传给大模型;
- 一个模块负责把大模型的回答返回给用户。
你只要像拼积木一样把这些模块连起来,几行代码就能搞定,不用自己写全流程。
-
解决大模型的 “短板”:
- 大模型默认记不住上一轮对话?LangChain4j 有 “记忆模块”,帮你存上下文,让机器人能跟你 “聊下去”;
- 大模型不知道你公司的私密数据?LangChain4j 能把你的数据 “喂” 给大模型,让它只基于你的数据回答,还不会泄露;
- 想让大模型做完回答再执行个操作(比如生成 Excel、调用公司接口)?它有 “工具调用模块”,能让大模型 “指挥” 其他程序干活。
3. 准备工作
3.1. 构建项目,添加pom文件
<?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 https://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.5.0</version>
<relativePath/>
</parent>
<groupId>cn.cjc</groupId>
<artifactId>springboot-ai</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<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>
<!-- https://mvnrepository.com/artifact/dev.langchain4j/langchain4j -->
<!-- LangChain4j 核心库 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>1.9.1</version>
</dependency>
<!-- AiService依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.0.1-beta6</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
<version>1.9.1</version>
</dependency>
<!-- LangChain4j OpenAI支持(可用于通义千问的OpenAI兼容接口) -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.9.1-beta17</version>
</dependency>
<!-- 导入响应式编程依赖包-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-reactor</artifactId>
<version>1.9.1-beta17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
</project>
3.2. 配置文件
spring:
application:
name: springboot-ai
langchain4j:
open-ai:
chat-model:
api-key: sk-04fafb1bbbbd45e39dc8f44a64672c17
model-name: qwen-plus
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
4. 大模型相关API

-
高级API和低级API的区别(手动 or 全自动)
-
高级API: 自定义接口,LangChain4将接口实现成聊天功能实例,该实例具备模型、记忆、数据库
-
低级API:消息、模型、存储,写代码用好它们
-
-
LanguageModel和ChatModel的区别(一次性对话 or 多轮对话)
-
ChatMessage和ChatRequest的区别(单条消息 or 多次对话的消息+设置)
5. 演示代码
5.1.高级API演示代码
@Configuration
public class LangChain4jConfig {
@Value("${langchain4j.open-ai.chat-model.api-key}")
private String apiKey;
@Value("${langchain4j.open-ai.chat-model.model-name}")
private String modelName;
@Value("${langchain4j.open-ai.chat-model.base-url}")
private String baseUrl;
/**
* 创建并配置OpenAiChatModel实例(使用通义千问的OpenAI兼容接口)
* @return OpenAiChatModel实例
*/
@Bean("qwen")
public OpenAiChatModel chatModel() {
return OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName(modelName)
.baseUrl(baseUrl)
.build();
}
// 1. 用@Bean注解,再用AiServices.create来生成实例
@Bean
public ChatAssistant chatAssistant(@Qualifier("qwen") ChatModel model) {
return AiServices.create(ChatAssistant.class, model);
}
}
public interface ChatAssistant {
String chat(String prompt);
}
// 2. 此时ChatAssistant实例已经可以注入使用了
@RestController
public class HighApiController {
@Resource
private ChatAssistant assistant;
@GetMapping("/highapi/chat")
public String chat(@RequestParam String q) {
return assistant.chat(q); // 封装消息、调用模型、取回复等操作都在chat中了,个人无需编码实现
}
}
- 另外涉及到记忆、外挂知识库等能力,也都可以通过声明式来实现(MemoryId、ContentRetriever)
5.2.低级API演示代码
- 调用LangChain4j的各项能力,通过各种方法调用来完成聊天参数设置和聊天操作
@Configuration
public class LangChain4jConfig {
@Value("${langchain4j.open-ai.chat-model.api-key}")
private String apiKey;
@Value("${langchain4j.open-ai.chat-model.model-name}")
private String modelName;
@Value("${langchain4j.open-ai.chat-model.base-url}")
private String baseUrl;
@Bean
public OpenAiChatModel chatModel() {
return OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName(modelName)
.baseUrl(baseUrl)
.build();
}
}
@RestController
public class HighApiController {
@Resource
private ChatModel chatModel;
@GetMapping("/lowapi/chat")
public String chat() {
ChatResponse resp = chatModel.chat(
ChatRequest.builder()
.messages(UserMessage.from("讲个故事"),
AiMessage.from("好的,来一个……"))
.temperature(0.7)
.build());
return resp.aiMessage().text();
}
}
5.3. 低级API的模型对象
先搞懂两个核心模型的区别
- LanguageModel:最基础的 “一问一答” 模式,你输入一句话,模型直接返回一个回答。这个方式已经过时了,官方文档也说它会被 ChatModel 取代,不用再学了。
- ChatModel:现在主流的聊天模式,支持多轮对话。它能接收多个ChatMessages对象作为输入,返回是AiMessage对象,ChatMessages可以是文字、图片、音频这些内容,返回的是模型的最终回复。
ChatMessage和ChatRequest的区别
如果用 ChatModel 的基础功能对话,会发现可以传两种参数:ChatMessage 集合,或者 ChatRequest。其实很好理解:
- 只用ChatMessage:适合简单聊天,比如直接发 “你好” 就行,不用额外设置。
- 用ChatRequest:适合需要精细控制的情况,比如想让模型回答更理性 / 更灵活(调 temperature 参数),或者需要调用外部工具(比如查天气),这些额外要求都能通过 ChatRequest 来设置。(简单说:ChatMessage 是 “纯聊天内容”,ChatRequest 是 “聊天内容 + 额外控制规则”)
ChatMessage的消息类型
-
UserMessage:你(用户)发的内容,不管是文字、图片、音频、PDF。
-
AiMessage:大模型给用户的响应
-
ToolExecutionResultMessage:调用外部工具的结果(比如问模型 “今天天气”,模型调用天气工具后,工具返回的天气数据就存在这里)。
-
SystemMessage:给模型定规矩的消息(比如告诉模型 “你要扮演客服,回复要简洁”)。
-
CustomMessage:自定义消息,目前只有 Ollama 模型支持。
更多推荐

所有评论(0)