【人工智能应用技术】-基础实战-环境搭建(基于ollama+deepseek)(一)

「鸿蒙心迹」“2025・领航者闯关记“主题征文活动 10w+人浏览 323人参与

前言

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。

核心技术官网地址:

Spring AI Alibaba 官网地址:https://java2ai.com/

ollama官网地址:https://ollama.com/

一、技术选型说明

1. 核心组件

  • Spring Boot 3.5.7:后端服务基础框架

  • spring-ai-ollama-spring-boot-starte:alibaba官方AI集成框架(1.0.0-M6版本)

  • Ollama:本地大模型运行环境(支持Llama2、Mistral等模型)

2. 环境要求

  • JDK 17+
  • 8GB+ 内存(运行大模型需要)
  • ollama version is 0.5.13

二、环境准备

1. 安装Ollama

  1. Ollama官网安装

官网地址:https://ollama.com/

官网下载window版本地址:https://ollama.com/download

img

  1. 百度网盘下载安装

百度网盘地址:https://pan.baidu.com/s/1mx_3R4NVjOSC9D8BaGdYHg?pwd=9eg7

img

  1. 运行OllamaSetup安装包
  • 双击OllamaSetup.exe
  • 安装包点击:Install

img

  • 安装成功

在这里插入图片描述

(截图示例:终端执行ollama --version

2. 下载模型

本教程使用的模型:deepseek-r1:7b

模型运行下载命令:ollama run deepseek-r1:7b

(默认是 7B 版本,轻量化且易下载)

操作步骤:

​ Ollama 的工作机制是:模型需要先下载到本地才能调用

  1. 下载 Deepseek 模型到本地

    打开命令行(CMD/PowerShell),执行 Ollama 模型拉取命令:

    ollama pull deepseek
    或者 
    ollama run deepseek-r1:7b
    
    • 等待下载完成(7B 版本约 4GB,视网络情况而定);
    • 验证是否下载成功:执行 ollama list,如果输出中包含 deepseek,说明下载完成。

在这里插入图片描述

2. Deepseek 模型运行效果

在这里插入图片描述

三、创建Spring Boot项目

1、通过官方网页配置创建: https://start.spring.io/

在这里插入图片描述

2、IDEA创建:

在这里插入图片描述

注意 :类型修改为:Maven

在这里插入图片描述

可以选添加的依赖:后期不同大模型都会有key值,安全性考虑:

		<dependency>
			<groupId>io.github.cdimascio</groupId>
			<artifactId>java-dotenv</artifactId>
			<version>5.2.2</version>
		</dependency>

io.github.cdimascio:java-dotenv:5.2.2 是一个 Java 环境变量加载工具,核心作用是 .env 文件中读取配置项,自动注入到系统环境变量或应用配置中,避免将敏感信息(如 API 密钥、数据库密码)硬编码到代码或配置文件里,简化多环境配置管理。

一、核心作用(解决的痛点)

  1. 隔离敏感信息:不用把 spring.ai.openai.api-key=sk-xxx、数据库密码等敏感信息写死在 application.properties/yml 或代码中,降低泄露风险;

  2. 简化多环境切换:开发 / 测试 / 生产环境可以用不同的 .env 文件(如 .env.dev.env.prod),切换环境时只需替换 .env 文件,无需修改项目配置;

  3. 统一配置管理:所有环境相关的配置(如接口地址、端口、密钥)集中放在 .env 文件,便于维护;

  4. 无侵入集成:不需要复杂配置,一行代码即可加载,兼容 Spring Boot、原生 Java 等项目。

在这里插入图片描述

1. 项目初始化

  • 添加依赖:

  • Spring Web

  • spring-ai-ollama-spring-boot-starter

    这边我们使用阿里的实现ollama

2. 配置核心POM.xml

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--阿里巴巴ollama--> 
		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
			<version>1.0.0-M6</version>
		</dependency>
	</dependencies>

四、配置Ollama连接

application.yml

server:
  port: 9999
spring:
  ai:
    ollama:
      base-url: http://localhost:11434 # 哦llama地址
      chat:
        model: deepseek-r1:7b # 模型
        options:
          temperature: 0.8 # 温度越高,回答越有创意
          top-p: 0.9 # 数值越高,回答越多样
          top-k: 100 # 数值越高,回答越多样

五、编写AI对话接口

Maven依赖详情

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.5.7</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>springAI-Demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springAI-Demo</name>
	<description>springAI-Demo</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
		<spring-ai.version>1.0.0-M6</spring-ai.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
<!--		<dependency>-->
<!--			<groupId>org.springframework.ai</groupId>-->
<!--			<artifactId>spring-ai-starter-model-ollama</artifactId>-->
<!--		</dependency>-->
		<!--    阿里巴巴ollama-->
		<dependency>
			<groupId>org.springframework.ai</groupId>
			<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>io.github.cdimascio</groupId>
			<artifactId>java-dotenv</artifactId>
			<version>5.2.2</version>
		</dependency>

	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.ai</groupId>
				<artifactId>spring-ai-bom</artifactId>
				<version>${spring-ai.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

1. 创建Controller

package com.example.springaidemo;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.model.ChatModel;

import org.springframework.ai.ollama.api.OllamaOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import reactor.core.publisher.Flux;

import java.io.IOException;

@RestController
@RequestMapping("/client")
public class OllamaChatController {
    private static final String DEFAULT_PROMPT = "你好,介绍下你自己!请用中文回答。";
    private final ChatClient ollamaiChatClient;
    public OllamaChatController(ChatModel chatModel) {
        // 构造时,可以设置 ChatClient 的参数
        this.ollamaiChatClient = ChatClient.builder(chatModel)
                // 实现 Logger 的 Advisor
                .defaultAdvisors(
                        new SimpleLoggerAdvisor()
                )
                // 设置 ChatClient 中 ChatModel 的 Options 参数
                .defaultOptions(
                        OllamaOptions.builder()
                                .topP(0.7)
                                .model("deepseek-r1:7b")
                                .build()
                )
                .build();
    }
    /**
     * ChatClient 简单调用
     */
    @GetMapping("/simple/chat")
    public String simpleChat() {
        return ollamaiChatClient.prompt(DEFAULT_PROMPT).call().content();
    }
    /**
     * ChatClient 流式调用
     */
    @GetMapping("/stream/chat")
    public Flux<String> streamChat1(@RequestParam String message) {
        return ollamaiChatClient.prompt(message).stream().content();
    }
    @GetMapping("/stream")
    public SseEmitter streamChat2(@RequestParam String message) {
        SseEmitter emitter = new SseEmitter();
        Flux<String> content = ollamaiChatClient.prompt(message).stream().content();
        try {
            emitter.send(content);
            System.out.println(emitter.toString());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return emitter;
    }

}

启动项目和保证deepsek运行

在这里插入图片描述
在这里插入图片描述

六、PostMan测试接口

1. 无参数接口测试

接口:/client/simple/chat

在这里插入图片描述

2. 流式调用接口测试

接口:/client/stream/chat

在这里插入图片描述

七、常见问题排查

问题现象解决方案
连接Ollama超时确认ollama serve正在运行
模型加载失败检查ollama list确认模型存在
内存不足尝试更小参数的模型版本

八、总结

本文演示了如何通过:

  1. 本地部署Ollama服务
  2. Spring AI集成LLM能力
  3. 构建RESTful API接口

优势:数据隐私性强、无需API密钥、支持离线环境
备注

<!--		<dependency>-->
<!--			<groupId>org.springframework.ai</groupId>-->
<!--			<artifactId>spring-ai-starter-model-ollama</artifactId>-->
<!--		</dependency>-->
	<dependency>
		<groupId>org.springframework.ai</groupId>
		<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
		<version>1.0.0-M6</version>
	</dependency> 

两者是 Spring AI 不同版本阶段的「Ollama 集成 Starter」,因 Spring AI 1.2.x 版本优化了依赖命名规范而产生差异,具体对比如下:

对比维度spring-ai-ollama-spring-boot-starter(你当前用的)spring-ai-starter-model-ollama(你提到的)
版本兼容性仅存在于 Spring AI 1.2.x 之前(如 1.0.0-M6、1.1.4)仅存在于 Spring AI 1.2.x 及之后(如 1.2.0、1.3.0)
命名规范旧规范:spring-ai-[模块]-spring-boot-starter新规范:spring-ai-starter-model-[模块]
核心功能完全一致:自动配置 Ollama 客户端、模型调用逻辑完全一致:自动配置 Ollama 客户端、模型调用逻辑
依赖传递包含 spring-ai-ollama 核心模块 + 自动配置包含 spring-ai-ollama 核心模块 + 自动配置
是否需要手动指定版本是(1.2.x 前无 BOM 统一管理,需显式写版本)否(1.2.x 后支持 BOM 统一版本,无需写版本)
你的项目能否使用能(当前版本 1.0.0-M6 匹配)不能(1.0.0-M6 版本不存在该依赖,会报找不到)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值