1.引入AiService依赖
<!-- Ai Service相关的依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.0.1-beta6</version>
</dependency>
java
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.0</version>
<relativePath/>
</parent>
<groupId>org.example</groupId>
<artifactId>langchain4j-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>langchain4j-demo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>17</java.version>
</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>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama-spring-boot-starter</artifactId>
<version>1.0.1-beta6</version>
</dependency>
<!-- Ai Service相关的依赖 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.0.1-beta6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

java
/**
* @descrition 声明接口
* @date 2025/11/26
*/
public interface ConsultantService {
//用于聊天的方法
public String chat(String message);
}
java
@Configuration
public class CommonConfig {
@Autowired
private OllamaChatModel model;
@Bean
public ConsultantService consultantService() {
//使用AiServices为接口创建代理对象
return AiServices.builder(ConsultantService.class)
.chatModel(model)
.build();
}
}
java
@Autowired
private ConsultantService consultantService;
@GetMapping("/chat")
public String chat(String message) {
String chat = consultantService.chat(message);
return chat;
}
http://localhost:8080/model/chat?message=%E6%9F%B3%E5%B2%A9%E6%BC%82%E4%BA%AE%E5%90%97
java
2025-11-26T23:12:36.829+08:00 INFO 9284 --- [nio-8080-exec-1] d.l.http.client.log.LoggingHttpClient : HTTP request:
- method: POST
- url: http://localhost:11434/api/chat
- headers: [Content-Type: application/json]
- body: {
"model" : "qwen3:0.6b",
"messages" : [ {
"role" : "user",
"content" : "柳岩漂亮吗"
} ],
"options" : {
"stop" : [ ]
},
"stream" : false,
"tools" : [ ]
}
2025-11-26T23:12:53.105+08:00 INFO 9284 --- [nio-8080-exec-1] d.l.http.client.log.LoggingHttpClient : HTTP response:
- status code: 200
- headers: [Content-Type: application/json; charset=utf-8], [Date: Wed, 26 Nov 2025 15:12:53 GMT], [Transfer-Encoding: chunked]
- body: {"model":"qwen3:0.6b","created_at":"2025-11-26T15:12:53.0460856Z","message":{"role":"assistant","content":"关于"柳岩漂亮吗",需要先明确您指的是柳岩这个人的外貌,还是其他事物。如果您是想了解柳岩的外貌特征,可以告诉我一些具体方面,比如五官、气质、发型等,我可以为您提供更详细的描述。如果涉及其他方面,比如柳树的象征意义,也可以告诉我,我可以解释相关背景。您更想从哪方面入手呢?","thinking":"嗯,用户问"柳岩漂亮吗",首先我需要确定用户想询问的是柳岩这个人的形象还是其他事物。可能用户是想了解柳岩的外貌,或者想表达对柳岩的评价。不过根据中文的表达习惯,"柳岩"可能是一个人名,或者是一个比喻,比如柳树,用来形容某人或某事物。\n\n首先,我需要确认用户的具体需求。如果是关于柳岩的外貌,可能需要提供一些关于她外表的描述,比如五官、肤色、发型等。如果是关于柳树的比喻,可能需要解释柳树的特点,或者用户想表达对柳树的赞美。但根据问题的结构,用户可能是在询问柳岩的外貌,或者想表达对柳岩的看法。\n\n另外,用户的问题可能带有情感色彩,比如是否漂亮,可能需要考虑用户的个人感受或背景。如果用户是想了解柳岩的外貌,可能需要提供一些具体的例子或描述,或者询问用户自己对柳岩的看法。但根据问题本身,可能需要直接回答,但可能需要更多的上下文。\n\n不过,考虑到用户的问题比较直接,可能需要直接回答,同时保持友好和开放的态度,鼓励用户进一步提供信息。例如,可以询问用户是否想了解柳岩的外貌,或者是否有其他方面需要讨论,这样用户可以根据自己的需求进行互动。\n"},"done":true,"done_reason":"stop","total_duration":16116775100,"load_duration":235510400,"prompt_eval_count":14,"prompt_eval_duration":2746462300,"eval_count":372,"eval_duration":12674198900}
声明式方式更简单
java
@AiService(
wiringMode = AiServiceWiringMode.EXPLICIT, //手动装配的方式
chatModel = "ollamaChatModel") //指定模型
public interface ConsultantService {
//用于聊天的方法
public String chat(String message);
}
就不需要CommonConfig配置类。
**注意:**其实这里直接使用@AiService注解即可,无需指定上面的两个参数。因为从源码得知默认的wiringMode 就是手动装配方式,而且也会自动去找ioc容器中已有的模型。
java
@AiService
public interface ConsultantService {
//用于聊天的方法
public String chat(String message);
}