百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

使用spring-ai-alibaba本地集成ollama+deepseek

ztj100 2025-03-04 15:58 10 浏览 0 评论

本文主要研究一下如何使用spring-ai-alibaba本地集成ollama+deepseek

步骤

pom.xml



   4.0.0

   com.example
   ollama-deepseek-chat
   pom
   1.0.0-SNAPSHOT

   Spring AI Alibaba Ollama DeepSeek Chat Example
   Spring AI Alibaba Ollama DeepSeek Chat Examples

   
      UTF-8
      UTF-8
      17
      17
      17

      
      1.0.0-M5

      
      1.0.0-M5.1

      
      3.4.0

      
      3.1.1
      1.3.0
      3.8.1
   

   
      ollama-deepseek-chat-model
      ollama-deepseek-chat-client
   

   
      
         
            org.springframework.boot
            spring-boot-dependencies
            ${spring-boot.version}
            pom
            import
         
         
            org.springframework.ai
            spring-ai-bom
            ${spring-ai.version}
            pom
            import
         
         
            com.alibaba.cloud.ai
            spring-ai-alibaba-starter
            ${spring-ai-alibaba.version}
         
      
   

   
      
         org.springframework.boot
         spring-boot-starter-web
      

      
         org.springframework.ai
         spring-ai-ollama-spring-boot-starter
      
   

   
      
         
            org.springframework.boot
            spring-boot-maven-plugin
            ${spring-boot.version}
         
         
            org.apache.maven.plugins
            maven-deploy-plugin
            ${maven-deploy-plugin.version}
            
               true
            
         
         
            org.apache.maven.plugins
            maven-compiler-plugin
            ${maven-compiler-plugin.version}
            
               ${java.version}
               
                  -parameters
               
            
         
      
   

   
      
         spring-milestones
         Spring Milestones
         https://repo.spring.io/milestone
         
            false
         
      
      
         aliyunmaven
         aliyun
         https://maven.aliyun.com/repository/public
      
   

   
      
         public
         aliyun nexus
         https://maven.aliyun.com/repository/public
         
            true
         
         
            false
         
      
   


主要是引入
spring-ai-ollama-spring-boot-starter

application.yaml

server:
  port: 10005

spring:
  application:
    name: spring-ai-alibaba-ollama-chat-model-example

  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:8b

这里配置ai.ollama.base-url、ai.ollama.chat.model

ChatModel

call

    @GetMapping("/simple/chat")
    public String simpleChat() {
        return ollamaChatModel.call(new Prompt(DEFAULT_PROMPT)).getResult().getOutput().getContent();
    }

使用call是阻塞一次性输出

stream

    @GetMapping("/stream/chat")
    public Flux streamChat(HttpServletResponse response) {
        // 避免返回乱码
        response.setCharacterEncoding("UTF-8");

        Flux stream = ollamaChatModel.stream(new Prompt(DEFAULT_PROMPT));
        return stream.map(resp -> resp.getResult().getOutput().getContent());
    }

使用stream配合reactor的Flux就可以实现流式输出

也可以自定义options,之后传递给Prompt

OllamaOptions customOptions = OllamaOptions.builder()
                .withTopP(0.7)
                .withModel("llama3")
                .withTemperature(0.8)
                .build();
new Prompt(DEFAULT_PROMPT, customOptions)                

ChatClient

初始化

ChatClient ollamaiChatClient = ChatClient.builder(chatModel)
            // 实现 Chat Memory 的 Advisor
            // 在使用 Chat Memory 时,需要指定对话 ID,以便 Spring AI 处理上下文。
            .defaultAdvisors(
                  new MessageChatMemoryAdvisor(new InMemoryChatMemory())
            )
            // 实现 Logger 的 Advisor
            .defaultAdvisors(
                  new SimpleLoggerAdvisor()
            )
            // 设置 ChatClient 中 ChatModel 的 Options 参数
            .defaultOptions(
                  OllamaOptions.builder()
                        .withTopP(0.7)
                        .build()
            )
            .build();

ChatClient是在ChatModel的基础上做了进一步的封装,可以设置advisor

call

   @GetMapping("/simple/chat")
   public String simpleChat() {
      return ollamaiChatClient.prompt(DEFAULT_PROMPT).call().content();
   }

使用call是阻塞一次性输出

stream

   @GetMapping("/stream/chat")
   public Flux streamChat(HttpServletResponse response) {
      response.setCharacterEncoding("UTF-8");
      return ollamaiChatClient.prompt(DEFAULT_PROMPT).stream().content();
   }

使用stream是流式输出

小结

spring-ai-alibaba提供了
spring-ai-ollama-spring-boot-starter来集成ollama,通过ai.ollama.chat.model可以指定使用本地的deepseek-r1:8b。
spring-ai-ollama-spring-boot-starter提供了基础的ChatModel以及高级版的ChatClient来调用ollama,ChatClient是在ChatModel的基础上做了进一步的封装,可以设置advisor,支持聊天记忆(Chat Memory)、工具/函数调用(Function Calling)、RAG。他们都提供了call及stream方式,call是阻塞一次性输出,stream是流式输出。

doc

  • MacBook Pro M2安装deepseek
  • spring-ai-alibaba
  • spring-ai-alibaba-examples
  • 基于开源框架Spring AI Alibaba快速构建Java应用
  • 支持 40+ 插件,Spring AI Alibaba 简化智能体私有数据集成

相关推荐

告别手动操作:一键多工作表合并的实用方法

通常情况下,我们需要将同一工作簿内不同工作表中的数据进行合并处理。如何快速有效地完成这些数据的整合呢?这主要取决于需要合并的源数据的结构。...

【MySQL技术专题】「优化技术系列」常用SQL的优化方案和技术思路

概述前面我们介绍了MySQL中怎么样通过索引来优化查询。日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如INSERT、GROUPBY等。对于这些SQL语句,我们该怎么样进行优化呢...

9.7寸视网膜屏原道M9i双系统安装教程

泡泡网平板电脑频道4月17日原道M9i采用Win8安卓双系统,对于喜欢折腾的朋友来说,刷机成了一件难事,那么原道M9i如何刷机呢?下面通过详细地图文,介绍原道M9i的刷机操作过程,在刷机的过程中,要...

如何做好分布式任务调度——Scheduler 的一些探索

作者:张宇轩,章逸,曾丹初识Scheduler找准定位:分布式任务调度平台...

mysqldump备份操作大全及相关参数详解

mysqldump简介mysqldump是用于转储MySQL数据库的实用程序,通常我们用来迁移和备份数据库;它自带的功能参数非常多,文中列举出几乎所有常用的导出操作方法,在文章末尾将所有的参数详细说明...

大厂面试冲刺,Java“实战”问题三连,你碰到了哪个?

推荐学习...

亿级分库分表,如何丝滑扩容、如何双写灰度

以下是基于亿级分库分表丝滑扩容与双写灰度设计方案,结合架构图与核心流程说明:一、总体设计目标...

MYSQL表设计规范(mysql表设计原则)

日常工作总结,不是通用规范一、表设计库名、表名、字段名必须使用小写字母,“_”分割。...

怎么解决MySQL中的Duplicate entry错误?

在使用MySQL数据库时,我们经常会遇到Duplicateentry错误,这是由于插入或更新数据时出现了重复的唯一键值。这种错误可能会导致数据的不一致性和完整性问题。为了解决这个问题,我们可以采取以...

高并发下如何防重?(高并发如何防止重复)

前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。...

性能压测数据告诉你MySQL和MariaDB该怎么选

1.压测环境为了尽可能的客观公正,本次选择同一物理机上的两台虚拟机,一台用作数据库服务器,一台用作运行压测工具mysqlslap,操作系统均为UbuntuServer22.04LTS。...

屠龙之技 --sql注入 不值得浪费超过十天 实战中sqlmap--lv 3通杀全国

MySQL小结发表于2020-09-21分类于知识整理阅读次数:本文字数:67k阅读时长≈1:01...

破防了,谁懂啊家人们:记一次 mysql 问题排查

作者:温粥一、前言谁懂啊家人们,作为一名java开发,原来以为mysql这东西,写写CRUD,不是有手就行吗;你说DDL啊,不就是设计个表结构,搞几个索引吗。...

SpringBoot系列Mybatis之批量插入的几种姿势

...

MySQL 之 Performance Schema(mysql安装及配置超详细教程)

MySQL之PerformanceSchema介绍PerformanceSchema提供了在数据库运行时实时检查MySQL服务器的内部执行情况的方法,通过监视MySQL服务器的事件来实现监视内...

取消回复欢迎 发表评论: