Spring AI零起点搭建AI应用

news2025/1/9 11:33:31

对于从零开始使用Spring AI搭建AI应用并调用Ollama,以下是一个详细的步骤指南:

一、环境准备

  1. 安装Java开发工具:
    • 确保安装了JDK 17或更高版本。
    • 安装并配置好IDE(如IntelliJ IDEA、Eclipse等)。
  2. 配置Maven或Gradle:
    • Maven和Gradle是Java项目常用的构建工具,用于管理依赖和构建项目。确保已经安装并配置好了其中一个。
  3. 模型安装:
    • 详细安装步骤:安装步骤

二、创建Spring Boot项目

  1. 使用Spring Initializr创建项目:
    • 访问Spring Initializr网站。
    • 选择项目构建工具(Maven或Gradle)、Java版本(17或更高)、Spring Boot版本(3.x或更高)。
    • 添加必要的依赖项,如Spring Web。
  2. 手动添加Spring AI和Ollama依赖:
    • 由于Spring AI和Ollama可能还未正式发布到Maven中央仓库,因此可能需要手动添加相关依赖。
    • 在pom.xml(对于Maven项目)或build.gradle(对于Gradle项目)中添加Spring AI和Ollama的依赖项。注意,这里的依赖项可能需要从非官方仓库获取,或者等待官方发布。
      maven:
<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>
    .....
    <!-- Spring AI -->
        <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.ai</groupId>
            <artifactId>spring-ai-spring-boot-autoconfigure</artifactId>
            <version>${spring-ai.version}</version>
        </dependency>

三、配置Ollama API

  1. 启动大模型:
    • 使用ollam启动大模型,详细见:大模型。
  2. 配置application.properties或application.yml:
    • 在Spring Boot项目的application.properties或application.yml文件中添加Ollama API的配置。
spring.ai.ollama.base-url= http://localhost:11434
spring.ai.ollama.chat.options.model=<YOUR_OLLAMA_MODEL>

或者

spring:
  profiles:
    active: druid
  elasticsearch:
    uris: http://127.0.0.1:9200/      #请改成你自己的路径
  ai:
    ollama:
      base-url: http://localhost:11434
      embedding:
        model: qwen2:0.5b
      chat:
        options:
          temperature: 0.7
          model: qwen2:0.5b
        enabled: true

四、编写AI应用代码

  1. 创建Controller:
    • 编写一个Spring MVC的Controller类,用于处理与Ollama的交互请求。
    • 使用@RestController和@RequestMapping注解来定义控制器和请求路径。
    • 注入OllamaClient(或其他Ollama服务客户端)来调用Ollama服务。
@RestController
@AllArgsConstructor
@RequestMapping("/api/v1/ollama")
public class OllamaController {
 
    private final ChatClient chatClient;
 
    **
     * 文本
     */
    @GetMapping("chat")
    public String chat(@RequestParam(value = "msg", defaultValue = "") String msg) {
        if (msg == null || msg.trim().isEmpty()) {
            return "对话消息不能为空。";
        }
        return chatClient
                .prompt()
                .user(msg)
                .call()
                .content();
    }
}
  1. 配置OllamaClient:
    • 根据Ollama的SDK或API文档,配置OllamaClient的Bean。
    • 这通常涉及到创建一个配置类,并使用@Bean注解来定义OllamaClient的Bean。
@Configuration
public class OllamaConfig {
 /**
     * 设定默认角色描述
     */
    @Primary
    @Bean
    public ChatClient customerChatClient(ChatClient.Builder chatClientBuilder) {
        // 配置文件中
        String rolePrompt = """
            你是一名经验丰富且极具想象力的著名玄幻小说作者,精通所有主流和非主流的文学风格,包括但不限于武侠、仙侠、奇幻、科幻、言情、历史和悬疑。
            你熟悉小说创作的各个环节,掌握各类创作手法和最佳实践,例如人物塑造、情节设计、对话编写、环境描绘和心理刻画等。
        """;

        return chatClientBuilder
                .defaultSystem(rolePrompt)
                .defaultOptions(ChatOptions.builder().model("qwen2:0.5b").build())
                .build();
    }
}

五、测试与部署

  1. 启动应用:
    • 在IDE中运行Spring Boot应用,或者通过命令行使用mvn spring-boot:run(对于Maven项目)或./gradlew bootRun(对于Gradle项目)来启动应用。
  2. 测试API:
    • 使用Postman或其他API测试工具,向/api/v1/ollama/chat?msg=name端点发送GET请求,并在请求体中提供prompt参数。
    • 检查响应是否包含预期的AI生成内容。
  3. 部署到生产环境:
    • 当应用满足需求后,可以将其部署到生产环境,为更多用户提供服务。
    • 部署时需要注意安全性问题,如保护API Key不被泄露。

注意事项

  • 由于Ollama是一个相对较新的AI服务,其SDK和API可能会频繁更新。因此,在实际开发过程中,需 要定期查看Ollama的官方文档以获取最新的信息。
  • 在调用Ollama服务时,需要注意API的调用频率和限制。
  • 考虑到AI服务的计算资源和成本问题,需要合理设计应用的架构和逻辑,以优化性能和降低成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UI自动化测试保姆级教程--pytest详解(精简易懂)

欢迎来到啊妮莫的学习小屋 别让过去的悲伤&#xff0c;毁掉当下的快乐一《借东西的小人阿莉埃蒂》 简介 pytest是一个用于Python的测试框架, 支持简单的单元测试和复杂的功能测试. 和Python自带的UnitTest框架类似, 但是相比于UnitTest更加简洁, 效率更高. 特点 非常容易上手…

有序数据中插入不确定数据保证数据插入的位置顺序正确排序

解决有序数据中插入不确定数据保证数据插入的位置顺序正确排序 前言 java 数据库中存储自增id 有序的数据&#xff0c; 前端页面基于 id 5和 6 之间新增一条数据&#xff0c;在 id 6 和 7之间新增 2条&#xff0c;或者更复杂的场景&#xff0c;后台接口如何保存数据使得页面数…

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化 1. 输出关键信息的代码示例 日志记录方法 使用以下代码记录连接池的关键信息&#xff0c;帮助分析连接池的状态和性能瓶颈&#xff1a; import org.apache.commons.pool2.impl.GenericO…

不同方式获取音频时长 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

在 C# 中显示动画 GIF 并在运行时更改它们

您可以通过将按钮、图片框、标签或其他控件的Image属性设置为 GIF 文件 来显示动画 GIF 。&#xff08;如果您在窗体的BackgroundImage属性中显示一个&#xff0c;则不会获得动画。&#xff09; 有几种方法可以在运行时更改 GIF。 首先&#xff0c;您可以将 GIF 添加为资源。…

Element-plus、Element-ui之Tree 树形控件回显Bug问题。

需求&#xff1a;提交时&#xff0c;需要把选中状态和半选中状态 的数据id提交。如图所示&#xff1a; 数据回显时&#xff0c;会出现代码如下&#xff1a; <template><el-tree ref"treeRef" :data"data" show-checkbox node-key"id" …

【江协STM32】9-1/2/3 USART串口协议、USART外设、串口发送串口发送+接收

1. 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发全双工&#xff1a;指通信双方能够同时进行双向通信。发送线路和接收线路互不影响&#xff0c…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

25/1/8 算法笔记<强化学习> GYM环境

前几天花了好多时间在装各个仿真环境上&#xff0c;有V-rep,Pybullet,unity的Ml-agent,很多一大堆&#xff0c;好多好多问题差点逼疯我&#xff0c;可能就pybullet能玩一点&#xff0c;到之后学了机器人我再来玩它&#xff0c;最后的最后&#xff0c;我发现还得是我的gym&#…

学习随记:word2vec中归一化处理的作用

答案来自ai&#xff0c;直接复用为参考&#xff1a; 向量归一化的好处 将向量进行归一化&#xff0c;使其模长为 1&#xff08;即投射到单位圆/单位球上&#xff09;&#xff0c;在许多情况下具有实际意义和计算优势。以下是归一化的主要好处和原因&#xff1a; 1. 提高数值稳…

【C++】B2108 图像模糊处理

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目内容输入格式输出格式示例输入&#xff1a;输出&#xff1a; &#x1f4af;题目分析问题拆解 &#x1f4af;我的做法代码实现代码分析 &#x1f4af;老师的做法…

selenium+pyqt5自动化工具总结

说明&#xff1a;本工具是&#xff0c;操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的&#xff0c; 工具在后面 1. 代码结构 pycharm打开的文件下&#xff0c;再写一个子文件&#xff0c;文件导入的时候把子文件名带上 这样就可以在 外层使用命令 pyinst…

经典多模态模型CLIP - 直观且详尽的解释

对比语言-图像预训练&#xff08;CLIP&#xff09;&#xff0c;这是一种创新的多模态建模策略&#xff0c;能够创建视觉和语言的联合表示。CLIP 的效果非常出色&#xff0c;可以用于构建高度特定且性能卓越的分类器&#xff0c;而无需任何训练数据。本文将深入探讨其理论基础&a…

新时期下k8s 网络插件calico 安装

1、k8s master节点初始化完毕以后一直处于notreadey状态&#xff0c;一直怀疑是安装有问题或者是初始化有问题&#xff08;当然&#xff0c;如果真有问题要先解决这些问题&#xff09;&#xff0c;经过不断探索才发现是网络插件没有安装导致的&#xff0c;根据建议安装calico插…

【图像加密解密】Logistic混沌映射的彩色图像加密算法复现(含相关性检验)【Matlab完整源码 1期】

1、说明 本文给出详细完整代码、完整的实验报告和PPT。 环境&#xff1a;MATLAB2019a 复现文献&#xff1a;[1]黄硕.基于改进的Logistic混沌映射彩色图像加密算法[J].河南工程学院学报(自然科学版),2015,27(02):63-67. 主要目的是为了快速了解何为混沌序列、混沌序列产生、…

[AUTOSAR 基础入门] - RTE虚拟总线详解

文章目录 一、什么是RTE二、RTE的作用三、RTE对Runnables的运行支撑四、RTE与通信4.1. RTE – ECU之间通信4.2. RTE - Sender/Receiver 通信4.2.1 不使用队列&#xff08;直接访问&#xff09;4.2.2 不使用队列&#xff08;缓存访问&#xff09;4.2.3 使用队列 4.3 RTE - Clien…

Linux下文件操作相关接口

文章目录 一 文件是什么普通数据文件 二 文件是谁打开的进程用户 三 进程打开文件的相关的接口c语言标准库相关文件接口1. fopen 函数2. fread 函数3. fwrite 函数4. fclose 函数5. fseek 函数 linux系统调用接口1. open 系统调用2. creat 系统调用3. read 系统调用4. write 系…

用Python实现简单的任务自动化

目录 1. 自动发送邮件提醒 2. 自动备份文件 3. 自动下载网页内容 总结 在现代工作和生活中,任务自动化可以极大地提高效率和准确性。Python,作为一种功能强大且易于学习的编程语言,是实现任务自动化的理想选择。本文将通过几个简单而实用的案例,展示如何用Python实现任…

小程序开发-页面事件之上拉触底实战案例

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

Docker 服务、镜像、容器之命令(Docker Services, Images, and Container Commands)

Docker 服务、镜像、容器之命令 Docker是一个强大的容器化平台&#xff0c;能够帮助开发者高效地构建、部署和管理应用程序。本文将详细介绍Docker的服务命令、镜像命令和容器命令&#xff0c;帮助你快速上手Docker。 一、Docker的服务相关命令 在使用Docker之前&#xff0c…