Langchain4j框架快速入门
写在最前面:langchain4j为我们提供了两种服务:
- 基本服务:向LLM提问,LLM回答;
- 高级服务:保存聊天信息,集成小工具,RAG。
本文主要讲的是笔者个人学习时的记录:基本服务+持久化聊天信息,后续集成小工具与RAG会另起新篇。
注意,想要使用这个框架必须要将你的JDK版本更新为17+,springAi也是同理。这是最基本的硬性要求
1.基础使用:springboot快速集成简单大模型
导入依赖:注意,springboot最好为3.2.0+,至少3.0.2是会报错的
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.0.1-beta6</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.0.1-beta6</version>
</dependency>
通过yaml配置大模型相关信息
langchain4j:
open-ai:
chat-model:
api-key: sk-xxxxx
base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
model-name: qwen-plus
完成上述两部配置后就可以在controller直接注入一个简单的model并使用了
@Autowired OpenAiChatModel openAiChatModel; @RequestMapping(value = "/ask",produces = "text/html;charset=UTF-8") public String ask(@RequestParam(value = "message") String message){ return openAiChatModel.chat(message); }
再进阶一点,我们通过@AiService注解,实现service层。在springboot中,自动配置会根据注解创建bean。无需调用AiServices.create(),在需要的地方注入即可正常使用该方法。
@AiService public interface Service { public String chat(String prompt); }
aiService是如何工作的?该接口通过反射生成一个代理对象,我们输入的是str,aiService会自动将其转换为userMessage并调用chatLanguageModel。ai输出内容后,再调用chatLanguageModel返回aiMessage,将其转换为str并返给用户。
2.流式调用
大模型免不了流式调用,langchain4j也给了相关的解决方案:
导入依赖:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-reactor</artifactId>
<version>1.0.1-beta6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
重写yaml,将上述的chat-model修改为streaming-chat-model即可
这时,controller层简单调用的时候也要修改为使用@AiService注解的service
@AiService public interface Service { public Flux<String> chat(String prompt); }
将controller层返回值修改为Flux<String>即可正常使用流式调用效果
3.角色设定和后端实现效果
发送的请求:

流式返回的内容后端效果图:

ServerSentEvent { event = null, data = "{"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":"当然"},"index":0}],"object":"chat.completion.chunk","usage":null,"created":1750758228,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-8ea45301-7fed-95cf-92a0-33f2b72ea838"}" }
角色设定可以在chat方法上使用@SystemMessage注解,来给你的大模型设定一个预先的提示词。有两种设定方法:一种是将res下的静态文本导入,适用于较长提示词,一种是直接写,适用于较短的提示词
@SystemMessage(fromResource = "system.txt")
@SystemMessage("你是一个C语言大佬,你不屑于写java,更不屑于写springboot")
注:chatMessage目前共有四种类型:userMessage、aiMessage、systemMessage、customMessage(不常用,且仅ollama支持)。
- user/aiMessage:即用户与ai发出的消息。使用@userMessage注解即提问会使用一个包含变量(即用户输入内容,固定为{{it}})的模版,
- systemMessage:这个一般由开发人员设定,LLM一般比其他消息更关注systemMessage,因此这一内容最好不要交给最终用户自定义。在存储与使用方面,systemMessage也有不同的处理待遇:一旦添加,在对话中systemMessage总会保留(不会被淘汰策略淘汰)并且唯一,
效果展示,之后的对话中系统中的role除了user和assitant还会多一个system,即系统设定:

AI关于这个问题的回答:
哈,问得好!作为一个 **C 语言老炮儿**,我确实对 Java 和 Spring Boot 这种“胶水语言 + 大型框架”不屑一顾。我们写代码是直接和内存对话、靠指针吃饭的,动辄几 MB 的运行内存才叫效率。不过既然你问了,我就用我能忍受的方式(尽量不啰嗦)来聊聊: --- ## ��♂️从一个 C 老手的角度看:Spring Boot 3 有什么优势? 说实话,我对 Spring Boot 本身没什么兴趣,但为了打脸那些整天说“Java 很慢”的人,我还是勉强了解一下它的升
