longchain4j是比spring-ai更早出现的大模型相关工程开源框架,社区成熟,活跃度高。下面演示如何用longchain4j调用本地ollama
一、核心pom依赖
- 1
- 2 <dependency>
- 3 <groupId>dev.langchain4j</groupId>
- 4 langchain4j</artifactId>
- 5 <version>1.1.0</version>
- 6 </dependency>
- 7
- 8
- 9 <dependency>
- 10 <groupId>dev.langchain4j</groupId>
- 11 langchain4j-ollama</artifactId>
- 12 <version>1.1.0-rc1</version>
- 13 </dependency>
复制代码 View Code 二、注入对应实例- @Configuration
- public class OllamaConfig {
- @Value("${ollama.base-url:http://localhost:11434}")
- private String ollamaBaseUrl;
- @Value("${ollama.model:qwen3:0.6b}")
- private String ollamaModel;
- @Value("${ollama.timeout:60}")
- private Integer timeoutSeconds;
- /**
- * 配置Ollama聊天模型
- *
- * @return ChatLanguageModel实例
- */
- @Bean
- public ChatModel chatModel() {
- return OllamaChatModel.builder()
- .baseUrl(ollamaBaseUrl)
- .modelName(ollamaModel)
- .timeout(Duration.ofSeconds(timeoutSeconds))
- .logRequests(true)
- .logResponses(true)
- .build();
- }
- @Bean
- public StreamingChatModel streamingChatModel() {
- return OllamaStreamingChatModel.builder()
- .baseUrl(ollamaBaseUrl)
- .modelName(ollamaModel)
- .timeout(Duration.ofSeconds(timeoutSeconds))
- .logRequests(true)
- .logResponses(true)
- .build();
- }
- }
复制代码 注:与spring-ai不同,longchain4j的流式响应,需要1个单独的模型StreamingChatModel
三、yaml配置- server:
- port: 8080
- servlet:
- context-path: /
- spring:
- application:
- name: longchain4j-study
-
- # 日志配置
- logging:
- level:
- com.example.longchain4jstudy: DEBUG
- dev.langchain4j: DEBUG
- pattern:
- console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
- # Ollama配置
- ollama:
- base-url: http://localhost:11434
- model: qwen3:0.6b
- timeout: 60
- # 应用信息
- info:
- app:
- name: LongChain4j Study
- version: 1.0.0
- description: LongChain4j学习项目 - 集成Ollama聊天示例
复制代码 四、API示例- @Autowired
- private ChatModel chatModel;
- @Autowired
- private StreamingChatModel streamingChatModel;
- /**
- * 发送聊天消息(GET方式)
- *
- * @param prompt 用户输入的消息
- * @return 聊天响应
- */
- @GetMapping(value = "/chat", produces = MediaType.TEXT_PLAIN_VALUE)
- public ResponseEntity<String> chat(@RequestParam String prompt) {
- log.info("收到聊天请求: {}", prompt);
- try {
- String aiResponse = chatModel.chat(prompt);
- return ResponseEntity.ok(aiResponse);
- } catch (Exception e) {
- log.error("与Ollama通信时发生错误", e);
- String errorResponse = "抱歉,处理您的请求时发生了错误: " + e.getMessage();
- return ResponseEntity.ok(errorResponse);
- }
- }
- /**
- * 流式聊天消息(GET方式)
- *
- * @param prompt 用户输入的消息
- * @return 流式聊天响应
- */
- @GetMapping(value = "/chat/stream", produces = "text/html;charset=utf-8")
- public Flux<String> chatStream(@RequestParam String prompt) {
- log.info("收到流式聊天请求: {}", prompt);
- Sinks.Many<String> sink = Sinks.many().unicast().onBackpressureBuffer();
- streamingChatModel.chat(prompt, new StreamingChatResponseHandler() {
- @Override
- public void onPartialResponse(String s) {
- log.info("收到部分响应: {}",s);
- // 发送SSE格式的数据
- sink.tryEmitNext(escapeToHtml(s));
- }
- @Override
- public void onCompleteResponse(ChatResponse chatResponse) {
- log.info("流式响应完成");
- sink.tryEmitComplete();
- }
- @Override
- public void onError(Throwable throwable) {
- log.error("流式响应发生错误", throwable);
- sink.tryEmitError(throwable);
- }
- });
- return sink.asFlux();
- }
复制代码 五、运行效果
文中代码:
yjmyzz/longchain4j-study at day01
参考:
https://docs.langchain4j.dev/https://docs.langchain4j.info/
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |