【OpenAI】API调用测试总结

api key设置

import os
import openai

# OPENAI_API_KEY是自己设定的环境变量名
openai.api_key = os.getenv("OPENAI_API_KEY")
# 明文
openai.api_key = *************

问题描述:您尝试读取环境变量 “OPENAI_API_KEY” 时,返回 None 或引发 KeyError

可能原因

  1. 环境变量未正确设置。
  2. 您在设置环境变量后没有重新启动终端或 Python 环境。

解决:

重启一下python编辑器,如果还不行可以重启一下电脑。

设置环境变量apikey详见:

小白如何设置openai api key的环境变量 - 知乎 (zhihu.com)

测试

import openai
import os

openai.api_key = os.getenv("OPENAI_API_KEY")
# key = os.getenv("OPENAI_API_KEY")
prompt = '主题: 早餐 风\n只有两句话的句子:'
response = openai.Completion.create(
    model='text-davinci-003',
    prompt=prompt,
    max_tokens=100,
    temperature=0.9,  # 新颖度
    frequency_penalty=0.5,  # 生成文本时控制模型是否应该生成高频词汇 设置为0.5,表示模型更有可能避免生成常见的单词。
)

print(response.choices[0].text)

调用两次,如果输入接口不一样,则说明调用成功。

查看所有模型

import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()

模型说明:

https://platform.openai.com/docs/models/overview

常用方法

ChatCompletionCompletion
区别专为生成对话和聊天场景而设计。是一个通用的自然语言生成接口,支持生成各种类型的文本,包括段落、摘要、建议、答案等等。
适用场景ChatCompletion接口生成的文本通常会更具有人类对话的风格和语调,可以用于智能客服、聊天机器人等场景,以及在日常聊天中帮助用户自动生成回复。Completion接口的输出更为多样化,可能会更加严谨和专业,适用于各种文本生成场景,例如文章创作、信息提取、机器翻译、自然语言问题回答等等。

token

在 API 处理提示之前,输入将分解为tokens。这些tokens并不是在单词开始或结束的地方被分割的——tokens可以包括尾随空格甚至子单词。

详见:

(8条消息) tokens是什么以及如何计算_瓦匠工人的博客-CSDN博客

ChatCompletion

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

role参数

  • system消息有助于设置聊天AI助手的行为。在上面的例子中,被指示“你是一个乐于助人的助手”。

  • user消息有助于指示助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指令。

  • assistant消息有助于存储先前的响应。它们也可以由开发人员编写,以帮助提供所需行为的示例。

上下文引用

请求是无状态的,可以存储之前问题的答案(GhatGPT的回答).

在本次请求时,将之前的答案和本次的问题一起发送给GhatGPT

import openai
import os

openai.api_key = os.environ.get("OPENAI_API_KEY")

class Conversation:
    def __init__(self, prompt, num_of_round):
        self.prompt = prompt
        self.num_of_round = num_of_round
        self.messages = []
        self.messages.append({"role": "system", "content": self.prompt})

    def ask(self, question):
        try:
            self.messages.append({"role": "user", "content": question})
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=self.messages,
                temperature=0.5,
                max_tokens=2048,
                top_p=1,
            )
        except Exception as e:
            print(e)
            return e

        message = response["choices"][0]["message"]["content"]
        self.messages.append({"role": "assistant", "content": message})

        if len(self.messages) > self.num_of_round*2 + 1:
            del self.messages[1:3] //Remove the first round conversation left.
        return message

prompt:本次的问题

num_of_round:设置最大轮次,当超过后,截取最新的答案进行发送。

返回参数 finish_reason


{
 'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
 'object': 'chat.completion',
 'created': 1677649420,
 'model': 'gpt-3.5-turbo',
 'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
 'choices': [
   {
    'message': {
      'role': 'assistant',
      'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
    'finish_reason': 'stop',
    'index': 0
   }
  ]
}


  • stop:API 返回完整的模型输出
  • length:由于参数或令牌限制max_tokens模型输出不完整
  • content_filter:由于内容过滤器中的标志而遗漏了内容
  • null:API 响应仍在进行中或不完整

详见: https://time.geekbang.com/column/article/643915

https://github.com/xuwenhao/geektime-ai-course/blob/main/06_chatgpt_and_application.ipynb

OpenAI.Completion.create

import openai
import os

openai.api_key = os.getenv("OPENAI_API_KEY")
# key = os.getenv("OPENAI_API_KEY")
prompt = '主题: 早餐 风\n只有两句话的句子:'
response = openai.Completion.create(
    model='text-davinci-003',
    prompt=prompt,
    max_tokens=100,
    temperature=0.9,  # 新颖度
    frequency_penalty=0.5,  # 生成文本时控制模型是否应该生成高频词汇 设置为0.5,表示模型更有可能避免生成常见的单词。
)

print(response.choices[0].text)

常用参数

prompt

你提问的内同或回答结果的提示文本。

数据类型可以是字符串或数组

max_tokens

生成结果时的最大token数,默认值为16。
不能超过模型的上下文长度(大多数模型的上下文长度为 2048 个token)

suffix

用于模型生成后添加一段固定的后缀。

如添加表示文本结束的符号

最终文本将输出类似的内容。

max_tokens:生成结果时的最大token数字,每个模型的上下文有不同的默认值。

temperature

生成文本的创造性

越高文本越新颖。

n

API返回模型的候选文本的数量。

会快速消耗token限额

输出如下:

for choice in response.choices:
    print(choice.text)

stream

是否以流传输回部分进度。

输出

for chunk in response:
    text = chunk["text"]
    print(text)

frequency_penalty

生成文本时控制模型是否应该生成高频词汇

设置为0, ,表示完全忽略单词的出现频率。这将导致模型更有可能生成一些常见的单词。

设置为0.5,表示模型更有可能避免生成常见的单词。

设置为1,表示模型完全避免生成常见的单词。

详见:

OpenAI.Completion.create 接口参数说明 (qq.com)

来源:

OpenAI.ChatCompletion.create 接口参数说明 - 蝈蝈俊 - 博客园 (cnblogs.com)

https://time.geekbang.com/column/article/643915

https://github.com/xuwenhao/geektime-ai-course/blob/main/06_chatgpt_and_application.ipynb

(8条消息) tokens是什么以及如何计算_瓦匠工人的博客-CSDN博客

OpenAI.Completion.create 接口参数说明 (qq.com)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

返返返

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值