在研读完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": "这