找回密码
 立即注册
首页 业界区 业界 longchain4j 学习系列(1)-ollama本地调用

longchain4j 学习系列(1)-ollama本地调用

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

 
4.gif

 
文中代码:
yjmyzz/longchain4j-study at day01 
 
参考:
https://docs.langchain4j.dev/https://docs.langchain4j.info/ 

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册