在springboot 中使用 AIService的方法

 更新时间:2025年04月23日 10:42:30   作者:旅行的狮子  
这篇文章主要介绍了在springboot 中使用 AIService的方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

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

1.实现原理

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

本篇以service.spring包下的内容为主

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 配置文件

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注解标注

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

3. 使用AiService

@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的依赖。

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
    <version>${langchain4j.version}</version>
</dependency>

5.2 配置文件

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

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的。

@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中注入这两个接口,分别调用。

@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

到此这篇关于在springboot 中使用 AIService的文章就介绍到这了,更多相关springboot 使用 AIService内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC使用注解配置方式

    SpringMVC使用注解配置方式

    这篇文章主要为大家介绍了SpringMVC使用注解配置方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • springcloud安装rabbitmq并配置延迟队列插件的过程详解

    springcloud安装rabbitmq并配置延迟队列插件的过程详解

    本期主要讲解如何利用docker快速安装rabbitmq并且配置延迟队列插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Java关于重排链表详细解析

    Java关于重排链表详细解析

    在我们平时的代码过程中,链表是我们经常遇到的一个数据结构,面试题中链表占很大一部分,可见链表操作是非常重要的。本篇文章我们来探究一下如何进行重排链表
    2022-01-01
  • Java中自己如何实现log2(N)

    Java中自己如何实现log2(N)

    这篇文章主要介绍了Java中自己实现log2(N)的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java Web应用小案例之实现用户登录功能全过程

    Java Web应用小案例之实现用户登录功能全过程

    在Java开发过程中实现用户的注册功能是最基本的,这篇文章主要给大家介绍了关于Java Web应用小案例之实现用户登录功能的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • java正则表达式判断强密码和随机生成强密码代码示例

    java正则表达式判断强密码和随机生成强密码代码示例

    这篇文章主要给大家介绍了关于java正则表达式判断强密码和随机生成强密码的相关资料,最近需要一个密码强度正则表达式在用户注册时校验用户密码强度,需要的朋友可以参考下
    2023-08-08
  • tomcat目录结构简介_动力节点Java学院整理

    tomcat目录结构简介_动力节点Java学院整理

    这篇文章主要介绍了tomcat目录结构简介_动力节点Java学院整理的相关资料,需要的朋友可以参考下
    2017-07-07
  • java 字段值为null,不返回该字段的问题

    java 字段值为null,不返回该字段的问题

    这篇文章主要介绍了java 字段值为null,不返回该字段的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringBoot实现热部署Community的示例代码

    SpringBoot实现热部署Community的示例代码

    本文主要介绍了SpringBoot实现热部署Community的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 基于IDEA创建SpringMVC项目流程图解

    基于IDEA创建SpringMVC项目流程图解

    这篇文章主要介绍了基于IDEA创建SpringMVC项目流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论