Spring Boot 接入Ollama实现与Deepseek简单对话

编程教程 (12) 2025-02-20 17:40:45

Ollama 环境准备

Ollama安装使用参考:Deepseek Windows安装和入门使用

Spring Boot项目接入Ollama

Spring Boot 项目创建

提示:此处需spring boot 3.x + jdk 17

创建项目时候的几个核心依赖:

spring-boot-starter-web  spring-ai-ollama-spring-boot-starter  详细参考下面片段(版本实时变化注意更新)

<properties>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0-M6</spring-ai.version>
    </properties>
    <dependencies>
        <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>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>annotationProcessor</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>

 

Ollama 配置

配置ollama服务地址和端口以及默认模型

spring:
  application:
    name: demo-boot-ollama
  ai:
    ollama:
      init:
        pull-model-strategy: never #默认不拉取没有的模型
      base-url: http://192.168.31.162:11434
      chat:
        options:
          model: deepseek-r1:8b

更多参数参考:Ollama Chat :: Spring AI Reference Base Properties部分

与Ollama 对话

@RestController
public class OllamaController {

    @Resource
    OllamaChatModel ollamaChatModel;

    @GetMapping(value = "/ai/ollama/default")
    public Object ollama(@RequestParam(value = "msg")String msg) {
        String called = ollamaChatModel.call(msg);
        System.out.println(called);
        return called;
    }

    @GetMapping(value = "/ai/ollama/custom")
    public Object ollamaConfig(@RequestParam(value = "msg")String msg){
        ChatResponse chatResponse=ollamaChatModel.call(new Prompt(msg,
                 OllamaOptions.builder()
                         .model("deepseek-r1:14b")//使用哪个大模型
                         .temperature(0.4)//温度,温度值越高,准确率下降,温度值越低,准确率上升
                         .build()
                 ));//温度,温度值越高,准确率下降,温度值越低,准确率上升
        System.out.println(chatResponse.getResult().getOutput().getText());
        return chatResponse.getResult().getOutput().getText();
    }
}

两个简单对话实现,第一个使用默认的application配置模型对话,第二个自定义对话模型和其他参数;

 

Spring Boot Ollama 更多配置参考:Ollama Chat :: Spring AI Reference

 

浏览器访问测试:

image
简单默认对话
Spring Boot 接入Ollama实现与Deepseek简单对话_图示-8dd3c3d993cc42ea91d93c893ceecb1c.png
简单自定义对话

 

另一个demo

@RestController
public class ChatController {

    /**
     * 注入application.yml配置的模型
     */
    @Resource
    OllamaChatModel chatModel;

    @GetMapping("/ai/generate")
    public Map<String,String> generate(@RequestParam(value = "message", defaultValue = "请讲一个笑话") String message) {
        return Map.of("generation", this.chatModel.call(message));
    }

    //流返回
    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "请讲一个笑话") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }

}
Spring Boot 接入Ollama实现与Deepseek简单对话_图示-3ed2f9ffbdc34a4692b0dd3350938336.png
聊天

 

使用单例测试方式对话,且指定格式化输出内容:

    @Resource
    OllamaChatModel ollamaChatModel;

    @Test
    public void chat() throws JsonProcessingException {
        String jsonSchema = """
        {
            "type": "object",
            "properties": {
                "steps": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "explanation": { "type": "string" },
                            "output": { "type": "string" }
                        },
                        "required": ["explanation", "output"],
                        "additionalProperties": false
                    }
                },
                "final_answer": { "type": "string" }
            },
            "required": ["steps", "final_answer"],
            "additionalProperties": false
        }
        """;

        Prompt prompt = new Prompt("8x + 7 = -23 , 请计算x的值",
                OllamaOptions.builder()
//                        .model(OllamaModel.LLAMA3_2.getName())
                        .model("deepseek-r1:8b")
                        .format(new ObjectMapper().readValue(jsonSchema, Map.class))
                        .build());

        ChatResponse response = this.ollamaChatModel.call(prompt);
        System.out.println(response.getResult().getOutput().getText());
    }

执行结果参考:

Spring Boot 接入Ollama实现与Deepseek简单对话_图示-9e226662f5c445dcb42e3804ff3a76c4.png
执行结果参考

最终计算结果正确。

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
Ollama 环境准备Ollama安装使用参考:Deepseek Windows安装和入门使用Spring Boot项目接入OllamaSpring Boot
基于上一个项目Spring Boot 接入Ollama实现与Deepseek简单对话修改,增加嵌入库配置,修改模型拉取策略为alwaysapplication.
引言    通过之前spring boot mybatis 整合的讲解: spring boot mybaties整合  (spring boot mybaties 整合 基于Java注解方式写...
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
Spring Boot 2.0 绑定properties属性资源文件 Spring Boot 2.0 读取properties配置文件值 Spring Boot 2.0获取properties配...
spring boot入门,spring boot是一个崭新的spring框架分支项目,本文讲解其属性配置相关
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
spring boot是一个崭新的spring框架分支项目,本文讲解基本的数据库配置
Spring Boot validation整合hibernate validator实现数据验证,Spring Boot validation使用说明,Spring Boot validat...
spring boot mybatis 整合使用讲解介绍,spring boot与MyBatis的使用讲解介绍。spring boot mybatis xml mapper方式的入门和通过一个简...
spring boot又一个spring框架的经典项目,本文讲解spring boot入门的环境配置以及第一个项目,Spring Boot 入门教程
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
spring boot 导入本地jar包spring boot maven 打war包时候导入本地jar包
spring boot框架整合MyBatis数据库暂时选用MySQL
spring boot RPC 框架 Hessian,本文主要讲解spring boot整合hessian实现Spring boot RPC调用和Spring boot rpc框架hessian...