ChatGpt API接口编程基础与使用

news/2024/10/31 1:35:24/

在研读完OpenAi官网文档的基础上,本文大部分内容是围绕编程方面,包括ChatGPT模型接口、图像生成接口、敏感数据拦截等,只有一小部分内容围绕如何通过temperature调参优化使用提示技巧。

一、OpenAi Api调用库
OpenAi开放了一系列模型接口API,(如果你对抖音Chat GPT,淘宝,京东,拼多多,1688平台API接口感兴趣,点&击&注册&免&测&试*)包括ChatGPT、图像生成、音频、文件、敏感数据拦截等。

若要集成这些模型接口调用到我们开发的系统里,可以通过多种编程语言的HTTP请求与openai API交互。目前OpenAi API支持多种编程语言调用,各类编程语言对应的接口调用库都能在OpenAi官网找到官方推荐的开源库。

我在本文里主要介绍Java、Go、Python、Node.js这四种,其余具体依赖方式和使用,感兴趣的童鞋可自行去官网进一步研究。

1.1、Java
官方推荐的是Theo Kanning开源的openai-java 。我用来集成到SpringBoot项目的依赖库,正好也是用了这款openai-java。

1.1.1、首先,需要在Maven引入以下依赖——

<dependency><groupId>com.theokanning.openai-gpt3-java</groupId><artifactId>service</artifactId><version>0.11.1</version>
</dependency>

1.1.2、安装完成后,可以参考以下的代码案例,通过绑定密钥来调用chatGPT模型——

@GetMapping("/ai")
public void sendMsg() throws InterruptedException {System.out.println("开始提问题~");//GPT_TOKEN即你的代码密钥OpenAiService service = new OpenAiService(GPT_TOKEN,Duration.ofSeconds(10000));CompletionRequest completionRequest = CompletionRequest.builder()//使用的模型.model("text-davinci-003")//输入提示语.prompt("你是一个工作助手,请帮忙设计一份活动策划书")//该值越大每次返回的结果越随机,即相似度越小,可选参数,默认值为 1,取值 0-2.temperature(0.5)//返回结果最大分词数.maxTokens(2048)//与temperature类似.topP(1D).build();service.createCompletion(completionRequest).getChoices().forEach(System.out::println);Thread.sleep(6000);
}

需要注意的是,若是部署在有"魔法代理"的Linux云服务商,代码需要相应做一下调整,否则是无法访问到ChatGPT的,只会出现以下异常提示:

java.net.ConnectException:Failed to connect to api.openai.com/2a03:2880:f10c:283:face:b00c:0:25de:443]
复制

当日我在这个问题上就踩了一个坑。

解决的办法很简单,只需要做以下调整——

public void send1Msg() throws InterruptedException {

System.out.println("开始提问题~");
        //需要额外设置一个能访问chatGPT的魔法访问代理

ObjectMapper mapper = defaultObjectMapper();Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8889));OkHttpClient client =  defaultClient(GPT_TOKEN,Duration.ofSeconds(10000)).newBuilder().proxy(proxy).build();Retrofit retrofit = defaultRetrofit(client, mapper);OpenAiApi api = retrofit.create(OpenAiApi.class);//将设置的代理传给OpenAiService即可OpenAiService service = new OpenAiService(api);CompletionRequest completionRequest = CompletionRequest.builder().model("text-davinci-003").prompt("你是一个工作助手,情帮忙设计一份活动策划书,设计一份活动策划书").temperature(0.5).maxTokens(2048).topP(1D).build();service.createCompletion(completionRequest).getChoices().forEach(System.out::println);Thread.sleep(6000);
}

1.2、Go
官方推荐的是sashabaranov开源的go-gpt3 。

1.2.1、需要先安装以下依赖包——

go get github.com/sashabaranov/go-openai

1.2.2、该开源项目提供的参考案例如下——

package main
import ("context""fmt"openai "github.com/sashabaranov/go-openai"
)
func main() {client := openai.NewClient("your token")resp, err := client.CreateChatCompletion(context.Background(),openai.ChatCompletionRequest{Model: openai.GPT3Dot5Turbo,Messages: []openai.ChatCompletionMessage{{Role:    openai.ChatMessageRoleUser,Content: "Hello!",},},},)if err != nil {fmt.Printf("ChatCompletion error: %v\n", err)return}fmt.Println(resp.Choices[0].Message.Content)
}

1.3、Python
先下载Python版本的open库——

$ pip install openai

安装完成后,可以参考以下的代码案例,通过绑定密钥来调用chatGPT模型——

import os
import openai# Load your API key from an environment variable or secret management service
openai.api_key = os.getenv("OPENAI_API_KEY")response = openai.Completion.create(model="text-davinci-003", prompt="Say this is a test", temperature=0, max_tokens=7)

二、密钥认证
OpenAi API是需要使用API密钥进行认证访问。密钥获取方式,需要登录https://platform.openai.com/account/api-keys页面。

接着点击【Create new secret key】生成一个新的密钥,需要注意一点是,该密钥生成时就得保存下来,否则过后是无法再进行查看的,例如,我的密钥库里先前已有一条密钥,但现在无法再去确定这条密钥是什么了。


顺便提一点是,chatGPT是有免费额度的,调用API会消耗掉这些额度,我们可以在点击左边菜单【Usage】查看——


在调用OpenAi的API请求时,需要在HTTP请求报头中包含该API密钥,例如——

Authorization: Bearer OPENAI_API_KEY

三、GPT请求设置
官方提供了一个curl通过密钥调用API的请求案例,需要将案例里的$OPENAI_API_KEY替换为自己的API密钥,在开启了代理的服务器上运行,可以基于该案例测试服务器是否能正常调用到ChatGPT——

curl https://api.openai.com/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "这


http://www.ppmy.cn/news/48073.html

相关文章

AUTOSAR存储服务之FEE换页策略介绍

概述 如下图是AUTOSAR Memory Stack的架构图,对于Memory Stack的介绍请参考AUTOSAR MemoryStack详细介绍_钢琴上的汽车软件的博客-CSDN博客 随着现在MCU携带的内置flash空间越来越大,从成本节省以及方便使用等方面考虑,在产品设计和开发过程中常用Flash EEPROM Emulation技…

Perl学习教程大纲

以下是一个可能的 Perl 学习教程大纲&#xff1a; 一、Perl 简介 Perl 的历史和发展 Perl 的特点和优点 Perl 的应用领域 二、Perl 基础语法 Perl 的变量和数据类型 Perl 的运算符和表达式 Perl 的控制结构&#xff08;if、while、for、foreach 等&#xff09; Perl 的…

Linux操作系统网络模块

Linux操作系统的网络模块是负责网络通信的核心部分。它通过实现各种协议和算法&#xff0c;使得计算机能够在网络中进行数据交换和通信。网络模块主要包括以下几个方面的功能&#xff1a; &#xff08;1&#xff09;IP协议栈&#xff1a;负责处理网络层的数据包&#xff0c;实…

Java语法理论和面经杂疑篇《十一. JDK8新特性》

目录 1. Java版本迭代概述 1.1 发布特点&#xff08;小步快跑&#xff0c;快速迭代&#xff09; 1.2 名词解释 1.3 各版本支持时间路线图 1.4 各版本介绍 1.5 JDK各版本下载链接 1.6 如何学习新特性 2. Java8新特性&#xff1a;Lambda表达式 2.1 关于Java8新特性简介 …

C++ 原型模式探秘:轻松复制对象的高效解决方案

目录标题 引言&#xff1a;原型模式概述&#xff08;Introduction: Overview of Prototype Pattern&#xff09;设计模式简介&#xff08;Brief Introduction to Design Patterns&#xff09;原型模式的定义及作用&#xff08;Definition and Purpose of Prototype Pattern&…

ijkplayer 编译增加支持更多的音视频格式

ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积&#xff0c;很多音视频的格式播放默认都是不支持的&#xff0c;需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例&#xff0c;简述ijkplayer的编译过程&#xff0c;以及为了支持更多…

好兄弟离职了,一周面试了20多场,我直呼内行

好兄弟离职之后&#xff0c;一周面试了20多场&#xff0c;最后进了阿里&#xff0c;分享一些面试经历&#xff0c;希望能对大家有帮助&#xff01; 我的面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是经常一天只吃一顿饭&#xff0c;一直奔波在路上 不扯这个…

4. VBA宏注释

完整版下载链接&#xff1a; https://download.csdn.net/download/xijinno1/87716168 注释用于记录程序逻辑和用户信息&#xff0c;其他程序员将来可以阅读并理解相同的代码无缝工作。 它包括由开发者&#xff0c;修改者以及还可以包括合并逻辑的信息。 解释器在执行时忽略注释…