二、在springboot 中使用 AIService

在上一篇文章中,我们介绍了如何使用langchain4j实现简单的问答功能,本篇文章我们将介绍如何在springboot中使用AIService。

1.实现原理

先看下@AiService注解所在的依赖langchain4j-spring-boot-starter中包含什么内容:

1.1 event.AiServiceRegisteredEvent

这个类实现了ApplicationEvent,它的作用是当一个AiService被注册时触发的事件。

1.2 @AiService

本篇主要需使用的注解,作用是将一个接口标记为AiService,通过这个注解可以将一个接口转换为一个AiService对象,这个对象可以用于调用langchain4j提供的各种功能。

1.3 AiServiceFactory

AiServiceFactory类实现了FactoryBean接口,表示这是一个Spring工厂Bean,包含了AiService的各种依赖组件和配置,可以通过这个方法创建AiService对象。

1.4 ClassPathAiServiceScanner

这个类的主要功能是扫描类路径中的Bean定义,并筛选出带有AiService注解的接口

1.5 AiServiceScannerProcessor

这个类实现了BeanDefinitionRegistryPostProcessor接口,主要功能是负责定义扫描当前项目的类路径,移除不需要的AiService配置。

1.6 AiServicesAutoConfig

这个类主要功能是将上下文中的所有组件用于配置和注册AiService的Bean,并在完成后发布相关注册的事件。

2.AiService的简单实现

2.1 配置文件

yml 复制代码
langchain4j:
  open-ai:
    chat-model:
        api-key: ${API_KEY}
        base-url: https://api.deepseek.com/v1
        model-name: deepseek-chat
        log-requests: true
        log-responses: true
        temperature: 0.5
        max-tokens: 4096

2.2 定义接口

写一个简单的接口,使用@AiService注解标注

java 复制代码
@AiService
public interface Assistant {

    @SystemMessage("你是一位编程专家,你的名字叫小小明")
    String chat(String userMessage);

}

3. 使用AiService

java 复制代码
@RestController
public class ChatController {

    @Resource
    ChatLanguageModel chatLanguageModel;

    @Resource
    Assistant assistant;

    @GetMapping("/chat")
    public String model(@RequestParam(value = "message") String message) {
        return chatLanguageModel.chat(message);
    }

    @GetMapping("/chatWithService")
    public String service(@RequestParam(value = "message") String message) {
        return assistant.chat(message);
    }
}

4. 测试一下

启动项目,用postman调用接口进行测试:

5. 在项目中使用多个模型

5.1 pom.xml

langchain4j支持使用多个模型,我们更新一下pom.xml文件,添加dashscope的依赖。

xml 复制代码
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

5.2 配置文件

这里我们配置了两个模型,一个是deepseek-chat,一个是qwen-plus。

yaml 复制代码
langchain4j:
  open-ai:
    chat-model:
      api-key: ${API_KEY}
      base-url: https://api.deepseek.com/v1
      model-name: deepseek-chat
      log-requests: true
      log-responses: true
      temperature: 0.5
      max-tokens: 4096

  community:
    dashscope:
      chat-model:
        api-key: ${API_KEY}
        model-name: qwen-plus
        temperature: 0.5
        max-tokens: 4096


logging.level.dev.langchain4j: DEBUG

5.3 定义接口

然后我们定义两个接口,一个是dashscope的,一个是openai的。

java 复制代码
@AiService(wiringMode = EXPLICIT, chatModel = "qwenChatModel")
public interface DashscopeAssistant {

    @SystemMessage("你是一位编程专家,名字是kitty")
    String chat(String userMessage);

}

@AiService(wiringMode = EXPLICIT, chatModel = "openAiChatModel")
public interface DeepseekAssistant {

    @SystemMessage("你是一位画家,名字是tom")
    String chat(String userMessage);

}

5.4 使用

最后我们在controller中注入这两个接口,分别调用。

java 复制代码
@RestController
public class ChatController {

    @Resource
    DashscopeAssistant dashscopeAssistant;

    @Resource
    DeepseekAssistant deepseekAssistant;


    @GetMapping("/chatWithQwen")
    public String qwen(@RequestParam(value = "message") String message) {
        return dashscopeAssistant.chat(message);
    }

    @GetMapping("/chatWithDeepseek")
    public String deepseek(@RequestParam(value = "message") String message) {
        return deepseekAssistant.chat(message);
    }
   
}

6.测试多个AIService


相关推荐
WeiXin_DZbishe1 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
vx_bisheyuange2 小时前
基于SpringBoot的体育商品推荐系统
spring boot·毕业设计
别动我齐刘海2 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
Wx-bishekaifayuan3 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan3 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
code2cat4 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe4 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码4 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
WeiXin_DZbishe4 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计