【AI应用开发捷径之路】第四课:如何选择模型服务商:个人探索用 DeepSeek,企业落地选百炼,数据安全上 Ollama
原创 小数先生
如何选择模型服务商
选择AI模型服务商,核心看需求、预算和技术栈:
追求高性价比和强大代码能力,选 DeepSeek —— 完全免费、长上下文、开发者友好,适合快速原型和个人项目。
需要企业级合规、中文场景深度支持,选 阿里百炼 —— 集成阿里云生态、中文理解强、服务稳定,适合中大型企业。
要求数据绝对安全、完全自主可控,选 Ollama —— 本地部署、开源灵活、隐私无忧,适合敏感数据和定制化需求。
灵活策略:开发阶段用 DeepSeek 快速迭代,生产环境按需选择云端或本地部署,关键业务可混合使用,平衡效率与安全。
三大厂商核心特点
1. DeepSeek
优势:
完全免费,无使用限制
支持128K长上下文
代码能力突出,特别适合开发场景
API稳定,文档完善
支持文件上传(图像、txt、pdf、ppt、word、excel)
适用场景:
个人开发者/初创公司预算有限
需要强大代码生成/分析能力
长文本处理需求
快速原型开发
2. 阿里云百炼(通义千问)
优势:
国内合规性好,企业级服务
集成阿里云生态完善
中文理解能力强
支持模型微调、RAG等企业功能
适用场景:
企业级应用,需要合规保障
已在阿里云生态内
需要本地化部署支持
对中文场景有特殊要求
3. Ollama
优势:
完全本地运行,数据安全
支持多种开源模型(Llama、Qwen等)
可离线使用
定制化程度最高
适用场景:
对数据隐私要求极高
需要完全控制模型
有本地部署条件
技术团队能力强
如果你是:
个人开发者/学生:从 DeepSeek 开始,完全免费且能力强大
初创公司:DeepSeek + Ollama 组合,前者快速开发,后者关键业务本地化
中大型企业:阿里百炼 为主,合规性和企业支持更重要
数据敏感项目:Ollama 本地部署是必须的
一句话总结:个人探索用 DeepSeek,企业落地选百炼,数据安全上 Ollama,混合使用更明智。
之前课程中介绍过SpringAI接入deepseek、阿里百炼:
【AI应用开发捷径之路】第三课:文生图、文生视频、文生声音、多模态,如何选择合适的大模型?如何在SpringAI中应用这四种技术
【AI应用开发捷径之路】第二课:SpringAi接入Deepseek
下面介绍一下接入ollama的的一些注意点和步骤:
1. 引入BOM进行版本管理
首先,在你的pom.xml的 <dependencyManagement> 部分:
引入Spring AI的BOM。
推荐使用当时最新的稳定版本
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.3</version> <!-- 建议使用最新稳定版 –>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入BOM后,在添加其他Spring AI组件依赖时就可以省略<version>标签了,所有版本都由BOM统一管理。
2. 添加模型Starter依赖
接下来,在<dependencies>部分添加你所需模型的Starter。
例如,集成OpenAI和Ollama可以这样配置:
<!–ollama –>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
3.配置文件
依赖添加完成后,你需要在 :
application.yml 或 application.properties 中进行配置。
spring:
ai:
ollama:
base-url: http://127.0.0.1:11434
chat:
options:
model: deepseek-r1:7b #
temperature: 0.7
具体的模型可以通过命令行窗口查看,window下如图:

4.测试
该测试类包含:阻断性输出、流式输出、关闭思考链、多模态
package com.example.base;
import cn.myeasyai.FaceApplication;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.content.Media;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.MimeTypeUtils;
import reactor.core.publisher.Flux;
@SpringBootTest(classes = FaceApplication.class)
public class TestOllama {
@Test
public void testOllama(@Autowired OllamaChatModel ollamaChatModel) {
String call = ollamaChatModel.call("你好,你是谁?");
System.out.println(call);
}
/
* 关闭思考链
* @param ollamaChatModel
*/
@Test
public void testOllama2(@Autowired OllamaChatModel ollamaChatModel) {
String call = ollamaChatModel.call("今天几号?/set no_think");
System.out.println(call);
}
/
* 流式输出
* @param ollamaChatModel
/
@Test
public void testOllamaStream(@Autowired OllamaChatModel ollamaChatModel) {
Flux<String> stream = ollamaChatModel.stream("今天几号?/no_think");
stream.toIterable().forEach(System.out::println);
}
/**
多模态
*/
@Test
public void testOllamaMultimodality(@Autowired OllamaChatModel ollamaChatModel) {
var imageResource = new ClassPathResource("/images/hhl.png");
OllamaOptions gemma3 = OllamaOptions.builder().model("gemma3:4b").build();
Media media = new Media(MimeTypeUtils.IMAGE_PNG, imageResource);
ChatResponse call = ollamaChatModel.call(new Prompt(UserMessage.builder().media(media)
.text("识别图片的内容").build(), gemma3
)
);
System.out.println(call.getResult().getOutput().getText());
}
}




