使用spring-ai快速对接ChatGpt

devtools/2024/9/26 1:24:04/

什么是spring-ai

该Spring AI项目旨在简化包含人工智能功能的应用程序的开发,避免不必要的复杂性。

该项目从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,但 Spring AI 并不是这些项目的直接移植。该项目的成立相信下一波生成式人工智能应用程序不仅适用于 Python 开发人员,而且将在许多编程语言中普遍存在。

Spring AI 的核心提供了抽象,作为开发 AI 应用程序的基础。这些抽象有多种实现,可以通过最少的代码更改轻松进行组件交换。

Spring AI 提供以下功能:

  • 支持所有主要模型提供商,例如 OpenAI、Microsoft、Amazon、Google 和 Huggingface。
  • 支持的模型类型包括“聊天”和“文本到图像”,还有更多模型类型正在开发中。
  • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉访问模型特定功能。
  • AI 模型输出到 POJO 的映射。
  • 支持所有主要矢量数据库提供商,例如 Azure 矢量搜索、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate
  • 跨 Vector Store 提供商的可移植 API,包括同样可移植的新颖的类似 SQL 的元数据过滤器 API。
  • 函数调用
  • AI 模型和向量存储的 Spring Boot 自动配置和启动器。
  • 数据工程的 ETL 框架

OpenAI 聊天

Spring AI 支持 OpenAI 的 AI 语言模型 ChatGPT。由于创建了行业领先的文本生成模型和嵌入,ChatGPT 在激发人们对人工智能驱动的文本生成的兴趣方面发挥了重要作用。

先决条件

需要使用 OpenAI 创建 API (访问此网址需要魔法)来访问 ChatGPT 模型。在OpenAI 注册页面创建帐户并在API 密钥页面生成令牌(生成令牌需要国外手机号验证码:国外免费接码平台推荐_国外手机号短信验证码平台-CSDN博客)。 Spring AI 项目定义了一个名为的配置属性,应该将其设置为从 openai.com 获取spring.ai.openai.api-key的值。

第一步:打开专业版idea并新建项目

第二步:添加这二个依赖项后点击创建

第三步:在application.properties配置相关东西

spring.application.name=demo_aispring.ai.openai.api-key=这里写自己申请的gpt的api
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7

第四步:新建个 ChatController的Java类

package org.example.demo_ai;import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatClient;
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 reactor.core.publisher.Flux;import java.util.Map;@RestController
public class ChatController {private final OpenAiChatClient chatClient;@Autowiredpublic ChatController(OpenAiChatClient chatClient) {this.chatClient = chatClient;}@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", chatClient.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {Prompt prompt = new Prompt(new UserMessage(message));return chatClient.stream(prompt);}
}

第五步:运行springboot项目,并在Postman测试接口

注意

还有更多的属性可以自行前往官网查看


http://www.ppmy.cn/devtools/4350.html

相关文章

python获取键盘上哪个键按下

当在Windows系统中&#xff0c;termios模块并不可用&#xff0c;因为termios是Unix系统&#xff08;包括Linux和macOS&#xff09;上的一个用于终端输入输出信息的接口&#xff0c;而Windows没有这样的系统调用。 如果你需要在Windows上使用类似termios的功能&#xff0c;你可…

深入了解Java Stream中的distinct()方法:按一个或多个指定对象字段进行去重

深入了解Java Stream中的distinct()方法&#xff1a;按一个或多个指定对象字段进行去重 在Java编程中&#xff0c;Stream API为我们提供了丰富的操作方法来处理集合数据。其中&#xff0c;distinct()方法是一种常用的方法&#xff0c;用于去除Stream中的重复元素。然而&#x…

个人网站开(九)五系统前端react

前言 为什么要开始学react呢,感觉很大原因是因为本人最近拿到了团子的暑期实习offer,想着先熟悉熟悉技术栈,所以开始学习react了 正文 总之先开篇讲一下我的react学习方法,先大概看了B站的视频,然后就是去看网上的教程,最后就是直接开写,毕竟实践出真知,这个系统主要做的是文…

电感与磁珠

电感是什么&#xff1f; 电感会通过产生感应电动势的方式来阻碍电流的变化&#xff0c;电流变化率越大&#xff0c;产生的感应电动势越大阻碍电流效果越明显。 [一]品质因数Q: 电感的品质因数Q值定义&#xff1a;电感的Q值也叫作品质因数&#xff0c;其为无功功率除以有功功率…

Redis系列2:数据持久化提高可用性

1 介绍 从上一篇的 《深刻理解高性能Redis的本质》 中可以知道&#xff0c; 我们经常在数据库层上加一层缓存&#xff08;如Redis&#xff09;&#xff0c;来保证数据的访问效率。 这样性能确实也有了大幅度的提升&#xff0c;但是本身Redis也是一层服务&#xff0c;也存在宕机…

公园高速公路景区校园IP网络广播音柱SIP音柱

公园高速公路景区校园IP网络广播音柱SIP音柱 适用于学校、车站、教堂、工厂、仓库、公园停车场及露天市场高速公路等场所播放录制语音文件或背景音乐节目&#xff0c;专业一体化音箱设计&#xff0c;高强度防水设计&#xff0c;符合IP54防护等认证&#xff0c;数字化产品&…

HCIP的学习(8)

OSPF数据报文 OSPF头部信息&#xff08;公共固定&#xff09; 版本&#xff1a;OSPF版本&#xff0c;在IPv4网络中版本字段恒定为数值2&#xff08;v1属于实验室版本&#xff0c;v3属于IPv6&#xff09;类型&#xff1a;代表具体是哪一种报文&#xff0c;按照1~5排序&#xff…

constinit

类的静态成员在类内初始化 class Test{ public: const static int var1; } 这个变量的值不可修改&#xff1b;