使用 Java 代码调用 openAI 的 ChatGPT API

简介: 使用 Java 代码调用 openAI 的 ChatGPT API

前提:在 https://beta.openai.com/account/api-keys 注册一个自己的 API key.


要在Java Spring Framework中使用OpenAI API,您需要使用一个能够处理HTTP请求的库。其中一个流行的库是Spring RestTemplate库。RestTemplate是一个强大而灵活的库,可以轻松地发送HTTP请求并处理响应。


首先,您需要将Spring RestTemplate库添加到您的项目中。您可以通过将以下依赖项添加到您的build.gradle文件中来实现:


dependencies {
    // 其他依赖...
    implementation 'org.springframework.boot:spring-boot-starter-web'
}


spring-boot-starter-web依赖项包含了RestTemplate库,以及构建使用Spring进行Web应用程序所需的其他依赖项。


添加依赖项之后,您需要在应用程序中配置RestTemplate。您可以在Spring配置类或直接在应用程序类中创建一个RestTemplate bean。以下是创建RestTemplate bean的示例:


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}


上面的示例中,@Configuration注解表示该类包含Spring配置。restTemplate()方法上的@Bean注解创建了一个RestTemplate bean,可以自动装配到其他类中以进行HTTP请求。


配置好RestTemplate之后,您可以使用它向OpenAI API发送HTTP请求。您可以使用getForObject()或postForObject()等方法发送GET或POST请求。以下是使用RestTemplate进行GET请求的示例:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class OpenAIService {
    private final RestTemplate restTemplate;
    @Autowired
    public OpenAIService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    public String getOpenAIResponse() {
        String apiUrl = "https://api.openai.com/v1/your-endpoint";
        // 设置任何必要的请求参数或头部信息
        // 发送GET请求并接收响应
        String response = restTemplate.getForObject(apiUrl, String.class);
        return response;
    }
}


在上面的示例中,通过构造函数注入了RestTemplate bean到OpenAIService类中。在getOpenAIResponse()方法中,您可以根据需要自定义URL、请求参数、头部信息,并处理响应。


请记得将"https://api.openai.com/v1/your-endpoint"替换为您想要与OpenAI API通信的实际URL。


以上就是在Java Spring Framework项目中使用Spring RestTemplate库与OpenAI API交互的方法。


更详细的操作,请参考这篇文章。


build.gradle 的内容:

plugins {
 id 'java'
 id 'org.springframework.boot' version '3.0.1'
 id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.openai'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
 mavenCentral()
}
dependencies {
 implementation 'org.springframework.boot:spring-boot-starter-web'
 testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
 useJUnitPlatform()
}


Java 实现:


@Component
public class OpenAi
{
 private static final String OPENAI_URL = "https://api.openai.com/v1/images/generations";
 private final String apiKey = "<your-api-key";
 private final RestTemplate restTemplate = new RestTemplate();
 public String generateImages(String prompt, float temperature, int maxTokens, String stop, final int logprobs, final boolean echo)
 {
  HttpHeaders headers = new HttpHeaders();
  headers.setContentType(MediaType.APPLICATION_JSON);
  headers.set("Authorization", "Bearer " + apiKey);
  // We are including only some of the parameters to the json request
  String requestJson = "{\"prompt\":\"" + prompt + "\",\"n\":" + n + "}";
  HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
  ResponseEntity<String> response = restTemplate.postForEntity(OPENAI_URL, request, String.class);
  return response.getBody();
 }
}
相关文章
|
6天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
20 5
|
8天前
|
Java API 开发者
探索Java中的Lambda表达式:简洁与强大的代码实践
本文深入探讨Java中Lambda表达式的定义、用法及优势,通过实例展示其如何简化代码、提升可读性,并强调在使用中需注意的兼容性和效率问题。Lambda作为Java 8的亮点功能,不仅优化了集合操作,还促进了函数式编程范式的应用,为开发者提供了更灵活的编码方式。
|
4天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码之旅##
【8月更文挑战第62天】 Java 8的发布为开发者带来了诸多新特性,其中最引人注目的无疑是Lambda表达式。这一特性不仅让代码变得更加简洁,还极大地提升了开发的效率。本文将通过实际示例,展示如何利用Lambda表达式来优化我们的代码结构,同时探讨其背后的工作原理和性能考量。 ##
|
7天前
|
Java API 开发者
探索Java中的Lambda表达式:简化代码,提升效率
【9月更文挑战第27天】在Java 8中引入的Lambda表达式为编程带来了革命性的变化。通过简洁的语法和强大的功能,它不仅简化了代码编写过程,还显著提升了程序的执行效率。本文将深入探讨Lambda表达式的本质、用法和优势,并结合实例演示其在实际开发中的应用。无论你是Java新手还是资深开发者,都能从中获得启发,优化你的代码设计。
|
7天前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
8天前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
24 3
|
8天前
|
存储 Java 索引
使用java代码实现左右括号查找
使用java代码实现左右括号查找
|
10天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。
|
9天前
|
算法 Java
java 概率抽奖代码实现
java 概率抽奖代码实现
|
9天前
|
SQL Java Linux
Java 8 API添加了一个新的抽象称为流Stream
Java 8 API添加了一个新的抽象称为流Stream
下一篇
无影云桌面