当前位置: 首页 > backend >正文

二、在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/v1model-name: deepseek-chatlog-requests: truelog-responses: truetemperature: 0.5max-tokens: 4096

2.2 定义接口

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

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

3. 使用AiService

@RestController
public class ChatController {@ResourceChatLanguageModel chatLanguageModel;@ResourceAssistant 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/v1model-name: deepseek-chatlog-requests: truelog-responses: truetemperature: 0.5max-tokens: 4096community:dashscope:chat-model:api-key: ${API_KEY}model-name: qwen-plustemperature: 0.5max-tokens: 4096logging.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 {@ResourceDashscopeAssistant dashscopeAssistant;@ResourceDeepseekAssistant 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

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/667.html

相关文章:

  • 【JAVA EE初阶】多线程(1)
  • 代码随想录算法训练营第五十三天 | 105.有向图的完全可达性 106.岛屿的周长
  • 如何轻松实现用户充值系统的API自动化测试
  • QML、Qt Quick 、Qt Quick Controls 2
  • 如何成为Prompt工程师:学习路径、核心技能与职业发展
  • STM32时钟树
  • 微信小程序中使用h5页面预览图片、视频、pdf文件
  • PHP伪协议读取文件
  • Matlab 步进电机传递函数模糊pid
  • langchain-nextjs-template 模板安装与配置
  • 【文献阅读】EndoNet A Deep Architecture for Recognition Tasks on Laparoscopic Videos
  • 【MRAG】使用RAG技术增强AI回复的实时性和准确性
  • Android Kotlin AIDL 完整实现与优化指南
  • Leetcode 3524. Find X Value of Array I
  • 9、Hooks:现代魔法咒语集——React 19 核心Hooks
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-Token过期重定向问题
  • 代码随想录算法训练营第三十五天|416. 分割等和子集、698.划分为k个相等的子集、473.火柴拼正方形
  • IDEA连接达梦数据库
  • Android学习之实战登录注册能力
  • Django 使用教程
  • 4月19日记(补)算了和周日一块写了 4月20日日记
  • 无法右键下载文档?网页PDF下载方法大全
  • Python赋能去中心化电子商务平台:重构交易生态的新未来
  • 2000-2017年各省天然气消费量数据
  • uni-app中map的使用
  • 52单片机LED实验
  • leetcode205.同构字符串
  • ​opencv图像库编程
  • 股票分析技术指标【MACD】
  • 基于Redis实现RAG架构的技术解析与实践指南