01-基于springboot框架调用ollama下的模型完成基本功能

前言

上一篇讲述了ollama优势以及本地安装和验证。通过上一篇的学习,希望大家能掌握ollama工具的本地化安装已寄出测试验证

项目搭建

本文开始使用springboot快速大家一个可以访问模型的api。

目录结构如下

1.pom文件

xml 复制代码
<?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.2.10</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xuemeng</groupId>
    <artifactId>springboot_ollama</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_ollama</name>
    <description>springboot_ollama</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <spring.ai.version>1.0.3</spring.ai.version>
    </properties>
    <repositories>
        <!-- 阿里云镜像可保留,但需确保 Spring 仓库顺序在前 -->
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.3</version> <!-- 版本可参考 Maven Central 最新版,目前为 1.0.3[reference:1] -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- Web基础依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring AI Ollama 官方启动器 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-ollama</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                        <configuration>
                            <annotationProcessorPaths>
                                <path>
                                    <groupId>org.projectlombok</groupId>
                                    <artifactId>lombok</artifactId>
                                </path>
                            </annotationProcessorPaths>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-testCompile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <annotationProcessorPaths>
                                <path>
                                    <groupId>org.projectlombok</groupId>
                                    <artifactId>lombok</artifactId>
                                </path>
                            </annotationProcessorPaths>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2.application.yml文件

yaml 复制代码
server:
  port: 8090
spring:
  application:
    name: sbo
  ai:
    ollama:
    # 本地Ollama默认地址端口
      base-url: http://localhost:11434
      chat:
        options:
          # 对应本地拉取的模型名称 qwen3:0.6b轻量通义千问(500MB左右,极速推荐), deepseek-coder:1.3b DeepSeek 代码模型(适合代码生成、调试)
          model: qwen3:0.6b
          # 温度:0精准 1发散,业务场景建议0.7
          temperature: 0.7

3.controller控制器代码

java 复制代码
package com.xuemeng.springboot_ollama.controlller;


import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

/**
 * @ClassName OllamaAiController
 * @Description OllamaAiController
 * @Author 93296
 * @Date 2026/6/9 14:48
 * @VERSION 1.0.0
 **/

@RestController
public class OllamaAiController {
    // 自动注入本地AI客户端,SpringAI自动装配
    private final ChatClient chatClient;

    @Autowired
    public OllamaAiController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    /**
     * 1. 普通同步对话接口
     * 适用于简单问答、后台AI处理
     * @param prompt
     * @return
     */
    @GetMapping("/ai/local/chat")
    public String chat(@RequestParam String prompt){
        return chatClient.prompt(prompt)
                .call()
                .content();
    }

    /**
     * 2. 流式对话接口
     * 适用于前端聊天框、打字机效果,实时逐字返回
     * @param prompt
     * @return
     */
    @GetMapping("/ai/local/stream")
    public Flux<String> streamChat(@RequestParam String prompt){
        return chatClient.prompt(prompt)
                .stream()
                .content();
    }
}

项目运行演示

1.访问通同步对话接口

bash 复制代码
http://localhost:8090/ai/local/chat?prompt=%E7%94%A8Java%E7%AE%80%E5%8D%95%E8%A7%A3%E9%87%8A%E4%B8%80%E4%B8%8BSpringAI

效果如下

2.访问流式对话接口

bash 复制代码
http://localhost:8090/ai/local/stream?prompt=%E6%8E%A8%E8%8D%90%E5%87%A0%E4%B8%AAJava%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7

乱码问题

第二种流式访问出现了乱码问题,可以通过替换qwen:7b或者后端输出流,前端处理等方式处理。有更好的方法的朋友可以留言讨论。

java 复制代码
相关推荐
IT_陈寒3 小时前
Python列表的+=操作符坑了我一整天
前端·人工智能·后端
烧饼Fighting3 小时前
Jenkins自动化编译部署Spring Boot项目
spring boot·自动化·jenkins
闪电悠米3 小时前
黑马点评-Redis 消息队列-01_why_redis_mq
java·数据库·spring boot·redis·缓存·junit·消息队列
右耳朵猫AI3 小时前
Go周刊2026W22 | GoReleaser 2.16、chi 5.3、tldx 1.4、wazero 1.12、Buf 1.70
开发语言·后端·golang
摇滚侠3 小时前
Spring 零基础入门到进阶 基于 XML 管理 Bean 29-37
xml·java·数据库·后端·spring·intellij-idea
我登哥MVP4 小时前
Spring Boot 从“会用”到“精通”:内容协商原理
java·spring boot·后端·spring·java-ee·maven·lua
宸津-代码粉碎机4 小时前
Spring AI企业级实战|Agent长期记忆持久化落地,彻底解决多轮对话上下文丢失问题
java·开发语言·人工智能·后端·python·spring
Flittly4 小时前
【AgentScope Java新手村系列】(1)框架简介与环境搭建
java·spring boot·笔记·spring·ai
星辰徐哥12 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务