基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API

简介: Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。

前言

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

  1. 项目地址

gitcode平台:https://gitcode.com/Var_ya/springAI_ollama_chatInterfaceApi

  1. 核心技术官网地址

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

knife4j官网地址: https://doc.xiaominfo.com/

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

一、技术选型说明

1. 核心组件

  • Spring Boot 3.4.5:后端服务基础框架
  • spring-ai-ollama-spring-boot-starte:alibaba官方AI集成框架(1.0.0-M6版本)
  • knife4j 4.5.0:可视化展示后端接口页面
  • 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

  1. 百度网盘下载安装

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

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

  • 安装成功


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

2. 下载模型

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

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

ollama run deepseek-r1:8b

2. 模型运行效果


三、创建Spring Boot项目

注意 :类型修改为:Maven

1. 项目初始化

使用start.spring.io创建项目:

  • 添加依赖:
  • Spring Web
  • spring-ai-ollama-spring-boot-starter
  • knife4j-openapi3-jakarta-spring-boot-starter

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>
    <!-- Swagger3-knife4j依赖 -->
    <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
      <version>4.5.0</version>
    </dependency>
  </dependencies>

四、配置Ollama连接

application.properties

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 # 数值越高,回答越多样
# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true    # 开启knife4j,无需添加@EnableKnife4j注解
  setting:
    language: zh_cn   #中文
  #  swagger-model-name: 实体列表   #默认为: Swagger Models
  basic: # 开启Swagger的Basic认证功能,默认是false
    enable: false
    username: varya
    password: varya

五、编写AI对话接口

1. 创建Controller

package cn.varin.springai_ollama_chatinterfaceapi.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import reactor.core.publisher.Flux;
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.RestController;
import java.io.IOException;
import java.util.stream.Stream;
@RestController
@Tag(name="客户端实例")
@RequestMapping("/client")
public class OllamaChatClientController {
  private static final String DEFAULT_PROMPT = "你好,介绍下你自己!请用中文回答。";
  private final ChatClient ollamaiChatClient;
  public OllamaChatClientController(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:1.5b")
                .build()
        )
        .build();
  }
  /**
   * ChatClient 简单调用
   */
  @Operation(summary = "无参数调用")
  @GetMapping("/simple/chat")
  public String simpleChat() {
    return ollamaiChatClient.prompt(DEFAULT_PROMPT).call().content();
  }
  /**
   * ChatClient 流式调用
   */
  @Operation(summary = "流式调用")
  @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;
  }
}

2. 支持流式响应(可选)

/**
   * ChatClient 流式调用
   */
  @Operation(summary = "流式调用")
  @GetMapping("/stream/chat")
  public Flux<String> streamChat1(@RequestParam String message) {
    return ollamaiChatClient.prompt(message).stream().content();
  }

六、knife4j测试接口

访问Url:http://localhost:9999/doc.html  

1. 无参数接口测试

接口:/client/simple/chat

2. 流式调用接口测试

接口:/client/stream/chat


七、扩展功能建议

  1. 多模型切换:通过@RequestParam动态选择模型
  2. 对话历史管理:使用Redis存储上下文
  3. 速率限制:添加Bucket4j限流
  4. API鉴权:集成Spring Security

八、常见问题排查

问题现象

解决方案

连接Ollama超时

确认ollama serve正在运行

模型加载失败

检查ollama list确认模型存在

内存不足

尝试更小参数的模型版本


九、项目效果展示



十、总结

本文演示了如何通过:

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

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

完整代码示例:https://gitcode.com/Var_ya/springAI_ollama_chatInterfaceApi

相关实践学习
阿里小蜜中的机器阅读技术
阿里云智能对话机器人(原云小蜜)依托阿里云AI技术,为企业提供一体化对话机器人服务,帮助企业构建新一代全时段智能交互系统,精准理解用户意图,支持界面化流程配置、自定义三方业务集成等功能,降本增效,广泛适用于智能客服问答、智能办公助理、售前业务咨询等场景。
目录
相关文章
|
2月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
2028 64
|
2月前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
689 6
|
2月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
3685 50
|
4月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
386 0
|
2月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
4月前
|
人工智能 Java 开发者
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
|
4月前
|
缓存 Java API
Spring WebFlux 2025 实操指南详解高性能非阻塞 API 开发全流程核心技巧
本指南基于Spring WebFlux 2025最新技术栈,详解如何构建高性能非阻塞API。涵盖环境搭建、响应式数据访问、注解与函数式两种API开发模式、响应式客户端使用、测试方法及性能优化技巧,助你掌握Spring WebFlux全流程开发核心实践。
767 0
|
5月前
|
人工智能 数据可视化 Java
性能提升 10 倍, DIFY 模式迁移至 Spring AI Alibaba 模式 零改造实现
将 Dify 应用迁移至 Spring AI Alibaba,可兼顾可视化开发效率与代码工程灵活性,显著提升系统性能与扩展能力,适用于复杂 AI 业务场景。
799 0