深入解析:如何通过Spring Boot启动器无缝集成LangChain4j实现AI服务自动化

发布于:2025-03-11 ⋅ 阅读:(23) ⋅ 点赞:(0)

Spring Boot集成 | LangChain4j

LangChain4j 提供了 Spring Boot 启动器用于:

  • 流行的集成
  • 声明式AI服务

Spring Boot启动器有助于通过属性创建和配置语言模型、嵌入模型、嵌入存储和其他核心LangChain4j组件。

要使用其中一个Spring Boot启动器,请导入相应的依赖项。Spring Boot启动器依赖项的命名约定是:langchain4j-{integration-name}-spring-boot-starter
例如,对于OpenAI(langchain4j-open-ai),依赖项名称将是langchain4j-open-ai-spring-boot-starter:

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    <version>1.0.0-beta1</version>
</dependency>

然后,您可以在application.properties文件中按如下方式配置模型参数:

langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
...

在这种情况下,将自动创建一个OpenAiChatModel实例(实现了ChatLanguageModel接口),并且你可以在需要的地方自动装配它:

@RestController
public class ChatController {
    ChatLanguageModel chatLanguageModel;

    public ChatController(ChatLanguageModel chatLanguageModel) {
        this.chatLanguageModel = chatLanguageModel;
    }

    @GetMapping("/chat")
    public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
        return chatLanguageModel.generate(message);
    }
}

如果您需要StreamingChatLanguageModel实例,则使用流式聊天模型属性代替聊天模型属性:

langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
...

LangChain4j 还提供了一个用于自动配置AI服务、RAG、工具等的Spring Boot启动器。假设您已导入上述集成启动器之一,可以导入langchain4j-spring-boot-starter:

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>1.0.0-beta1</version>
</dependency>

现在您可以定义AI服务接口并用@AiService进行注解:

@AiService
interface Assistant {
    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

可以把它看作是一个带有AI功能的标准Spring Boot @Service。当应用程序启动时,LangChain4j启动器将扫描classpath并找到所有被@AiService注解的接口。对于找到的每个AI服务,它将使用应用程序上下文中可用的所有LangChain4j组件创建此接口的实现,并将其注册为bean,以便在需要的地方自动装配。

如果应用上下文中有以下组件,则它们会自动注入到AI服务中:

  • ChatLanguageModel
  • StreamingChatLanguageModel
  • ChatMemory
  • ChatMemoryProvider
  • ContentRetriever
  • RetrievalAugmentor
    以及任何@Component@Service类中标注有@Tool的方法。

例如:

@Component
public class BookingTools {
    private final BookingService bookingService;

    public BookingTools(BookingService bookingService) {
        this.bookingService = bookingService;
    }

    @Tool
    public Booking getBookingDetails(String bookingNumber, String customerName, String customerSurname) {
        return bookingService.getBookingDetails(bookingNumber, customerName, customerSurname);
    }

    @Tool
    public void cancelBooking(String bookingNumber, String customerName, String customerSurname) {
        bookingService.cancelBooking(bookingNumber, customerName, customerSurname);
    }
}

注意:如果在应用上下文中存在多个相同类型的组件,应用程序将无法启动。在这种情况下,请使用显式布线模式(下面解释)。

若您有多个AI服务,并且希望将不同的LangChain4j组件连接到每个服务中,可以通过显式布线模式(@AiService(wiringMode = EXPLICIT))指定使用哪些组件。比如我们配置了两个聊天语言模型:

# OpenAI
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini

# Ollama
langchain4j.ollama.chat-model.base-url=http://localhost:11434
langchain4j.ollama.chat-model.model-name=llama3.1
@AiService(wiringMode = EXPLICIT, chatModel = "openAiChatModel")
interface OpenAiAssistant {
    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

@AiService(wiringMode = EXPLICIT, chatModel = "ollamaChatModel")
interface OllamaAssistant {
    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

请注意,在这种情况下,必须明确指定所有组件。更多详情请参见这里。

完成AI服务的声明式开发后,您可以通过实现ApplicationListener<AiServiceRegisteredEvent>接口监听AiServiceRegisteredEvent事件。当AI服务在Spring上下文中注册时,此事件会被触发,允许您在运行时获取所有注册的AI服务及其工具的信息。以下是示例:

@RestController
class AssistantController {
    @Autowired
    Assistant assistant;

    @GetMapping("/chat")
    public String chat(String message) {
        return assistant.chat(message);
    }
}

这个翻译提供了如何在Spring Boot项目中集成LangChain4j的基本指导,包括添加依赖项、配置模型参数、定义和使用AI服务等内容。