前置条件:根据上篇文章完成springboot初步集成LangChain4j 【Springboot+LangChain4j】根据LangChain4j官方文档,三分钟完成Springboot项目集成LangChain4j(上)-优快云博客
但是接口方法中,关于大模型的配置都是写死的,不符合编码的合理性,本片目的将参数内容配置化。
1.建立配置类AiConfig,将接口参数配入配置文件
主要配置为baseUrl(ollama的ip地址和端口号),model(你要使用的大模型)
ollamaChatModel和streamingOllamaChatMode分别是流式和非流式
@Configuration
public class AiConfig {
@Value("${langchain4j.ollama.base-url}")
private String baseUrl;
@Value("${langchain4j.ollama.model}")
private String model;
@Bean
public ChatModel ollamaChatModel() {
return OllamaChatModel.builder()
.baseUrl(baseUrl)
.modelName(model)
.build();
}
@Bean
public StreamingChatModel streamingOllamaChatModel() {
return OllamaStreamingChatModel.builder()
.baseUrl(baseUrl)
.modelName(model)
.build();
}
}
2.接口实现
将这两个Model注入
@Autowired
private ChatModel chatModel;
@Autowired
private StreamingChatModel streamingChatModel;
//在非流式接口实现中,不再需要重新构建Model @GetMapping("/ai/generate") public String generate(@RequestParam String text) { return chatModel.chat(text); }
在流式接口实现中,同样不再需要重新构建Model
@GetMapping("/ai/generateStream") public Flux<String> generateStream(@RequestParam String text) { Flux<String> flux = Flux.create(sink -> { streamingChatModel.chat(text, new StreamingChatResponseHandler() { @Override public void onPartialResponse(String s) { System.out.printf(s); } @Override public void onCompleteResponse(ChatResponse chatResponse) { sink.complete(); } @Override public void onError(Throwable throwable) { sink.error(throwable); } }); }); return flux; }