Java通过ollama平台接入DeepSeek

1、配置适配jdk8的依赖

<dependency><groupId>io.github.lnyo-cly</groupId><artifactId>ai4j-spring-boot-stater</artifactId><version>0.7.0</version>
</dependency>

2、配置bootstrap.yml

ai:ollama:api-host: http://localhost:11434

3、编写接口

package com.ronshi.ai;import io.github.lnyocly.ai4j.listener.SseListener;
import io.github.lnyocly.ai4j.platform.openai.chat.entity.ChatCompletion;
import io.github.lnyocly.ai4j.platform.openai.chat.entity.ChatCompletionResponse;
import io.github.lnyocly.ai4j.platform.openai.chat.entity.ChatMessage;
import io.github.lnyocly.ai4j.service.IChatService;
import io.github.lnyocly.ai4j.service.PlatformType;
import io.github.lnyocly.ai4j.service.factor.AiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;/*** @author ronshi* @date 2025/2/17 16:31*/
@RestController
public class AiController {@Autowiredprivate AiService aiService;@GetMapping("/chat")public String getChatMessage(@RequestParam String question) throws Exception {// 获取OLLAMA的聊天服务IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);// 创建请求参数ChatCompletion chatCompletion = ChatCompletion.builder().model("deepseek-r1:1.5b").message(ChatMessage.withUser(question)).build();System.out.println(chatCompletion);// 发送chat请求ChatCompletionResponse chatCompletionResponse = chatService.chatCompletion(chatCompletion);// 获取聊天内容和token消耗String content = chatCompletionResponse.getChoices().get(0).getMessage().getContent();long totalTokens = chatCompletionResponse.getUsage().getTotalTokens();System.out.println("总token消耗: " + totalTokens);return content;}@GetMapping("/chatStream")public void getChatMessageStream(@RequestParam String question, HttpServletResponse response) throws Exception {// 中文乱码问题response.setCharacterEncoding("UTF-8");// 获取OLLAMA的聊天服务IChatService chatService = aiService.getChatService(PlatformType.OLLAMA);// 创建请求参数ChatCompletion chatCompletion = ChatCompletion.builder().model("deepseek-r1:1.5b").message(ChatMessage.withUser(question)).build();PrintWriter writer = response.getWriter();// 发送chat请求SseListener sseListener = new SseListener() {@Overrideprotected void send() {writer.write(this.getCurrStr());writer.flush();System.out.println(this.getCurrStr());}};chatService.chatCompletionStream(chatCompletion, sseListener);writer.close();System.out.println(sseListener.getOutput());}}

 4、普通输出

http://localhost:8080/chat?question=地球的组成

 5、流式输出

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>人工智能</title>
</head>
<body>
<input id="question" type="text" placeholder="输入需要提问的问题"/><button id="startButton">开始</button><div id="output"></div><script>const input = document.getElementById("question");const outputDiv = document.getElementById('output');const startButton = document.getElementById('startButton');async function getResponse(){const question = input.value;const resp = await fetch("http://localhost:8080/chatStream" + "?question=" + question,{method: 'GET'})const reader = resp.body.getReader();const textDecoder = new TextDecoder();while (1){const { done , value } = await reader.read()if(done) break;const str = textDecoder.decode(value);outputDiv.innerText += str;console.log(str)}}startButton.addEventListener("click", getResponse)
</script>
</body>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20098.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ai】使用AnythingLLM访问DeepSeek,界面友好,API调用

本文假设已经安装好Ollama 如果还没安装可以看见这个https://blog.csdn.net/wlddhj/article/details/145418880 AnythingLLM是Mintplex Labs推出的一款功能强大的全栈AI应用程序&#xff1a; 功能特点 支持多种LLM和数据库&#xff1a;支持OpenAI、Azure OpenAI、AWS Bedrock…

猿大师播放器与其他网页播放RTSP方案对比有哪些优势?

1. 超低延迟播放&#xff08;300毫秒级&#xff09; - 基于VLC/FFPLAY引擎直接调用本地硬件解码&#xff0c;无需服务器转码&#xff0c;延迟低至300毫秒&#xff0c;远低于传统转码方案&#xff08;通常1-3秒&#xff09;。在消防、安防等场景中&#xff0c;毫秒级延迟可显著…

Breakout Tool

思科 CML 使用起来还是很麻烦的&#xff0c;很多操作对于习惯了 secure crt 或者 putty 等工具的网络工程师都不友好。 Breakout Tool 提供对远程实验室中虚拟机控制台与图形界面的本地化接入能力&#xff0c;其核心特性如下&#xff1a; Console 访问&#xff1a;基于 Telnet…

c语言易错题(选择)

这里给大家讲一下c语言部分遗留的选择题&#xff0c;用来巩固知识&#xff0c;一共13道题 1 答案解析 A&#xff1a;正确 不同的函数属于不同的作用域&#xff0c;因此不同的函数中定义相同名字的变量不会冲突 B&#xff1a;正确 在C语言中&#xff0c;函数的形参一般都是通过参…

《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用

专栏简介 《Python实战进阶》专栏共68集&#xff0c;分为 模块1&#xff1a;Web开发与API设计&#xff08;共10集&#xff09;&#xff1b;模块2&#xff1a;数据处理与分析&#xff08;共10集&#xff09;&#xff1b;模块3&#xff1a;自动化与脚本开发&#xff08;共8集&am…

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…

初识Linux(9):程序地址空间

实验&#xff1a; 1 #include <stdio.h>2 #include <sys/types.h>3 #include <unistd.h>4 #include <string.h>5 6 int g_val 100;7 8 int main()9 {10 printf("我是一个进程: pid:%d,ppid:%d\n",getpid(),getppid());11 pid_t id for…

RadASM环境,win32汇编入门教程之六

;运行效果 ;RadASM环境&#xff0c;win32汇编入门教程之六 ;在上一个教程里面&#xff0c;我们学习了如何定义数据&#xff0c;那么在这一章节里面&#xff0c;我们来学习一下&#xff0c;再说明怎么把这些数据显示出来 ;下列就是显示出这些数据的示例程序&#xff0c;可以直接…

Flutter

项目文件目录结构介绍 注&#xff1a;创建 Flutter 项目名称不要包含特殊字符&#xff0c;不要使用驼峰标识 // TODO 开发中运行一个 Flutter 三种启动方式&#xff1a; Run 冷启动从零开始启动Hot Reload 热重载执行 build 方法Hot Restart 热重启重新运行整个 APP 代码分析…

【基础架构篇十一】《DeepSeek日志体系:ELK+Prometheus监控方案》

各位被日志淹没的工程师们,是否经历过这些抓狂时刻?——凌晨三点被报警短信吵醒,打开系统却看到: 日志文件以每秒100MB的速度疯狂膨胀关键报错信息在10TB日志里玩捉迷藏监控图表像心电图一样上蹿下跳服务器硬盘在报警声中发出垂死呻吟今天我们不聊什么基础的日志收集,直接…

JavaEE -JDBC池化思想 与 IDEA导包

1.JDBC概述 1.JDBC 的概述 * Java DataBase Connectivity Java数据库的连接。 * 目的使用 Java 的代码来操作数据库 * 需要使用 JDBC &#xff08; Java 数据库的连接&#xff09;规范来操作数据。 2.JDBC 的规范 * JDBC是一套接口规范 * JDBC的实现类都是由各个数据库的…

Pycharm打开的jupyter notebook无法在pycharm中关闭怎么解决

首先你可以先看一下你的pycharm的jupyter界面的输出&#xff1a; 可以看到第一行有个启动命令 找到这个–port的端口号&#xff0c;现在我们可以走下面的步骤&#xff0c;假设你找到的是–port47187 &#xff1a; 步骤 1&#xff1a;定位占用端口的进程&#xff08;Linux/Mac…

电磁铁的磁芯材质

电磁铁的磁芯通常采用软铁材质&#xff0c;因其具有高磁导率和低矫顽力&#xff0c;使得电磁铁能够在通电时迅速产生强磁场&#xff0c;断电后磁场又能迅速消失。 一、电磁铁与磁芯材质 电磁铁是一种利用电流产生磁场的装置。其核心部件——磁芯&#xff0c;对电磁铁的性能有着…

网络安全等级保护测评(等保测评):全面指南与准备要点

等保测评&#xff0c;全称为“网络安全等级保护测评”&#xff0c;是根据《网络安全法》及《网络安全等级保护条例》等法律法规&#xff0c;对信息系统进行安全等级划分&#xff0c;并依据不同等级的安全保护要求&#xff0c;采用科学方法和技术手段&#xff0c;全面评估信息系…

24蓝桥省赛B-数字接龙

#include<bits/stdc.h> using namespace std; const int N13; int mp[N][N],flag,n,k; bool vis[N][N]; int f[N][N][N][N];//存储路径,用于判断是否斜着走,是本题剪枝的难点 vector<int>ans; vector<int>res; int dx[]{-1,-1,0,1,1,1,0,-1}; int dy[]{0,1,1…

基于豆瓣2025电影数据可视化分析系统的设计与实现

✔️本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了一个全面的电影信息平台&#xff0c;为用户提供深入了解电影产业趋势、影片评价与演员表现的工…

React实现自动滚动表格

在 React 中实现一个自动滚动的表格&#xff0c;可以通过 CSS 动画和 JavaScript 定时器来实现。以下是一个完整的示例代码&#xff0c;包含示例数据和自动滚动功能。 实现思路&#xff1a; ** 自动滚动&#xff1a;** 使用 setInterval 实现表格的自动滚动。 手动滚动&…

2024年GESP09月认证Scratch一级试卷

2024年GESP09月认证Scratch一级试卷分数&#xff1a;100 题数&#xff1a;17 一、单选题(共10题&#xff0c;每题3分&#xff0c;共30分) 01020304050607080910AACBCABCDD 1、据有关资料&#xff0c;山东大学于1972年研制成功DJL-1计算机&#xff0c;并于1973年投入运行&…

Qt常用控件之按钮QPushButton

按钮QPushButton QPushButton 在 Qt 中用于表示一个按钮控件&#xff0c;它继承自抽象 QAbstractButton 类。 QPushButton属性 属性说明text按钮中的文本。icon按钮中的图标。iconSize按钮中图标的大小。shortCut按钮对应的快捷键。autoRepeat按钮是否会重复触发&#xff08…

【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统&#xff08;源码论文…