longchain4j 学习系列(1)-ollama本地调用
longchain4j是比spring-ai更早出现的大模型相关工程开源框架,社区成熟,活跃度高。下面演示如何用longchain4j调用本地ollama
一、核心pom依赖

1 <!-- LongChain4j Core -->
2 <dependency>
3 <groupId>dev.langchain4j</groupId>
4 <artifactId>langchain4j</artifactId>
5 <version>1.1.0</version>
6 </dependency>
7
8 <!-- LongChain4j Ollama Integration -->
9 <dependency>
10 <groupId>dev.langchain4j</groupId>
11 <artifactId>langchain4j-ollama</artifactId>
12 <version>1.1.0-rc1</version>
13 </dependency>
二、注入对应实例
@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
参考:
longchain4j 学习系列(1)-ollama本地调用的更多相关文章
- Git学习系列之如何正确且高效地将本地项目上传到Github(图文详解)
不多说,直接上干货! 首先你需要一个Github账号,所以还没有的话先去注册吧! https://github.com/ 见 如何走上更高平台分享传递干货知识:(开通个人Github面向开源及私有软件 ...
- TortoiseGit学习系列之TortoiseGit基本操作将提交到本地的项目推送到在线仓库(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...
- Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目
Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目 https://blog.csdn.net/alinyua/article/details/8303 ...
- RabbitMQ学习系列(五): RPC 远程过程调用
前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...
- Dubbo源码学习总结系列二 dubbo-rpc远程调用模块
dubbo本质是一个RPC框架,我们首先讨论这个骨干中的骨干,dubbo-rpc模块. 主要讨论一下几部分内容: 一.此模块在dubbo整体框架中的作用: 二.此模块需要完成的需求功能点及接口定义: ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- MVC学习系列14--Bundling And Minification【捆绑和压缩】--翻译国外大牛的文章
这个系列是,基础学习系列的最后一部分,这里,我打算翻译一篇国外的技术文章结束这个基础部分的学习:后面打算继续写深入学习MVC系列的文章,之所以要写博客,我个人觉得,做技术的,首先得要懂得分享,说不定你 ...
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...
- 【深度学习系列3】 Mariana CNN并行框架与图像识别
[深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...
- 【深度学习系列2】Mariana DNN多GPU数据并行框架
[深度学习系列2]Mariana DNN多GPU数据并行框架 本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架. 深度神经网络( ...
随机推荐
- SpringCloud动态更新(加载)nacos配置
nacos端 nacos中配置文件中增加属性 app: version: 1.0.0 SpringCloud端 增加读取配置的代码 @Service @RefreshScope public clas ...
- 【ROS】2.1 Turtlebot3汉堡Burger连接和远程控制
机器人连接和远程控制 准备 充电 充电有两种方式: ①直接供电:电源适配器连接树莓派上的圆孔: ②电池供电:电源适配器插到蓝色的那个充电器,再将充电器与Burger底座的电池相连接.(当电池电量低于1 ...
- 【记录】Python3|用百度语音 API 朗读你的小说TXT
百度语音合成官方教程_AI开放平台 百度语音合成官方demo_github.com 简单地写了一个按段落朗读文本的demo:DEMO链接_gitee.com. 有时候会请求不到数据,不知道是网络原因还 ...
- Vue之“表单修饰符”
1.lazy:失去焦点时处理 案例1 2.number:限制只能输入数字 案例1 3.trim:去掉前后空格 案例1
- Linux,yum错误,There are no enabled repos.(学习)
1.yum yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包(RPM 是 Red H ...
- B1086 就不告诉你
描述 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. ...
- harbor镜像仓库拉取所有镜像的信息(镜像版本,tag,大小,最后拉取时间)
# -*- coding: utf-8 -*- # author: yuhaohao import requests from requests.auth import HTTPBasicAuth f ...
- MySQL查询优化的步骤
本文由 ChatMoney团队出品 MySQL查询优化是提高数据库性能的关键步骤之一.通过优化查询,可以减少数据库的负载,提高查询速度,从而提高整个应用程序的性能. 选择合适的索引 索引是数据库中用于 ...
- 一次 .NET 性能优化之旅:将 GC 压力降低 99%
字数 1128,阅读大约需 6 分钟 一次 .NET 性能优化之旅:将 GC 压力降低 99% 前言:问题的浮现 最近,我使用 ScottPlot 库开发一个频谱分析应用.应用的核心功能之一是实时显示 ...
- C# 列出所有打印机
https://blog.csdn.net/weixin_38211198/article/details/89740286 不过这个分享不能赋值,正的麻烦,所以我拷贝过来了 该方法只能再Window ...