欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > webflux集成langchain4j基础版

webflux集成langchain4j基础版

2025/3/9 10:13:47 来源:https://blog.csdn.net/for62/article/details/146083255  浏览:    关键词: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;@Beanpublic 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 处理请求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词