最近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开发环境使用的话,也可以从前往官网下载客户端版本:
2. 运行 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
使用Spring Boot + Spring AI
在使用Ollama把deepseek-r1跑起来之后,我们就可以开始使用Spring Boot + Spring AI来调用了。
1. 使用 https://start.spring.io/
构建一个Spring Boot项目。点击ADD DEPENDENCIES
,搜索Ollama
添加依赖,这是Spring AI对Ollama的实现支持。
2. 打开生成的项目,查看pom.xml
,可以看到核心依赖:
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> </dependency>
如果你要在现有项目中集成的话,就可以直接添加这个依赖即可。
3. 配置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
命令运行的模型名称
4. 写个单元测试,尝试调用Ollama中的deepseek-r1模型,这里尝试实现一个翻译的功能。
@SpringBootTest(classes = DemoApplication.class) public class TestOllama { @Autowired private OllamaChatModel ollamaChatModel; @Test public 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); } }
4. 运行单元测试,结果如下:
<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>
标签包含的内容,这是模型根据提供的提示,生成了一个思考的过程,最后才输出了翻译后的结果。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。