SpringBoot集成大模型应用开发企业级项目--【篇四:SpringBoot集成人工智能体AIService】

215 阅读2分钟

四、人工智能服务AIService

1、什么是AIService

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

1.1、链Chain(旧版)

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

1.2、人工智能服务AIService

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

  • AIService可处理最常见的操作:

    • 为大语言模型格式化输入内容
    • 解析大语言模型的输出结果
  • 它们还支持更高级的功能:

    • 聊天记忆 Chat Memory
    • 工具 Tools
    • 检索增强生成 RAG

2、代码实操过程

2.1、引入依赖

<!--langchain4j高级功能-->
<dependency>
  <groupId>dev.langchain4j</groupId>
  <artifactId>langchain4j-spring-boot-starter</artifactId>
</dependency>

2.2、创建接口

/**
 * @description 这是一个AIService接口
 * @AiService 注解表示这是一个AIService接口。交给spring进行管理
 */
@AiService(
        wiringMode = EXPLICIT,
        chatModel = "qwenChatModel"
)
public interface Assistant {
​
    String chat(String userMessage);
}

2.3、测试用例

@SpringBootTest
public class AIServiceTest {
​
    @Autowired
    private QwenChatModel qwenChatModel;
    /**
     * 使用千问测试AIService
     */
    @Test
    void testChat() {
        // 通过AIService创建一个assistant对象
        Assistant assistant = AiServices.create(Assistant.class, qwenChatModel);
​
        String answer = assistant.chat("你是谁");
        System.out.println(answer);
    }
​
​
​
    /**
     * 通过注入的方式获取AIService接口
     */
    @Autowired
    private Assistant assistant;
    @Test
    void testAssistant() {
        String answer = assistant.chat("我是谁");
        System.out.println(answer);
    }
}

2.4、工作原理

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