掘金 人工智能 04月27日 12:28
LangChain4j—人工智能服务 AIService(三)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何使用LangChain4j构建AI服务,重点在于AIService的实现方式和优势。通过面向接口和动态代理,AIService提供了一种灵活的方式来实现高级功能,简化了与大语言模型的交互。文章详细阐述了AIService的核心功能,包括输入格式化、输出解析、聊天记忆、工具和检索增强生成等,并提供了创建和测试AIService的示例代码,帮助读者快速上手。

💡AIService的核心理念是利用面向接口和动态代理,提供灵活的方式实现高级功能,简化与大语言模型的交互。它类似于LangChain中的链,但更注重灵活性,通过组合底层组件来完成复杂操作。

🛠️AIService主要处理输入和输出的转换工作,例如将字符串转换为UserMessage,并将AiMessage转换为字符串。这种机制使得开发者可以专注于业务逻辑,而无需关心底层的大模型交互细节。

⚙️创建AIService需要引入langchain4j-spring-boot-starter依赖,并定义一个接口,例如Assistant。通过AiServices.create()方法创建AIService的实例,该实例会使用反射机制创建一个代理对象,处理输入输出的转换。

💬AIService支持多种高级功能,包括聊天记忆、工具和检索增强生成(RAG)。这些功能可以帮助开发者构建更智能、更复杂的AI应用,例如聊天机器人和知识问答系统。

1、什么是AIService?

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

1.1、链Chain

链的概念源自 Python 中的 LangChain。其理念是针对每个常见的用例都设置一条链,比如聊天机器人、检索增强生成(RAG)等。链将多个底层组件组合起来,并协调它们之间的交互。链存在的主要问题是不灵活,我们不进行深入的研究。

1.2、人工智能服务 AIService

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

AIService可处理最常见的操作:

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

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 对象,代理对象会将其转换为字符串。

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain4j AIService AI服务 大语言模型 动态代理
相关文章