当前位置:   article > 正文

ChatGPT API接口编程基础与使用技巧

chatgpt api

趁着这周末空闲时间,在研读完OpenAi官网文档的基础上,及时总结了这篇《ChatGPT API接口编程基础与使用技巧》

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

 

一、OpenAi Api调用库

OpenAi开放了一系列模型接口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引入以下依赖——

  1. <dependency>
  2. <groupId>com.theokanning.openai-gpt3-java</groupId>
  3. <artifactId>service</artifactId>
  4. <version>0.11.1</version>
  5. </dependency>

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

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

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

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

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

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

  1. public void send1Msg() throws InterruptedException {
  2. System.out.println("开始提问题~");
  3. //需要额外设置一个能访问chatGPT的魔法访问代理
  4. ObjectMapper mapper = defaultObjectMapper();
  5. Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8889));
  6. OkHttpClient client = defaultClient(GPT_TOKEN,Duration.ofSeconds(10000))
  7. .newBuilder()
  8. .proxy(proxy)
  9. .build();
  10. Retrofit retrofit = defaultRetrofit(client, mapper);
  11. OpenAiApi api = retrofit.create(OpenAiApi.class);
  12. //将设置的代理传给OpenAiService即可
  13. OpenAiService service = new OpenAiService(api);
  14. CompletionRequest completionRequest = CompletionRequest.builder()
  15. .model("text-davinci-003")
  16. .prompt("你是一个工作助手,情帮忙设计一份活动策划书,设计一份活动策划书")
  17. .temperature(0.5)
  18. .maxTokens(2048)
  19. .topP(1D)
  20. .build();
  21. service.createCompletion(completionRequest).getChoices().forEach(System.out::println);
  22. Thread.sleep(6000);
  23. }

1.2、Go

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

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

go get github.com/sashabaranov/go-openai

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

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. openai "github.com/sashabaranov/go-openai"
  6. )
  7. func main() {
  8. client := openai.NewClient("your token")
  9. resp, err := client.CreateChatCompletion(
  10. context.Background(),
  11. openai.ChatCompletionRequest{
  12. Model: openai.GPT3Dot5Turbo,
  13. Messages: []openai.ChatCompletionMessage{
  14. {
  15. Role: openai.ChatMessageRoleUser,
  16. Content: "Hello!",
  17. },
  18. },
  19. },
  20. )
  21. if err != nil {
  22. fmt.Printf("ChatCompletion error: %v\n", err)
  23. return
  24. }
  25. fmt.Println(resp.Choices[0].Message.Content)
  26. }

1.3、Python

先下载Python版本的open库——

$ pip install openai

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

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

1.4、Node

先下载Node版本的openai库——

$ npm install openai

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

  1. const { Configuration, OpenAIApi } = require("openai");
  2. const configuration = new Configuration({
  3. apiKey: process.env.OPENAI_API_KEY,
  4. });
  5. const openai = new OpenAIApi(configuration);
  6. const response = await openai.createCompletion({
  7. model: "text-davinci-003",
  8. prompt: "Say this is a test",
  9. temperature: 0,
  10. max_tokens: 7,
  11. });

 

二、密钥认证

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

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

image

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

image

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

Authorization: Bearer OPENAI_API_KEY

 

三、GPT请求设置

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

  1. curl https://api.openai.com/v1/chat/completions \
  2. -H "Content-Type: application/json" \
  3. -H "Authorization: Bearer $OPENAI_API_KEY" \
  4. -d '{
  5. "model": "gpt-3.5-turbo",
  6. "messages": [{"role": "user", "content": "这是一个测试请求!"}],
  7. "temperature": 0.7
  8. }'

我在自己的服务器上运行了,返回结果如下——

image

这个请求表示,查询gpt-3.5-turbo模型完成文本处理,提示语为"这是一个测试请求!",响应结果如下——

  1. {
  2. "id": "chatcmpl-75U8z1PVwDb0pA0EPhOMZVC1q7q11",
  3. "object": "chat.completion",
  4. "created": 1681541869,
  5. "model": "gpt-3.5-turbo",
  6. "usage": {
  7. "prompt_tokens": 14,
  8. "completion_tokens": 46,
  9. "total_tokens": 60
  10. },
  11. "choices": [{
  12. "message": {
  13. "role": "assistant",
  14. "content": "您好,这是一个回复测试请求的信息。请问您有什么需要测试的具体内容或问题吗?我会尽力帮助您解决问题。"
  15. },
  16. "finish_reason": "stop",
  17. "index": 0
  18. }]
  19. }

Request body各字段说明——

image

 

四、开发中添加敏捷信息审核层

首先得提一下2023年4月11日网信发布的一份《生成式人工智能服务管理办法(征求意见稿)》,里面第四条明确表示,生成式人工智能算法或服务应当遵守法律法规的要求,尊重社会公德、公序良俗。这就意味着,未来在使用这类Ai接口进行输入/输出时,必须针对内容进行违规内容信息的过滤。

其实OpenAi有针对这块内容审核提供了开放的API接口,可以免费使用。

若想在聊天API的输出中添加一个敏捷信息拦截层,就可以在输入/输出信息时,调用该接口。例如,存在这样一份API接口调用案例——

  1. curl https://api.openai.com/v1/moderations \
  2. -X POST \
  3. -H "Content-Type: application/json" \
  4. -H "Authorization: Bearer $OPENAI_API_KEY" \
  5. -d '{"input": "测试一句话"}'

响应返回内容如下——

  1. {
  2. "id": "modr-75k0nHCOc0SR88t9xCNBHctPDMO8d",
  3. "model": "text-moderation-004",
  4. "results": [{
  5. "flagged": false,
  6. "categories": {
  7. "sexual": false,
  8. "hate": false,
  9. "violence": false,
  10. "self-harm": false,
  11. "sexual/minors": false,
  12. "hate/threatening": false,
  13. "violence/graphic": false
  14. },
  15. "category_scores": {
  16. "sexual": 0.00012780998076777905,
  17. "hate": 0.00013749735080637038,
  18. "violence": 1.4757171129531343e-07,
  19. "self-harm": 5.410008441231184e-09,
  20. "sexual/minors": 1.5541245375061408e-06,
  21. "hate/threatening": 6.1530336381565576e-09,
  22. "violence/graphic": 2.9580141003293647e-08
  23. }
  24. }]
  25. }
  • flagged:如果模型将内容属于违反OpenAI的使用策略,则设置为true,否则为false。
  • categories:包含每个类别二进制使用策略违反标志的字典。对于每个字段值,如果模型将相应类别标记为违规则该值为true,否则为false。
  • category_scores:包含模型输出的每个类别原始分数的字典,表示模型是否相信输入了违反OpenAI对类别的策略。该值介于0和1之间,其中值越大表示置信度越高。注意一点是,分数不应被解释为概率。

categories和category_scores具体字段值对应的说明如下表格所示——

image

官方表示目前该审核接口仍在不断努力提高分类器的准确性,特别是仇恨、自残和暴力等内容的分类。值得注意一点是,对非英语语言的支持目前是有限的,也就是说,中文的审核支持比较有限。

除了使用OpenAi提供的输入/输出信息审核接口,还可以开发敏感词过滤系统,将传给ChatGPT以及响应返回的数据,进行敏感词过滤。

四、模型调用

4.1、模型列表

OpenAi提供了多种模型,可以通过执行以下查询指令,查询出API支持的模型类型——

curl https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"

出现出来的结果如下,应该有数十个模型,我用的最多是gpt-3.5-turbo,这是目前比较标准的型号版本——

  1. {
  2. "data": [
  3. {
  4. "id": "text-davinci-003",
  5. "object": "model",
  6. "created": 1669599635,
  7. "owned_by": "openai-internal",
  8. "permission": [...],
  9. "root": "text-davinci-003",
  10. "parent": null
  11. },
  12. {
  13. "id": "gpt-3.5-turbo",
  14. "object": "model",
  15. "created": 1677610602,
  16. "owned_by": "openai",
  17. "permission": [...],
  18. "root": "gpt-3.5-turbo",
  19. "parent": null
  20. },
  21. .....
  22. ],
  23. "object": "list"
  24. }

4.2、查询指定 GPT模型详情

可以基于以上模型类表接口,查询出具体模型实例的详情,包括模型的基本信息、所有者及权限等——

  1. curl https://api.openai.com/v1/models/gpt-3.5-turbo \
  2. -H "Authorization: Bearer $OPENAI_API_KEY"

查询出gpt-3.5-turbo的模型详情如下——

  1. {
  2. "id": "gpt-3.5-turbo",
  3. "object": "model",
  4. "created": 1677610602,
  5. "owned_by": "openai",
  6. "permission": [
  7. {
  8. "id": "modelperm-BmdmcAa1aQwToDxri3DFbZw9",
  9. "object": "model_permission",
  10. "created": 1681343255,
  11. "allow_create_engine": false,
  12. "allow_sampling": true,
  13. "allow_logprobs": true,
  14. "allow_search_indices": false,
  15. "allow_view": true,
  16. "allow_fine_tuning": false,
  17. "organization": "*",
  18. "group": null,
  19. "is_blocking": false
  20. }
  21. ],
  22. "root": "gpt-3.5-turbo",
  23. "parent": null
  24. }

GPT-3.5模型可以理解和生成自然语言或代码,在GPT-3.5版本当中,最有能力和最具成本收益的模型是GPT-3.5-turbo,它是基于原有的3.5版本模型进行的迭代优化,可以更好地完成传统任务。目前最新模型是GPT-4,具有更先进的常识和推理能力,但还没有开放免费API接口。

以下是GPT-3.5模型列表介绍——

image

官方推荐使用GPT-3.5-turbo而不是其他GPT-3.5模型,因为它的成本更低。gpt-3.5-turbo的性能与text-davinci-003相似,但每个token的价格是它的10%,官方推荐在大多数情况下使用gpt-3.5-turbo。

五、图像生成调用

给定一个提示和/或一个输入图像,模型会生成一个新的图像,例如,我想让它画一只胖猫——

  1. curl https://api.openai.com/v1/images/generations \
  2. -H "Content-Type: application/json" \
  3. -H "Authorization: Bearer $OPENAI_API_KEY" \
  4. -d '{
  5. "prompt": "画一只可爱的大胖猫",
  6. "n": 2,
  7. "size": "1024x1024"
  8. }'

然后,它确实给我画了两张图——

  1. {
  2. "created": 1681547551,
  3. "data": [
  4. {
  5. "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-LqdibnOuIlW8xc7Lfh2REsXo/user-6D0yIziBFiX73mCUwNwOwczJ/img-jKdFuRLINlkCeFL1QCWFZtId.png?st=2023-04-15T07%3A32%3A31Z&se=2023-04-15T09%3A32%3A31Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-04-15T08%3A28%3A22Z&ske=2023-04-16T08%3A28%3A22Z&sks=b&skv=2021-08-06&sig=Rbe8x3ZdEcoScQOXrkxGAe1G8rGOrO%2B4wzmzZwotP68%3D"
  6. },
  7. {
  8. "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-LqdibnOuIlW8xc7Lfh2REsXo/user-6D0yIziBFiX73mCUwNwOwczJ/img-00FKmNWnDm5p21CS89UPm56T.png?st=2023-04-15T07%3A32%3A31Z&se=2023-04-15T09%3A32%3A31Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-04-15T08%3A28%3A22Z&ske=2023-04-16T08%3A28%3A22Z&sks=b&skv=2021-08-06&sig=KVsxjwPIsJFC0cFEjRqVPrcckGxipp5BiiUmayPmqMM%3D"
  9. }
  10. ]
  11. }

通过图url链接,可以查看图片,若是在代码里,可以直接丢给里显示出图片。不过,我让openai给我画的是一只胖猫,图一我还能理解,但是,图二,这个猫屁股着实有些离谱了(自带

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/128166
推荐阅读
相关标签