
勾选上Spring Web点击创建即可。
修改pom.xml文件
javascript
<properties>
<java.version>17</java.version>
<langchain4j.version>1.14.1-beta24</langchain4j.version>
</properties>
<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>
<dependencies>
<!--百炼-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
</dependency>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
创建controller包以及ChatController类
java
package org.example.langchain4j_springboot.controller;
import dev.langchain4j.model.chat.ChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/ai")
public class ChatControler {
@Autowired
ChatModel qwenChatModel;
@RequestMapping("/chat")
public String test(@RequestParam(defaultValue="你是谁") String message) {
String chat = qwenChatModel.chat(message);
return chat;
}
}
为什么直接这么写就能调用了呢?

springboot自动装配 。
-
Bean 的类型是
QwenChatModel(它实现了ChatModel接口) -
只有在
application.yml中配置了langchain4j.community.dashscope.chat-model.api-key时,才会创建这个 Bean -
QwenChatModel是ChatModel接口的实现类,所以它可以直接注入到@Autowired ChatModel qwenChatModel
然后配置api-key以及模型
java
server.port=8080
langchain4j.community.dashscope.chat-model.api-key=
langchain4j.community.dashscope.chat-model.model-name=qwen-max
这样就可以了。

那么如果想要他流式的输出返回呢?
那么我们就需要注入
java
@Autowired
QwenStreamingChatModel streamingChatModel;
然后流式代码改写成
java
@RequestMapping("/stream")
public String test2(@RequestParam(defaultValue="你是谁") String message) {
streamingChatModel.chat(message, new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String partialResponse) {
System.out.println(partialResponse);
}
@Override
public void onCompleteResponse(ChatResponse chatResponse) {
System.out.println("结束");
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
});
return "";
然后配置配置项
java
langchain4j.community.dashscope.streaming-chat-model.api-key=
langchain4j.community.dashscope.streaming-chat-model.model-name=qwen-plus
看输出就变成流式的了

那么在前端我们如何看到流式响应呢?
因为langchain4j不是spring家族, 所以我们在wen应用中需要引入webflux
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
java
@RequestMapping(value = "/stream_chat",produces ="text/stream;charset=UTF-8")
public Flux<String> test(@RequestParam(defaultValue="你是谁") String message) {
return Flux.create(sink -> {
qwenStreamingChatModel.chat(message, new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String partialResponse) {
sink.next(partialResponse); // 逐次返回部分响应
}
@Override
public void onCompleteResponse(ChatResponse completeResponse) {
sink.complete(); // 完成整个响应流
}
@Override
public void onError(Throwable error) {
sink.error(error); // 异常处理
}
});
});
}
就可以了。