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本地调用的更多相关文章

  1. Git学习系列之如何正确且高效地将本地项目上传到Github(图文详解)

    不多说,直接上干货! 首先你需要一个Github账号,所以还没有的话先去注册吧! https://github.com/ 见 如何走上更高平台分享传递干货知识:(开通个人Github面向开源及私有软件 ...

  2. TortoiseGit学习系列之TortoiseGit基本操作将提交到本地的项目推送到在线仓库(图文详解)

    前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...

  3. 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 ...

  4. RabbitMQ学习系列(五): RPC 远程过程调用

    前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...

  5. Dubbo源码学习总结系列二 dubbo-rpc远程调用模块

    dubbo本质是一个RPC框架,我们首先讨论这个骨干中的骨干,dubbo-rpc模块. 主要讨论一下几部分内容: 一.此模块在dubbo整体框架中的作用: 二.此模块需要完成的需求功能点及接口定义: ...

  6. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  7. MVC学习系列14--Bundling And Minification【捆绑和压缩】--翻译国外大牛的文章

    这个系列是,基础学习系列的最后一部分,这里,我打算翻译一篇国外的技术文章结束这个基础部分的学习:后面打算继续写深入学习MVC系列的文章,之所以要写博客,我个人觉得,做技术的,首先得要懂得分享,说不定你 ...

  8. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  9. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

  10. 【深度学习系列2】Mariana DNN多GPU数据并行框架

    [深度学习系列2]Mariana DNN多GPU数据并行框架  本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架.   深度神经网络( ...

随机推荐

  1. SpringCloud动态更新(加载)nacos配置

    nacos端 nacos中配置文件中增加属性 app: version: 1.0.0 SpringCloud端 增加读取配置的代码 @Service @RefreshScope public clas ...

  2. 【ROS】2.1 Turtlebot3汉堡Burger连接和远程控制

    机器人连接和远程控制 准备 充电 充电有两种方式: ①直接供电:电源适配器连接树莓派上的圆孔: ②电池供电:电源适配器插到蓝色的那个充电器,再将充电器与Burger底座的电池相连接.(当电池电量低于1 ...

  3. 【记录】Python3|用百度语音 API 朗读你的小说TXT

    百度语音合成官方教程_AI开放平台 百度语音合成官方demo_github.com 简单地写了一个按段落朗读文本的demo:DEMO链接_gitee.com. 有时候会请求不到数据,不知道是网络原因还 ...

  4. Vue之“表单修饰符”

    1.lazy:失去焦点时处理 案例1 2.number:限制只能输入数字 案例1 3.trim:去掉前后空格 案例1

  5. Linux,yum错误,There are no enabled repos.(学习)

    1.yum yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包(RPM 是 Red H ...

  6. B1086 就不告诉你

    描述 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. ...

  7. harbor镜像仓库拉取所有镜像的信息(镜像版本,tag,大小,最后拉取时间)

    # -*- coding: utf-8 -*- # author: yuhaohao import requests from requests.auth import HTTPBasicAuth f ...

  8. MySQL查询优化的步骤

    本文由 ChatMoney团队出品 MySQL查询优化是提高数据库性能的关键步骤之一.通过优化查询,可以减少数据库的负载,提高查询速度,从而提高整个应用程序的性能. 选择合适的索引 索引是数据库中用于 ...

  9. 一次 .NET 性能优化之旅:将 GC 压力降低 99%

    字数 1128,阅读大约需 6 分钟 一次 .NET 性能优化之旅:将 GC 压力降低 99% 前言:问题的浮现 最近,我使用 ScottPlot 库开发一个频谱分析应用.应用的核心功能之一是实时显示 ...

  10. C# 列出所有打印机

    https://blog.csdn.net/weixin_38211198/article/details/89740286 不过这个分享不能赋值,正的麻烦,所以我拷贝过来了 该方法只能再Window ...