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

LangChain4j 新版本的核心升级点 —— @AiService 声明式接口

@AiService 是 LangChain4j 的“声明式接口定义”,它让你只需要声明“我这个接口想用哪个模型”,框架就会自动创建并注入代理对象,像 FeignClient 一样方便。

一、示例

这段代码:

@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,chatModel = "openAiChatModel"
)
public interface ConsultantService {String chat(String message);
}

LangChain4j 提供的一种声明式(Declarative)写法

二、实现流程

当你使用 @AiService 标注接口时,LangChain4j + Spring Boot 会自动帮你完成:

  1. 扫描注解

    • 框架扫描到 @AiService 标注的接口;

  2. 自动创建代理对象

    • 根据 chatModel 指定的模型 Bean(如 openAiChatModel);

    • 生成一个实现了该接口的动态代理;

  3. 注册为 Spring Bean

    • Spring 自动把这个代理对象注册到 IOC 容器;

  4. 自动注入使用

    • 你就能在 Controller 里直接 @Autowired 使用它。

三、@AiService 参数详解

完整注解定义如下(来自 dev.langchain4j.service.spring.AiService):

参数作用示例
chatModel指定要使用的模型 Bean 名称(通常是你在 @Configuration 里定义的 @Bean"openAiChatModel"
wiringMode绑定方式,控制模型如何自动注入AiServiceWiringMode.EXPLICIT(或 AUTOMATIC
retriever可选,指定检索器 Bean(用于 RAG 场景)"vectorStoreRetriever"
memory可选,指定记忆模块 Bean(对话上下文)"memoryStore"
name给该服务指定一个自定义 Bean 名称"consultantService"
scope控制 Bean 的作用域"singleton"(默认)或 "prototype"
description可选,提供接口的文字描述"用于咨询聊天的AI服务"

四、wiringMode 两种模式区别

模式含义特点
AUTOMATIC(默认)框架自动查找符合类型的 ChatModel Bean 并绑定省事,但如果有多个模型 Bean 可能会冲突
EXPLICIT明确指定模型名称(chatModel = "openAiChatModel"推荐用法,更安全、更清晰

五、怎么使用?

1️⃣ 定义模型 Bean

@Configuration
public class CommonConfig {@Beanpublic OpenAiChatModel openAiChatModel() {return OpenAiChatModel.builder().apiKey(System.getenv("OPENAI_API_KEY")).modelName("gpt-4o-mini").build();}
}

2️⃣ 定义 AI 接口

@AiService(wiringMode = AiServiceWiringMode.EXPLICIT,chatModel = "openAiChatModel"
)
public interface ConsultantService {String chat(String message);
}

3️⃣ 在 Controller 注入使用

@RestController
@RequestMapping("/chat")
public class ChatController {@Autowiredprivate ConsultantService consultantService;@GetMappingpublic String chat(@RequestParam String msg) {return consultantService.chat(msg);}
}

🌟 没有任何配置类、没有 .builder()、没有手动注入,Spring 会自动生成代理对象并注入。

六、和旧写法(CommonConfig 手动配置)的区别

手动配置介绍:
https://blog.csdn.net/laosao_66/article/details/152560763?spm=1011.2124.3001.6209

对比项@AiService 声明式AiServices.builder() 手动式
写法一行注解即可需要在 @Configuration 手动写 Bean
Bean 创建自动由 Spring 管理手动创建并注册
可读性高(接口上就能看到依赖模型)低(依赖关系隐藏在配置类)
灵活性一般(框架自动生成)高(可自定义代理逻辑)
推荐场景快速集成、简单聊天服务高度自定义、多模型组合、复杂逻辑
本质实现Spring 扫描注解 → 动态代理手动调用 AiServices.builder() 创建代理

总结对比

角度旧方式(手动配置)新方式(@AiService 声明式)
代码量
易读性配置分散结构集中
灵活性一般
自动化程度
使用体验像手动拼装 Bean像声明 FeignClient 一样方便
http://www.dtcms.com/a/447375.html

相关文章:

  • NX511NX512美光固态闪存NX516NX517
  • 重庆五号线金建站wordpress ip无法设置
  • 基于 seajs 的高性能网站开发和优化实践_王保平(淘宝)建个微商城网站
  • 继续打卡hot100
  • 做封面下载网站个人 做自媒体 建网站
  • 旧电脑做网站服务器免费拓客软件
  • wordpress当前版本中山seo网络推广
  • 建设营销型网站不足之处在门户网站上做推广
  • 公司网站一年多少钱网站设计项目建设内容
  • 301的网站用什么来做域名交易域名出售
  • 以实训为载体:养老实训室助力养老服务标准化建设的四大路径
  • 广州哪里有网站建设网站建设的市场分析
  • 【Flutter】APP的数据安全(基于Flutter 交易所APP的总结)
  • 什么语言做网站最好wordpress wp
  • 上海网站设计与制作深圳网络营销推广公司
  • 陕西专业网站开发多少钱微信公众号怎么开通免费
  • 张家港做网站的公司展厅设计培训
  • 网站标题怎么做响应式中文网站模板
  • 巴中建设厅网站电话美篇app怎么制作
  • 衡水网站设计公司哪家专业html简单广告代码
  • 网站开发女生工资手机wap网页
  • 广州建设集团网站黑龙江企业网站设计团队
  • 帝国cms网站地图xmlphotoshopcc
  • 网站建设策划怎么谈深圳广告公司画册设计
  • 做ppt的兼职网站有哪些海外分销平台
  • 微商城网站开发视频小程序注册方法
  • 上海市网站建设公司优秀的h5案例
  • 网站开发实例及研究网站同步到新浪微博
  • 网站建设价格山东济南兴田德润什么活动新增病例最新消息
  • 建设网站都需要哪些资料喀什网站建设百度推广