Spring AI + Ollama 实现 deepseek-r1 的API服务和调用

news/2025/1/29 7:25:54/文章来源:https://www.cnblogs.com/didispace/p/18692823

最近DeepSeek开源了对openai-o1的第一代开源推理大模型:deepseek-r1,因其极低的成本和与openai-o1相当的性能引发了国内外的激烈讨论。DD在做独立产品的时候也一直都有用DeepSeek的API来实现一些功能,比如:TransDuck中的字幕翻译、视频翻译,效果也是非常不错的。但是,最近因为收到一些私有化的需求,所以对于API的调用就不可行了,不得不转向本地部署大模型,然后提供API的方式来实现。本文就针对这样的情况,尝试了一下使用 Ollama 在本地运行 DeepSeek-R1 并提供 API 服务,然用再使用Spring Boot + Spring AI 实现对 DeepSeek-R1 的调用,有类似需求或者感兴趣的小伙伴也可以根据下面的内容来实践。

使用 Ollama 运行 deepseek-r1

通过 Ollama 来运行 deepseek-r1 非常简单,在Linux服务器上的话,只需要两步:

  1. 安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh

如果本地MacOS或者Windows开发环境使用的话,也可以从前往官网下载客户端版本:

  1. 运行 deepseek-r1
ollama run deepseek-r1:671b

如果你的环境没有足够的资源运行671b模型,那么也可以根据你的算力资源情况选择其他几个小参数版本,命令如下:

ollama run deepseek-r1:1.5b
ollama run deepseek-r1:7b
ollama run deepseek-r1:8b
ollama run deepseek-r1:14b
ollama run deepseek-r1:32b
ollama run deepseek-r1:70b

更多关于信息可查看:https://ollama.com/library/deepseek-r1

使用Spring Boot + Spring AI

在使用Ollama把deepseek-r1跑起来之后,我们就可以开始使用Spring Boot + Spring AI来调用了。

  1. 使用 https://start.spring.io/ 构建一个Spring Boot项目。点击ADD DEPENDENCIES,搜索Ollama添加依赖,这是Spring AI对Ollama的实现支持。

  1. 打开生成的项目,查看pom.xml,可以看到核心依赖:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

如果你要在现有项目中集成的话,就可以直接添加这个依赖即可。

  1. 配置Ollama的相关信息:
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=deepseek-r1:1.5b
  • spring.ai.ollama.base-url: Ollama的API服务地址,如果部署在非本机,就需要做对应的修改
  • spring.ai.ollama.chat.model: 要调用的模型名称,对应上一节ollama run命令运行的模型名称
  1. 写个单元测试,尝试调用Ollama中的deepseek-r1模型,这里尝试实现一个翻译的功能。
@SpringBootTest(classes = DemoApplication.class)
public class TestOllama {@Autowiredprivate OllamaChatModel ollamaChatModel;@Testpublic void testChatModel() {String prompt = """你是一个精通中文和英文的翻译大师。如果我给你英文就翻译成中文,给你中文就翻译成英文。""";String message = """Ollama now supports tool calling with popular models such as Llama 3.1.This enables a model to answer a given prompt using tool(s) it knows about,making it possible for models to perform more complex tasks or interact with the outside world.""";String result = ollamaChatModel.call(prompt + ":" + message);System.out.println(result);}}
  1. 运行单元测试,结果如下:
<think>
好,我现在需要把用户提供的英文内容翻译成中文。首先,我仔细阅读原文:“Ollama now supports tool calling with popular models such as Llama 3.1.” 这句话的意思是说 Olla 现在支持模型使用常用模型如 Llama 3.1 进行工具调用。接下来的部分说明了这样做的好处:它允许模型通过工具来回答问题,从而实现更复杂的任务或与外界交互。现在我开始逐句翻译。第一句:“Ollama now supports tool calling with popular models such as Llama 3.1.” 直接翻译就是“ Olla 现在支持常用模型如 Llama 3.1 进行工具调用。”这里要注意“now”要保留,保持时态不变。第二句:“This enables a model to answer a given prompt using tool(s) it knows about, making it possible for models to perform more complex tasks or interact with the outside world.” 我理解为这句话的意思是说这个功能让模型可以使用它知道的工具来回答给定的提示,从而让模型完成更复杂的任务或与外界交互。翻译时要准确传达出技术上的优势和应用扩展。第三句:“Making it possible for models to perform more complex tasks or interact with the outside world.” 可以简单翻译为“使模型能够执行更复杂的任务或与外界交互。”这里要注意保持原意的同时,用较为流畅的中文表达。在翻译过程中,我还需要注意语境和语气的一致性。比如,将“popular models”翻译成“常用模型”,是否需要调整?在这里,“常用模型”本身已经是特定的词汇,直接使用就可以了。另外,句号和逗号的正确使用也很重要,确保句子结构清晰,读起来顺畅。比如,在第一句中用一个句号结束,第二句和第三句也分开处理,保持逻辑关系。现在,把翻译后的中文整合成一段话:“Ollama 现在支持常用模型如 Llama 3.1 进行工具调用。” 这个部分已经很清晰了。接下来的翻译要准确传达工具调用带来的好处,所以我可能会这样写:“这使其成为可能,让模型能够通过它知道的工具来回答给定的问题,并允许模型执行更复杂的任务或与外界交互。”最后,整个句子应该连贯起来,确保逻辑连贯,没有遗漏任何信息。完成翻译后,再通读一遍,看看有没有不通顺或者不准确的地方。总结一下,翻译的重点是保持原文的技术意义和意图,同时用自然流畅的中文表达出来。
</think>Ollama 现在支持常用模型如 Llama 3.1 进行工具调用。这使其成为可能,让模型能够通过它知道的工具来回答给定的问题,并允许模型执行更复杂的任务或与外界交互。

可以看到结果响应分成两部分,先是<think>标签包含的内容,这是模型根据提供的提示,生成了一个思考的过程,最后才输出了翻译后的结果。

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

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

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

相关文章

OceanBase数据库SQL优化案例一则

一、现象 开发人员反馈同一条sql,sql中where条件in的值的个数不同,执行效率差异巨大。以下是截取的sql的一部分,sql中in的值的个数为为2个或3个时执行时间超过40s,in的值的个数为为1个或大于3个时不到1秒就可以返回执行结果。二、原因分析 看到这种现象,最开始怀疑是数据库…

数据库服务器 SQL Server 版本升级公告

祝大家春节快乐 !在明天(1月28日)的辞旧迎新之际,我们也安排了对园子的数据库服务器进行一次辞旧迎新,从 SQL Server 2016 升级至 SQL Server 2022。 我们使用的是阿里云 RDS 云数据库服务,升级将会由 RDS 自动完成,但在升级过程中的切换阶段会造成有段时间不能正常访问…

两种方式让你用Python轻松在RDKX5上部署推理

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 宿主机环境:WSL2-Ubuntu22.04+Cuda12.6、D-Robotics-OE 1.2.8、Ubuntu20.04 GPU Docker 端侧设备环境:RDK X5-Server-3.1.0 2025年随着RDK X5的发布,地瓜官方随之也开放了RDK系列DNN推理部署的Python版的…

01. 初识Linux系统

一、什么是Ubuntu系统Ubuntu 操作系统是属于 Linux 操作系统中的一种,它是免费、稳定又可以拥有绚丽界面的一个操作系统。Linux,一般指 GNU/Linux(单独的 Linux 内核并不可直接使用,一般搭配 GNU 套件,故得此称呼),是一种免费使用和自由传播的类 UNIX 操作系统,其内核由…

学习elemetnPlus

学习了elementplus 学习了一个小时 其实就是查文档 做前端

20221320冯泰瑞-实验四密码模块应用实践过程记录

20221320冯泰瑞-实验四密码模块应用实践过程记录 实践要求完成电子公文交换系统,系统功能,(15 分)mindmaproot((电子公文系统))发文公文起草公文查看发文审核(审核员)公文发送公文查询收文公文签收公文查看公文处理公文查询系统管理组织单位用户管理操作员(科员)审核员…

android抓包相关操作指令

adb start-server adb connect 127.0.0.1:16384 adb rootadb shell su # 如果需要root权限mount -o remount,rw /systemadb push D:\\文档\\sixdu文档\\269953fb.0 /data/local/tmp adb push D:\\文档\\sixdu文档\\43b5e6bf.0 /data/local/tmpadb -s emulator-5554 push D:\\文…

四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)

四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用) @目录四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)2. list 列表常用指令(详细讲解说明)2.1 lpush/rpush <key><value1><value2>&l…

DeepSeek入门教程

一、简介 DeepSeek-V3 是一款高性能的开源 AI 模型,支持自然语言处理、智能对话生成等任务。其 API 接口与 OpenAI 完全兼容,用户可以通过简单的配置迁移现有项目,同时享受更低的成本和更高的性能。本文档将详细介绍如何快速接入 DeepSeek-V3 API 二、注册与API Key获取 1.注…

Archlinux 玩原神

首先你需要一台装载了archlinux的电脑,配置的话本人:Lenovo TianYi510S-07IMB Intel Core™ i5-10400 12 内存 8.0 GiB 磁盘 1 TB 玩的挺舒服的不会安装arch或者wine的看这里 然后本人是国际服Genshin Impact,国服同理(把下文的Genshin Impact当作yuanshen),参照官网安装…

C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

JQuery实现轮播图

一、html代码<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </he…