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);
}
相关推荐
逆风飞翔的小叔4 分钟前
【AI大模型】Langchain 多类型对话消息使用实战操作详解
langchain·langchain 消息类型·langchain 消息使用·langchain 消息详解·langchain 消息·langchain 消息总结
Cc.Y36 分钟前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
\光辉岁月/38 分钟前
2.java变量
java·开发语言·变量
Wang's Blog41 分钟前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
专业程序开发源42 分钟前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
代码山河1 小时前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
vx_Biye_Design1 小时前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
李游Leo1 小时前
HarmonyOS 7 QuickDock 闪控窗开发实录 02:floatView × floatingBall:形态切换、位置恢复与单一状态源【鸿蒙心迹】
java·华为·harmonyos
企业数字化笔记1 小时前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
仍然.1 小时前
Redis---主从复制
java·数据库·redis