webflux集成langchain4j基础版

伴随着大模型应用的兴起,webflux逐渐引起关注。为了以java的方式运行AI应用,让我们一起学习webflux集成langchain4j吧。

1. 项目依赖

首先,你需要在 pom.xml 中添加必要的依赖:

<dependencies>
    <!-- Spring WebFlux -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>last version</version>
    </dependency>
    <!-- LangChain4j -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai</artifactId>
        <version>last version</version>
    </dependency>
</dependencies>

2. 创建配置类

创建一个配置类来初始化 LangChain4j 的 OpenAiChatModel

import dev.langchain4j.agent.tool.ToolExecutor;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.Duration;

@Configuration
public class LangChain4jConfig {

    @Value("${openai.api.key:xxxxxx}")
    private String openaiApiKey;

    @Bean
    public ChatLanguageModel chatLanguageModel() {
        return OpenAiChatModel.withApiKey(openaiApiKey)
               .setMaxTokens(2048)
               .setTemperature(0.7)
               .setTimeout(Duration.ofSeconds(30))
               .build();
    }
}

3. 创建服务类

创建一个服务类来处理与大语言模型的交互:

import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;

import java.util.List;

@Service
public class LangChain4jService {

    private final ChatLanguageModel chatLanguageModel;

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

    public Mono<String> generateResponse(String input) {
        UserMessage userMessage = UserMessage.from(input);
        return Mono.fromCallable(() -> {
            List<ChatMessage> messages = List.of(userMessage);
            return chatLanguageModel.generate(messages).text();
        });
    }
    
	public Flux<String> generateResponseStream(String input) {
        UserMessage userMessage = UserMessage.from(input);
        List<ChatMessage> messages = List.of(userMessage);
        return Flux.fromStream(chatLanguageModel.generateStream(messages)
               .map(part -> part.text()));
    }
}

4. 创建控制器类

创建一个控制器类来暴露 Web 接口:

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@RestController
@RequestMapping("/api")
public class LangChain4jController {

    private final LangChain4jService langChain4jService;

    public LangChain4jController(LangChain4jService langChain4jService) {
        this.langChain4jService = langChain4jService;
    }

    @PostMapping(value = "/chat", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaType.TEXT_PLAIN_VALUE)
    public Mono<String> chat(@RequestBody String input) {
        return langChain4jService.generateResponse(input);
    }

	@PostMapping(value = "/chat/stream", consumes = MediaType.TEXT_PLAIN_VALUE, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> chatStream(@RequestBody String input) {
        return langChain4jService.generateResponseStream(input);
    }
}

5. 运行项目

创建一个 Spring Boot 应用主类并运行:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringWebFluxLangChain4jApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringWebFluxLangChain4jApplication.class, args);
    }
}

6. 测试服务

使用工具(如 Postman)向 http://localhost:8080/api/chat 发送 POST 请求,请求体为你要询问的问题,例如:

curl -X POST -H "Content-Type: text/plain" -d "hello" http://localhost:8080/api/chat

代码解释

  • 配置类LangChain4jConfig 类初始化了 OpenAiChatModel,并设置了一些参数,如最大令牌数、温度和超时时间。
  • 服务类LangChain4jService 类封装了与大语言模型的交互逻辑,通过 generateResponse 方法接收用户输入并返回模型生成的响应。
  • 控制器类LangChain4jController 类暴露了一个 /api/chat 的 POST 接口,接收用户输入并调用 LangChain4jService 处理请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值