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

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

ztj100 2025-03-04 15:58 20 浏览 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 简化智能体私有数据集成

相关推荐

30天学会Python编程:16. Python常用标准库使用教程

16.1collections模块16.1.1高级数据结构16.1.2示例...

强烈推荐!Python 这个宝藏库 re 正则匹配

Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。...

Python爬虫中正则表达式的用法,只讲如何应用,不讲原理

Python爬虫:正则的用法(非原理)。大家好,这节课给大家讲正则的实际用法,不讲原理,通俗易懂的讲如何用正则抓取内容。·导入re库,这里是需要从html这段字符串中提取出中间的那几个文字。实例一个对...

Python数据分析实战-正则提取文本的URL网址和邮箱(源码和效果)

实现功能:Python数据分析实战-利用正则表达式提取文本中的URL网址和邮箱...

python爬虫教程之爬取当当网 Top 500 本五星好评书籍

我们使用requests和re来写一个爬虫作为一个爱看书的你(说的跟真的似的)怎么能发现好书呢?所以我们爬取当当网的前500本好五星评书籍怎么样?ok接下来就是学习python的正确姿...

深入理解re模块:Python中的正则表达式神器解析

在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...

如何使用正则表达式和 Python 匹配不以模式开头的字符串

需要在Python中使用正则表达式来匹配不以给定模式开头的字符串吗?如果是这样,你可以使用下面的语法来查找所有的字符串,除了那些不以https开始的字符串。r"^(?!https).*&...

先Mark后用!8分钟读懂 Python 性能优化

从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...

Python“三步”即可爬取,毋庸置疑

声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块importreimportrequests#第二步获取你想爬取的网页地址,发送请求,获取网页内...

简单学Python——re库(正则表达式)2(split、findall、和sub)

1、split():分割字符串,返回列表语法:re.split('分隔符','目标字符串')例如:importrere.split(',','...

Lavazza拉瓦萨再度牵手上海大师赛

阅读此文前,麻烦您点击一下“关注”,方便您进行讨论和分享。Lavazza拉瓦萨再度牵手上海大师赛标题:2024上海大师赛:网球与咖啡的浪漫邂逅在2024年的上海劳力士大师赛上,拉瓦萨咖啡再次成为官...

ArkUI-X构建Android平台AAR及使用

本教程主要讲述如何利用ArkUI-XSDK完成AndroidAAR开发,实现基于ArkTS的声明式开发范式在android平台显示。包括:1.跨平台Library工程开发介绍...

Deepseek写歌详细教程(怎样用deepseek写歌功能)

以下为结合DeepSeek及相关工具实现AI写歌的详细教程,涵盖作词、作曲、演唱全流程:一、核心流程三步法1.AI生成歌词-打开DeepSeek(网页/APP/API),使用结构化提示词生成歌词:...

“AI说唱解说影视”走红,“零基础入行”靠谱吗?本报记者实测

“手里翻找冻鱼,精心的布局;老漠却不言语,脸上带笑意……”《狂飙》剧情被写成歌词,再配上“科目三”背景音乐的演唱,这段1分钟30秒的视频受到了无数网友的点赞。最近一段时间随着AI技术的发展,说唱解说影...

AI音乐制作神器揭秘!3款工具让你秒变高手

在音乐创作的领域里,每个人都有一颗想要成为大师的心。但是面对复杂的乐理知识和繁复的制作过程,许多人的热情被一点点消磨。...

取消回复欢迎 发表评论: