连接 OpenAI 模型:基础操作

在这一部分中,我们将介绍如何连接 OpenAI 模型,设置 API 密钥,并使用 Spring AI 的 ChatClient 与 OpenAI 模型进行简单的对话。Spring AI 为集成 OpenAI 模型提供了方便的工具,使得开发者能够更轻松地与 GPT 系列模型进行交互。

步骤 1:获取 OpenAI API 密钥

  1. 注册 OpenAI 账号
    首先,您需要在 OpenAI 官方网站注册一个账号:OpenAI。

  2. 获取 API 密钥
    登录 OpenAI 后,访问 API Keys 页面:OpenAI API Keys,然后点击 Create new secret key 来生成一个新的 API 密钥。

  3. 保存 API 密钥
    生成的 API 密钥仅在创建时可见,请务必保存好它。您将在后续步骤中使用该密钥进行身份验证。

步骤 2:配置 Spring Boot 项目

  1. 创建 Spring Boot 项目

    使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择如下依赖:

    • Spring Web:用于创建 REST API。
    • Spring Boot DevTools:开发时热部署。
  2. 添加 OpenAI 相关依赖

    pom.xml 文件中添加 OpenAI 相关依赖。如果您没有找到现成的 Spring AI 依赖,您可以使用 OpenAI 官方提供的 Java SDK,或者自己封装 HTTP 请求与 OpenAI API 交互。

    <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot DevTools for hot reloading --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><!-- OpenAI Java SDK --><dependency><groupId>com.theokanning</groupId><artifactId>openai-java</artifactId><version>0.11.0</version></dependency>
    </dependencies>
    

    如果没有现成的 Spring AI 依赖,您可以使用 openai-java 这个库来直接与 OpenAI 进行交互。

    运行 mvn clean install 来更新项目依赖。

步骤 3:设置 API 密钥

  1. 设置 OpenAI API 密钥

    application.propertiesapplication.yml 文件中配置您的 API 密钥:

    openai.api.key=your-api-key-here
    

    your-api-key-here 替换为您从 OpenAI 获取的 API 密钥。

  2. 配置环境变量(可选)

    为了避免硬编码 API 密钥,您也可以将 API 密钥作为环境变量传递,配置如下:

    export OPENAI_API_KEY=your-api-key-here
    

    然后在 Spring Boot 项目中通过 @Value 注解获取密钥:

    @Value("${openai.api.key}")
    private String openAiApiKey;
    

步骤 4:实现与 OpenAI 的对话功能

  1. 创建 OpenAI 服务类

    创建一个服务类 OpenAiService.java,用于通过 OpenAI API 发起请求与模型进行对话:

    package com.example.springaidemo;import com.theokanning.openai.completion.CompletionRequest;
    import com.theokanning.openai.completion.CompletionResult;
    import com.theokanning.openai.service.OpenAiService;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;@Service
    public class OpenAiService {@Value("${openai.api.key}")private String apiKey;public String getResponse(String prompt) {// 创建 OpenAI 服务对象OpenAiService service = new OpenAiService(apiKey);// 创建请求对象CompletionRequest completionRequest = CompletionRequest.builder().prompt(prompt).model("text-davinci-003") // 选择模型,例如 text-davinci-003.maxTokens(150).temperature(0.7).build();// 发送请求并获取返回结果CompletionResult result = service.createCompletion(completionRequest);// 返回模型的回答return result.getChoices().get(0).getText();}
    }
    

    这里:

    • 使用 OpenAiService 类与 OpenAI API 进行交互。
    • 通过 CompletionRequest.builder() 来设置对话模型、温度、最大令牌数等参数。
    • 返回 CompletionResult.getChoices() 获取模型的回复文本。
  2. 创建 REST 控制器

    创建一个控制器 AiController.java,通过 REST API 接收用户输入并返回 OpenAI 模型的回复:

    package com.example.springaidemo;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;@RestController
    public class AiController {@Autowiredprivate OpenAiService openAiService;@GetMapping("/chat")public String chat(@RequestParam String prompt) {// 获取 OpenAI 模型的回复return openAiService.getResponse(prompt);}
    }
    

    chat 接口中,用户通过 URL 参数 prompt 传递聊天内容,系统调用 OpenAI 模型并返回回复。

  3. 启动项目

    运行 Spring Boot 应用。访问 http://localhost:8080/chat?prompt=Hello%20OpenAI! 来测试与 OpenAI 模型的对话。

    您应该能看到 OpenAI 模型根据输入 Hello OpenAI! 给出的回复。

步骤 5:处理异常与优化

  1. 处理异常
    确保处理 API 请求过程中可能出现的错误,例如网络问题、API 限制等。可以通过 try-catch 块来捕获并处理异常。

    try {return openAiService.getResponse(prompt);
    } catch (Exception e) {return "Error: " + e.getMessage();
    }
    
  2. API 限制与费用
    OpenAI API 有使用限制和计费策略,因此在高频率调用时需要注意 API 调用次数和费用。可以考虑实现缓存机制或者限制请求频率。

总结

通过这些步骤,您可以将 OpenAI 模型集成到 Spring Boot 项目中,使用 Spring AI 和 OpenAI 提供的 API 进行基础的对话。这个过程不仅仅是通过 Spring 的易用性进行 API 调用,还通过 OpenAiService 类简化了与 OpenAI 模型交互的复杂度。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编码器和扩散模型

目录 摘要abstract1.自动编码器2.变分编码器&#xff08;VAE&#xff09;3.论文阅读3.1 介绍3.2 方法3.3 结论 4.总结参考文献 摘要 本周学习了自动编码器&#xff08;AE&#xff09;和变分自动编码器&#xff08;VAE&#xff09;的基本原理与实现&#xff0c;分析其在数据降维…

【C++】类与对象初级应用篇:打造自定义日期类与日期计算器(2w5k字长文附源码)

文章目录 一、日期类的实现1. 日期类的默认成员函数的分析与实现构造函数其它默认成员函数 2. 各种逻辑比较运算符重载3. 日期加与减天数日期加天数系列日期减天数系列日期加减天数的最后修定和- -系列 4. 日期减日期方法一方法二 5. 流插入与流提取重载流插入重载流提取重载(含…

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…

ThinkPhp伪静态设置后,访问静态资源也提示找不到Controller

ThinkPhp没有配置伪静态时&#xff0c;除了默认的IndexController能访问&#xff0c;其他路由Controller都访问不到&#xff0c;提示404错误。配置了伪静态后就解决了这个问题。 但是当我的ThinkPhp后台项目中有静态资源放在public目录&#xff08;或子目录&#xff09;中需要…

2013年蓝桥杯第四届CC++大学B组真题及代码

目录 1A&#xff1a;高斯日记&#xff08;日期计算&#xff09; 2B&#xff1a;马虎的算式&#xff08;暴力模拟&#xff09; 3C&#xff1a;第39级台阶&#xff08;dfs或dp&#xff09; 4D&#xff1a;黄金连分数&#xff08;递推大数运算&#xff09; 5E&#xff1a;前缀…

【数据分享】1929-2024年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff01;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全球气象站点…

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey &#x1f3e0; 第N个泰波那契数模型 &#x1f4cc; 题目解析 第N个泰波那契数 题目要求的是泰波那契数&#xff0c;并非斐波那契数。 &…

单片机-STM32 WIFI模块--ESP8266 (十二)

1.WIFI模块--ESP8266 名字由来&#xff1a; Wi-Fi这个术语被人们普遍误以为是指无线保真&#xff08;Wireless Fidelity&#xff09;&#xff0c;并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词&#xff0c;Wi-Fi还出现在ITAA的一个论文中。…

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明&#xff0c;虽然结果正确&#xff0c;但是&#xff0c;大模型既绕了弯路&#xff0c;又有数值计算错误。 与前面相同&#xff0c;再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…

ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)

文章目录 一、软件包管理模块1.1、功能1.2、常用参数1.3、示例 二、服务模块2.1、功能2.2、服务模块常用参数2.3、示例 三、文件与目录模块3.1、file功能3.2、常用参数3.3、示例 四、收集模块-setup4.1、setup功能4.2、示例 一、软件包管理模块 1.1、功能 Ansible 提供了多种…

高速光模块中的并行光学和WDM波分光学技术

随着AI大模型训练和推理对计算能力的需求呈指数级增长&#xff0c;AI数据中心的网络带宽需求大幅提升&#xff0c;推动了高速光模块的发展。光模块作为数据中心和高性能计算系统中的关键器件&#xff0c;主要用于提供高速和大容量的数据传输服务。 光模块提升带宽的方法有两种…

Linux命令行配置网络代理

在Linux命令行中&#xff0c;你可以使用以下方法设置网络代理服务器。 本文演示代理地址为&#xff1a;http://192.168.1.30:7890 请根据实际代理地址进行替换 临时代理 使用环境变量的方法&#xff1a; 打开终端&#xff0c;并输入以下命令&#xff1a; export http_proxyhtt…

SpringBoot3+Vue3开发学生选课管理系统

功能介绍 分三个角色登录&#xff1a;学生登录&#xff0c;老师登录&#xff0c;教务管理员登录&#xff0c;不同用户功能不同&#xff01; 1.学生用户功能 选课记录&#xff0c;查看选课记录&#xff0c;退选。选课管理&#xff0c;进行选课。通知管理&#xff0c;查看通知消…

牛客周赛 Round 78 A-C

A.时间表查询&#xff01; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/100671/A 来源&#xff1a;牛客网 题目描述 今天是2025年1月25日&#xff0c;今年的六场牛客寒假算法基础集训营中&#xff0c;前两场比赛已经依次于 20250121、20250123 举行&#xff1b;而…

Android - 通过Logcat Manager简单获取Android手机的Log

由于工作需要&#xff0c;经常需要获取Android手机的Log。 平常都是通过adb命令来获取&#xff0c;每次都要写命令。 偶然的一个机会&#xff0c;我从外网发现了一个工具 Logcat Manager&#xff0c;只需要通过简单的双击即可获取Android的Log&#xff0c;这里也分享一下。 目…

苍穹外卖-day10

苍穹外卖-day10 Spring Task Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 cron表达式 cron表达式其实就是一个字符串&#xff0c;通过cron表达式可以定义任务触发的时间 **构成规则&#xff1a;**分为6或7个域&…

一文详解Filter类源码和应用

背景 在日常开发中&#xff0c;经常会有需要统一对请求做一些处理&#xff0c;常见的比如记录日志、权限安全控制、响应处理等。此时&#xff0c;ServletApi中的Filter类&#xff0c;就可以很方便的实现上述效果。 Filter类 是一个接口&#xff0c;属于 Java Servlet API 的一部…

(2)STM32 USB设备开发-USB虚拟串口

例程&#xff1a;STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程&#xff0c;没有知识&#xff0c;全是实操&#xff0c;按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的&#xff0c;如果代码中出现一些外设的…

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述&#xff1a;当 Pod 被调度到节点上时&#xff0c;Kubernetes 会为 Pod 创建一个空目录&#xff0c;所有在该 Pod 中的容器都可以访问这个目录。特点&#xff1a; 生命周期与 Pod 绑定&#xff0c;Pod 删除时&#xff0c;数据也会丢失。适用于临时…

谈谈RTMP|RTSP播放器视频view垂直|水平反转和旋转设计

技术背景 我们在做RTMP|RTSP播放器的时候&#xff0c;有这样的技术诉求&#xff0c;有的摄像头出来的数据是有角度偏差的&#xff0c;比如“装倒了”&#xff0c;或者&#xff0c;图像存在上下或者左右反转&#xff0c;这时候&#xff0c;就需要播放器能做响应的处理&#xff…