1、什么是AIService?
AIService
使用面向接口和动态代理的方式完成程序的编写,更灵活的实现高级功能。
1.1、链Chain
链的概念源自 Python 中的 LangChain。其理念是针对每个常见的用例都设置一条链,比如聊天机器人、检索增强生成(RAG)等。链将多个底层组件组合起来,并协调它们之间的交互。链存在的主要问题是不灵活,我们不进行深入的研究。
1.2、人工智能服务 AIService
在LangChain4j
中我们使用AIService完成复杂操作。底层组件将由AIService进行组装。
AIService可处理最常见的操作:
为大语言模型格式化输入内容
解析大语言模型的输出结果
它们还支持更高级的功能:
聊天记忆 Chat memory
工具 Tools
检索增强生成 RAG
2、创建Service
引入依赖
<!--langchain4j高级功能--><dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-spring-boot-starter</artifactId></dependency>
创建接口
package com.atguigu.java.ai.langchain4j.assistant;public interface Assistant { String chat(String userMessage);}
测试用例
@SpringBootTestpublic class AIServiceTest { @Autowired private QwenChatModel qwenChatModel; @Test public void testChat() { //创建AIService Assistant assistant = AiServices.create(Assistant.class, qwenChatModel); //调用service的接口 String answer = assistant.chat("Hello"); System.out.println(answer); }}
@Service
也可以在 Assistant 接口上添加 @AiService
注解
package com.atguigu.java.ai.langchain4j.assistant;//因为我们在配置文件中同时配置了多个大语言模型,所以需要在这里明确指定(EXPLICIT)模型的beanName(qwenChatModel)@AiService(wiringMode = EXPLICIT, chatModel = "qwenChatModel")public interface Assistant { String chat(String userMessage);}
工作原理
AiServices会组装Assistant接口以及其他组件,并使用反射机制创建一个实现Assistant接口的代理对象。这个代理对象会处理输入和输出的所有转换工作。在这个例子中,chat方法的输入是一个字符串,但是大模型需要一个 UserMessage 对象。所以,代理对象将这个字符串转换为 UserMessage ,并调用聊天语言模型。chat方法的输出类型也是字符串,但是大模型返回的是 AiMessage 对象,代理对象会将其转换为字符串。
简单理解就是:代理对象的作用是输入转换和输出转换