连接 OpenAI 模型:基础操作

news2025/1/27 7:16:48

在这一部分中,我们将介绍如何连接 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 {
    
        @Autowired
        private 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.coloradmin.cn/o/2283835.html

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

相关文章

数据分箱 baggingboosting onehot独热编码 woe编码 sklearn的ensemble(集成学习)

目录 数据分箱就是将连续变量离散化。 bagging&boosting onehot独热编码 独热编码的结果如下&#xff1a; woe编码 WOE编码的基本原理 步骤一&#xff1a;计算WOE 步骤二&#xff1a;应用WOE WOE编码的优点 示例 数据示例 步骤一&#xff1a;计算每个类别的违约…

企业微信开发010_使用WxJava企业微信开发框架_封装第三方应用企业微信开发003_并且实现多企业授权访问---企业微信开发012

继续来看吧,上一节,已经把config部分,代码都拿过来了: 并且把企业微信第三方应用开发部分,对应的config的配置,mutiltp 代码拿过来了,并且把yml中的配置也给出了. 然后,这里说一下config中的内容,到时候自己看也可以看懂 其实就是封装了,当系统启动,加载企微模块,这个时候,会…

Office2021下载与安装保姆级教程【Office Tool Plus】

Office Tool Plus安装Office2021 下载Office Tool Plus安装OfficeⅠ. 清除旧版本Ⅱ. 配置安装参数Ⅲ. 安装许可证Ⅳ. 激发&#xff08;JH&#xff09;Office 本文介绍使用Office Tool Plus工具下载、安装、部署Office 2021全过程。 下载Office Tool Plus OfficeToolPlus是一个…

Unity在WebGL中拍照和录视频

原工程地址https://github.com/eangulee/UnityWebGLRecoder Unity版本2018.3.6f1&#xff0c;有点年久失修了 https://github.com/xue-fei/Unity.WebGLRecorder 修改jslib适配了Unity2021 效果图 录制的视频 Unity在WebGL中拍照和录视频

【外文原版书阅读】《机器学习前置知识》1.线性代数的重要性,初识向量以及向量加法

目录 ​编辑 ​编辑 1.Chapter 2 Why Linear Algebra? 2.Chapter 3 What Is a Vector? 个人主页&#xff1a;Icomi 大家好&#xff0c;我是Icomi&#xff0c;本专栏是我阅读外文原版书《Before Machine Learning》对于文章中我认为能够增进线性代数与机器学习之间的理解的…

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架&#xff0c;设计目的是简化搭建及开发过程&#xff0c;并不是对Spring功能上的增强&#xff0c;而是提供了一种快速使用Spr…

【PyTorch】4.张量拼接操作

个人主页&#xff1a;Icomi 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&#xff0c;能够处理复杂的数据模式。通过 PyTorch&#xff0…

新电脑安装系统找不到硬盘原因和解决方法来了

有不少网友反馈新电脑采用官方u盘方式装win10或win100出现找不到硬盘是怎么回事&#xff1f;后来研究半天发现是bios中开启了rst(vmd)模式。如果关闭rst模式肯定是可以安装的&#xff0c;但这会影响硬盘性能&#xff0c;有没有办法解决开启rst模式的情况安装win10或win11呢&…

「 机器人 」仿生扑翼飞行器中的“被动旋转机制”概述

前言 在仿生扑翼飞行器的机翼设计中,模仿昆虫翼的被动旋转机制是一项关键技术。其核心思想在于:机翼旋转角度(攻角)并非完全通过主动伺服来控制,而是利用空气动力和惯性力的作用,自然地实现被动调节。以下对这种设计的背景、原理与优势进行详细说明。 1. 背景:昆虫的被动…

Android GLSurfaceView 覆盖其它控件问题 (RK平台)

平台 涉及主控: RK3566 Android: 11/13 问题 在使用GLSurfaceView播放视频的过程中, 增加了一个播放控制面板, 覆盖在视频上方. 默认隐藏setVisibility(View.INVISIBLE);点击屏幕再显示出来. 然而, 在RK3566上这个简单的功能却无法正常工作. 通过缩小视频窗口可以看到, 实际…

【C++】类和对象(五)

1、初始化列表 作用&#xff1a;C提供了初始化列表语法&#xff0c;用来初始化属性。 语法&#xff1a; 构造函数&#xff08;&#xff09;&#xff1a;属性1&#xff08;值1&#xff09;&#xff0c;属性2&#xff08;值2&#xff09;...{}示例&#xff1a; #include<i…

Maven的下载安装配置

maven的下载安装配置 maven是什么 Maven 是一个用于 Java 平台的 自动化构建工具&#xff0c;由 Apache 组织提供。它不仅可以用作包管理&#xff0c;还支持项目的开发、打包、测试及部署等一系列行为 Maven的核心功能 项目构建生命周期管理&#xff1a;Maven定义了项目构建…

Mysql主从复制+MHA实验笔记[特殊字符]

目录 基本概念 工作原理 优势 环境准备&#xff1a;四台centos-其中三台mysql&#xff0c;一台MHA 配置一主两从 安装MHA 配置无密码认证 配置MHA 模拟master故障 基本概念 MySQL 主从复制&#xff1a;是 MySQL 数据库中实现数据冗余、数据备份和高可用性的重要技术手…

面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…

Python中容器类型的数据(上)

若我们想将多个数据打包并且统一管理&#xff0c;应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列 (sequence) 是一种可迭代的、元素有序的容器类型的数据。 序列包括列表 (list)…

[Qt]系统相关-网络编程-TCP、UDP、HTTP协议

目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…

信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图

这一周发文少&#xff0c;不是我在偷懒&#xff0c;而是在和信管的视频及千题通关“”浴血奋战 &#xff0c;特别是第8章卡了我很久&#xff0c;因为内容实在太多&#xff0c;精讲视频估计都差不多4个小时了&#xff0c;还好终于在春节前拿下&#xff0c;提供给小分队的同学&am…

npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported

vue 启动项目时&#xff0c;npm run serve 报下面的错&#xff1a; error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…

Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)

本文讲Excel中如何整理美化数据的实例&#xff0c;以及CtrlT 超级表格的常用功能。 目录 1&#xff0c;Excel中整理美化数据 1-1&#xff0c;设置间隔行颜色 1-2&#xff0c;给总销量列设置数据条 1-3&#xff0c;根据总销量设置排序 1-4&#xff0c;加一个销售趋势列 2&…

力扣算法题——11.盛最多水的容器

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解析思路…