3.会话功能-AiServices工具类

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);
}
相关推荐
IT爱学堂6 小时前
尚硅谷 - 2025年3月Java+AI大模型应用开发
java·开发语言·人工智能
赵广陆6 小时前
企业实战:主体识别
langchain·pdf·langgraph
小贤plus6 小时前
SpringBoot 三大核心注解精讲:@ControllerAdvice、@RestControllerAdvice、@Validated 分组校验(实战)
java
吠品7 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
晚风醉蝶7 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
lucky_syq7 小时前
第3篇 · S1·上:什么是大语言模型 + Transformer 架构深讲
人工智能·语言模型·架构·transformer
yaoxin5211238 小时前
497. Java 反射 - 使用反射读取注解
java·开发语言·python
eralong8 小时前
Java 面向对象:继承、多态、接口
java·后端
哦虎!8 小时前
【数据库】事务
java·数据库·mysql
CDN3609 小时前
流媒体加速实践:出海东南亚短视频点播频繁缓冲,HLS 分片与 Nginx 配置调优
java·网络·nginx·流媒体加速