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);
}
相关推荐
皮皮林5517 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河8 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程10 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅12 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者13 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺13 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart14 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP15 小时前
MyBatis-mybatis入门与增删改查
java
孟陬19 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端