Spring AI Alibaba对接ollama本地大模型

作者:詹学伟 发布时间: 2025-10-26 阅读量:22 评论数:0

一、说明

本章节主要有两个知识点:

  • 使用Ollama本地安装大模型,并使用ChatBox测试对话。这个在很久之前的文章中也有讲过。

  • 使用Spring AI Alibaba编写代码对接本地大模型。

二、使用Ollama本地安装大模型

1.下载安装Ollama

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

一路下载安装完事,我使用的Mac,下载的Mac版本,下载完成后可以在Terminal窗口使用相关命令:

第一次run会有对话框,输入/bye退出。

2.安装大模型

ollama中安装想要的大模型,我这里安装的是deepseek

复制上图的命令,在控制台执行即可运行大模型。

ollama run deepseek-r1

3.使用chatbox测试

chatbox就是一个UI界面,咱们设置好对应的api相关的地址ip和端口、模型名称即可。

这里需要注意的是,因为是本地安装,本地调用,这里可以使用localhost或者127.0.0.1即可,上图的ip地址是我本地路由器分配的,需要设置下才能使用这种ip地址,打开下面这个即可:

设置完成后即可测试,点击获取,出现咱们之前安装过的大模型就是成功:

可以切换到chat界面对话:

三、spirng ai alibaba对接本地大模型

1.新建项目

这里和上一篇文章一样,都是基于同一个父工程下的子模块。

2.添加maven依赖

父工程pom 可以去上一篇文章中拿到。

<?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>com.zhan</groupId>
        <artifactId>ssa-parent</artifactId>
        <version>1.0.0</version>
    </parent>
    <artifactId>ssa-ollama</artifactId>
    <name>ssa-ollama</name>
    <description>ssa-ollama</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        </dependency>

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

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

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

3.添加yml配置文件

server:
  port: 8082
  #大模型对话中文乱吼UTF8编码处理
  servlet:
    encoding:
      enabled: true
      force: true
      charset: UTF-8

#====SpringAIALibaba Config=============
spring:
  application:
    name: ssa-ollama
  ai:
    dashscope:
      api-key: sk-09c7b571687b46d5a2e25a03fbdd2fd1
    ollama:
      base-url: http://localhost:11434
      chat:
        options:
          model: deepseek-r1:7b

4.编写测试接口

package com.zhan.ssa.ollama.controller;

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.model.ChatModel;
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 reactor.core.publisher.Flux;

@Slf4j
@RestController
@RequestMapping("/ollama")
public class OllamaController {

    @Resource(name = "ollamaChatModel")
    private ChatModel chatModel;

    /**
     * 调用模型
     * @param msg
     * @return
     */
    @GetMapping("/call")
    public String call(@RequestParam(name = "msg", defaultValue = "你是谁?") String msg) {
        log.info("message: {}", msg);
        String result = chatModel.call(msg);
        log.info("result: {}", result);
        return result;
    }

    @GetMapping("/stream")
    public Flux<String> stream(@RequestParam(name = "msg", defaultValue = "你是谁?") String msg) {
        log.info("message: {}", msg);
        Flux<String> result = chatModel.stream(msg);
        result.subscribe(log::info);
        return result;
    }
}

5.测试结果

评论