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

LangChain4j +DeepSeek大模型应用开发——3 人工智能服务 AIService

1. 什么是AIService

AIService使用面向接口和动态代理的方式完成程序的编写,更灵活的实现高级功能。

在LangChain4j中我们使用AIService完成复杂操作。底层组件将由AIService进行组装。

  • 为大语言模型格式化输入内容

  • 解析大语言模型的输出结果

它们还支持更高级的功能:

  • 聊天记忆 Chat memory

  • 工具 Tools

  • 检索增强生成 RAG

2.创建AIService

引入依赖
<!--langchain4j高级功能 AI Service-->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
创建接口
package com.zr.javaailangchain4j.assistant;public interface Assistant {String chat(String userMessage);
}
测试用例
@SpringBootTest
public class AIServiceTest {@Autowiredprivate QwenChatModel qwenChatModel;@Testpublic void testChat() {//创建AIServiceAssistant assistant = AiServices.create(Assistant.class, qwenChatModel);//调用service的接口String answer = assistant.chat("Hello");System.out.println(answer);}
}
@AiService

也可以在Assistant接口上添加@AiService注解

package com.zr.javaailangchain4j.assistant;//因为我们在配置文件中同时配置了多个大语言模型,所以需要在这里明确指定(EXPLICIT)模型的beanName(qwenChatModel)
@AiService(wiringMode = EXPLICIT, chatModel = "qwenChatModel")
public interface Assistant {String chat(String userMessage);
}

测试用例中,我们可以直接注入Assistant对象

@Autowired
private Assistant assistant;@Test
public void testAssistant() {String answer = assistant.chat("Hello");System.out.println(answer);
}

工作原理

AiServices会组装Assistant接口以及其他组件,并使用反射机制创建一个实现Assistant接口的代理对象。这个代理对象会处理输入和输出的所有转换工作。在这个例子中,chat方法的输入是一个字符串,但是大模型需要一个UserMessage对象。所以,代理对象将这个字符串转换为UserMessage,并调用聊天语言模型。chat方法的输出类型也是字符串,但是大模型返回的是 AiMessage 对象,代理对象会将其转换为字符串。

简单理解就是:代理对象的作用是输入转换和输出转换

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

相关文章:

  • 网工备考考纲变化总结
  • 【大模型ChatGPT+R-Meta】AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表“
  • AE插件中文汉化 RGB色彩通道分离故障复古视觉特效 RGB Split v1.0.0
  • watch 监视器
  • 剑指offer经典题目(七)
  • C语言高频面试题——局部变量和全局变量可以重名吗?
  • vs 安装完番茄助手visual assist 后 菜单栏不显示
  • mysql约束
  • Django 缓存框架
  • 同步电路与异步电路
  • 如何在 IntelliJ IDEA 中编写 Speak 程序
  • Spark知识总结
  • 前缀树(Trie)(字典树)
  • C++网络通信大小端原理详解
  • 《系统分析师-第三阶段—总结(六)》
  • 集成电路流片随笔19:full_handshake
  • Web技术与HTTP协议
  • 【linux】一文掌握 Tmux 的各种指令(Tmux备忘清单)
  • mtrace和memleak源码分析
  • 游戏盾与高防CDN的协同防御策略分析
  • element-ui carousel 组件源码分享
  • 深入剖析二叉树家族:二叉树、平衡二叉树、满二叉树与搜索二叉树
  • 系统架构-软件可靠性
  • 【前端】1h 搞定 TypeScript 教程_只说重点
  • RK3576遇到的坑
  • 基于RSSI原理的Wi-Fi定位程序,N个锚点(数量可自适应)、三维空间,轨迹使用CKF进行滤波,附完整的代码,可复制粘贴
  • 将有序数组转换为高度平衡二叉搜索树 | 详解与Java实现
  • 第11章 安全网络架构和组件(二)
  • 《Astro 3.0岛屿架构让内容网站“脱胎换骨”》
  • 基于 Spring Boot 瑞吉外卖系统开发(八)