探索AI创新的前沿——从零开始学习和运用SpringAI

news2024/11/23 23:44:20

1.SpringAI介绍

SpringAI是AI工程师的一个应用框架,它提供了一个友好的API和开发AI应用的抽象,旨在简化AI应用的开发工序。
目标是将可移植性和模块化设计等设计原则应用于AI领域的Spring生态系统,并将POJO作为应用程序的构建块推广到AI领域。
跨AI提供商的便携API支持聊天、文本到图像和嵌入模型。同时支持同步和流API选项。还支持各种定制的功能。
总的来说就是:Spring出了一个AI框架,帮助我们快速调用AI,从而实现各种功能场景。SpringAI官网链接
在这里插入图片描述

2.创建SpringBoot项目

  1. 打开IDEA新建一个项目或者模块;

  2. 在新出的弹框中选择Spring Boot;这里需要注意类型选择Maven、JDK需要选择17版本,打包方式选择jar
    在这里插入图片描述

  3. 选择需要添加的依赖项目,分别是SpringWeb和OpneAI;
    在这里插入图片描述

  4. 最后点击创建即可。

3.修改仓库地址

项目创建完毕后,如果你的项目仓库地址是阿里云镜像,则有可能导致openai依赖无法正常下载,因此需要修改pom.xml中的仓库地址。具体如下所示:

<repositories>
       <repository>
           <id>spring-milestones</id>
           <name>Spring Milestones</name>
           <url>https://repo.spring.io/milestone</url>
           <snapshots>
               <enabled>false</enabled>
           </snapshots>
       </repository>

       <repository>
           <id>spring-snapshots</id>
           <name>Spring Snapshots</name>
           <url>https://repo.spring.io/snapshot</url>
           <snapshots>
               <enabled>false</enabled>
           </snapshots>
       </repository>
   </repositories>

4.修改配置文件

spring.application.name=SpringAI-demo

# 添加openai配置文件
spring.ai.openai.api-key=
spring.ai.openai.base-url=
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7

这些配置项是用于Spring AI框架与OpenAI API集成的配置参数。以下是对每个配置项的详细解释:

1. spring.ai.openai.api-key

  • 解释:这个配置项用于指定与OpenAI API通信的API密钥。API密钥是一个私密的字符串,OpenAI使用它来识别和授权您的应用程序。
  • 示例
    spring.ai.openai.api-key=sk-XXXXXXXXXXXXXX
    

2. spring.ai.openai.base-url

  • 解释:这个配置项用于指定OpenAI API的基础URL。通常,您可以使用默认的OpenAI URL,但在某些情况下,您可能需要指定一个自定义URL(例如,使用代理或自托管的OpenAI实例)。
  • 示例
    spring.ai.openai.base-url=https://api.openai.com/v1
    

3. spring.ai.openai.chat.options.model

  • 解释:这个配置项用于指定要使用的OpenAI模型的名称。OpenAI提供了多种模型,每种模型具有不同的性能和用途。例如,gpt-3.5-turbo是一个性能良好且性价比高的模型,适合大多数对话和生成任务。
  • 示例
    spring.ai.openai.chat.options.model=gpt-3.5-turbo
    

4. spring.ai.openai.chat.options.temperature

  • 解释:这个配置项用于设置生成文本时的“温度”参数。温度控制生成文本的随机性。较高的温度值(如0.9)会使输出更随机和多样化,而较低的温度值(如0.2)会使输出更确定和集中。0.7是一个常用的平衡值。
  • 示例
    spring.ai.openai.chat.options.temperature=0.7
    

5.编写控制层代码

1.Chat Client AI

package com.xing.springaidemo.controller;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class ChatController {
    private final ChatClient chatClient;

    public ChatController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }
    @GetMapping("/hello")
    public String hello() {
        return "Hello SpringAI";
    }
    @GetMapping("/ai")
    String generation(String userInput) {
        return this.chatClient.prompt()
                .user(userInput)
                .call()
                .content();
    }
}

2.Chat Model AI

package com.xing.springaidemo.controller;

import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class ChatController {
    private final OpenAiChatModel model;
    @Autowired
    public ChatController(OpenAiChatModel model) {
        this.model = model;
    }

    @GetMapping("/hello")
    public String hello() {
        return "Hello SpringAI";
    }
    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", model.call(message));
    }
}

6.查看效果

在这里插入图片描述

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

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

相关文章

Java语法和基本结构介绍

Java语法和基本结构是Java编程的基础&#xff0c;它决定了Java代码的书写方式和程序的结构。以下是Java语法和基本结构的一些关键点&#xff1a; 1.标识符和关键字&#xff1a;Java中的标识符是用来标识变量、函数、类或其他用户自定义元素的名称。关键字是预留的标识符&#x…

文章解读与仿真程序复现思路——电工技术学报EI\CSCD\北大核心《计及台风时空特性和灵活性资源协同优化的配电网弹性提升策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

树的基本概念

树(Tree) "树"这种数据很像现实生活中的“树”&#xff0c; 这里的每个元素我们叫做“节点” 用来连线相邻节点之间的关系&#xff0c;我们叫做“父子关系” A节点就是B节点的父节点&#xff0c;B节点是A节点的‘子节点’B&#xff0c;C&#xff0c;D这三个节点的…

Dockerfile 自定义镜像

大家好 , 今天我要和大家分享一个现代软件开发中不可或缺的工具 - Docker . 在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在…

利用stream软件工具免费下载视频号视频,亲测可长期使用!

今天来说说stream软件工具下载视频号视频的工具&#xff0c;也是全网唯一利用手机下载视频号的视频方法&#xff01;经过自己的研究发现,互联网上80%都不知道的下载方法&#xff01; stream 网络数据流 stream是通过数据流可查看平台给服务器发送了什么请求&#xff0c;要服务…

BetterZip 5软件详细安装步骤(最新版软件下载)

​BetterZip是一款功能强大的Mac解/压缩软件&#xff0c;可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍&#xff0c;以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-…

混淆矩阵-召回率、精确率、准确率

混淆矩阵 1 混淆矩阵2 混淆矩阵指标2.1 准确率2.2 精确率2.3 召回率2.4 特异度2.4 假正率2.5 假负率2.6 F1 分数 3 总结 1 混淆矩阵 混淆矩阵是一种用于评估分类模型性能的重要工具。它通过矩阵形式清晰地展示了模型对样本进行分类的结果&#xff0c;帮助我们理解模型在不同类…

[C++] 从零实现一个ping服务

&#x1f4bb;文章目录 前言ICMP概念报文格式 Ping服务实现系统调用函数具体实现运行测试 总结 前言 ping命令&#xff0c;因为其简单、易用等特点&#xff0c;几乎所有的操作系统都内置了一个ping命令。如果你是一名C初学者&#xff0c;对网络编程、系统编程有所了解&#xff…

使用百度的长文本转语音API时无法下载.MP3文件

今天是学生们交作业的时候&#xff0c;结果是我最忙碌的一天&#xff0c;各种改bug。 有个学生来问&#xff1a; 我在百度提供的API代码(长文本转语音)的基础上添加了下载生成的.MP3文件的代码&#xff0c;运行之后成功建成了.MP3文件&#xff0c;但是文件的内容确实以下的报错…

监控室,屏幕显示不支持码流

1号屏&#xff0c;出现不支持码流 如下原因 老是录像机 无法关闭自动添加摄像头功能&#xff0c; 其他杂牌摄像头 会自动还ip 最终导致 ip冲突 更换ip 可以解决

openstack删除实例卡死在正在删除中

删除实例 问题描述解决办法 实验环境&#xff1b;服务器&#xff0c;openstackY版 问题描述 openstack在删除实例时一直显示正在删除中 解决办法 进入数据库修改实例状态&#xff0c;修改为错误&#xff0c;然后重新删除 首先查看对应实例id 进入数据库修改 rootcompute:~…

数据库原理(关系型数据库基本理论)——(

一、关系的概念 1.关系的定义 &#xff08;1&#xff09;域 域是一组具有相同数据类型的值的集合&#xff0c;可以理解为int[]&#xff08;int类型的数组&#xff09;是一个域。 &#xff08;2&#xff09;笛卡儿积 简单来说&#xff0c;若干个域的笛卡儿积就是将这几个域的…

算法与数据结构--决策树算法

欢迎来到 Papicatch的博客 文章目录 &#x1f349;决策树算法介绍 &#x1f348;原理 &#x1f348;核心思想包括 &#x1f34d;递归分割 &#x1f34d;选择标准 &#x1f34d;剪枝 &#x1f348;解题过程 &#x1f34d;数据准备 &#x1f34d;选择最佳分割特征 &…

pdf转图片,pdf转图片在线转

pdf转图片的方法&#xff0c;对于许多人来说可能是一个稍显陌生的操作。然而&#xff0c;在日常生活和工作中&#xff0c;我们有时确实需要将pdf文件转换为图片格式&#xff0c;以便于在特定的场合或平台上进行分享、展示或编辑。以下&#xff0c;我们将详细介绍一个pdf转成图片…

【每天学会一个渗透测试工具】dirsearch安装及使用指南

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨dirsearch介绍 dirsearch安装包百度网盘 disearch是基于Python开发的&#xff0c;因此需要确保你的系统中已经安装了pyth…

linux中acl策略+文件权限

文档归属的局限性 - 任何人只属于三种角色&#xff1a;属主 属组 其他人- 无法实现更精细的控制 acl访问策略 - 能够对个别用户个别组设置独立的权限- 大多数挂载ext3/4,xfs文件系统默认已支持 Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...setfacl [选项] u:用户名…

消息队列-分布式消息队列技术选型

Kafka Kafka 是 LinkedIn 开源的一个分布式流式处理平台&#xff0c;已经成为 Apache 顶级项目&#xff0c;早期被用来用于处理海量的日志&#xff0c;后面才慢慢发展成了一款功能全面的高性能消息队列。 流式处理平台具有三个关键功能&#xff1a; 消息队列&#xff1a;发布和…

【C++入门(1)】命名空间

一、C出世 我们先简单认识下C的来历&#xff0c;C是在C语言的基础上发展来的。 当年C的设计者Bjarne Stroustrup&#xff0c;本贾尼斯特劳斯特卢普先生设计C语言之初&#xff0c;是为了对C语言做出一些更改&#xff0c;弥补C语言在一些方面的不足&#xff0c;或者做出其他的设…

JAVA开发 选择多个文件,系统运行后自动生成ZIP压缩包

选择多个文件&#xff0c;系统运行后自动生成ZIP压缩包 实现方法1.1 代码块1.2 运行结果截取 相关知识 实现方法 案例简述&#xff1a;通过启动java代码来打开文件选择器对话框&#xff0c;用户选择确认需要进行压缩的文件&#xff0c;可一次性选择多个文件&#xff0c;选择完…