詹学伟
詹学伟
Published on 2025-06-03 / 16 Visits
1
0

人工智能服务 AIService

一、什么是AIService

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

二、人工智能服务 AIService

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

AIService可处理最常见的操作:

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

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

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

  1. 聊天记忆 Chat memory

  2. 工具 Tools

  3. 检索增强生成 RAG

三、创建AIService

1.引入依赖

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

2.创建接口

package com.zhan.chat.assistant;

import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;

/**
 * @author zhanxuewei
 */
public interface Assistant {

    String chat(String userMessage);

}

3.测试用例

package com.zhan.chat;

import com.zhan.chat.assistant.Assistant;
import dev.langchain4j.community.model.dashscope.QwenChatModel;
import dev.langchain4j.service.AiServices;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class AssistantTests {

    @Autowired
    private QwenChatModel qwenChatModel;

    @Test
    void testChat() {
        Assistant assistant = AiServices.create(Assistant.class, qwenChatModel);
        String answger = assistant.chat("你是谁");
        System.out.println(answger);
    }
    
}

4.@AiService

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

package com.zhan.chat.assistant;

import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.spring.AiServiceWiringMode;

/**
 * @author zhanxuewei
 */
@AiService(wiringMode = AiServiceWiringMode.EXPLICIT, chatModel = "qwenChatModel")
public interface Assistant {

    String chat(String userMessage);

}
package com.zhan.chat;

import com.zhan.chat.assistant.Assistant;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class AssistantTests {

    @Autowired
    private Assistant assistant;

    @Test
    public void testAssistant() {
        String answger = assistant.chat("你是谁");
        System.out.println(answger);
    }
}

5.工作原理

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


Comment