在研读完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引入以下依赖——
com.theokanning.openai-gpt3-java
service
0.11.1
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": "这