赞
踩
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
。
可能原因:
解决:
重启一下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
ChatCompletion | Completion | |
---|---|---|
区别 | 专为生成对话和聊天场景而设计。 | 是一个通用的自然语言生成接口,支持生成各种类型的文本,包括段落、摘要、建议、答案等等。 |
适用场景 | ChatCompletion接口生成的文本通常会更具有人类对话的风格和语调,可以用于智能客服、聊天机器人等场景,以及在日常聊天中帮助用户自动生成回复。 | Completion接口的输出更为多样化,可能会更加严谨和专业,适用于各种文本生成场景,例如文章创作、信息提取、机器翻译、自然语言问题回答等等。 |
在 API 处理提示之前,输入将分解为tokens。这些tokens并不是在单词开始或结束的地方被分割的——tokens可以包括尾随空格甚至子单词。
详见:
(8条消息) tokens是什么以及如何计算_瓦匠工人的博客-CSDN博客
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?"}
]
)
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:设置最大轮次,当超过后,截取最新的答案进行发送。
{ '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 } ] }
详见: https://time.geekbang.com/column/article/643915
https://github.com/xuwenhao/geektime-ai-course/blob/main/06_chatgpt_and_application.ipynb
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)
常用参数
你提问的内同或回答结果的提示文本。
数据类型可以是字符串或数组
生成结果时的最大token数,默认值为16。
不能超过模型的上下文长度(大多数模型的上下文长度为 2048 个token)
用于模型生成后添加一段固定的后缀。
如添加表示文本结束的符号
最终文本将输出类似的内容。
max_tokens:生成结果时的最大token数字,每个模型的上下文有不同的默认值。
生成文本的创造性
越高文本越新颖。
API返回模型的候选文本的数量。
会快速消耗token限额
输出如下:
for choice in response.choices:
print(choice.text)
是否以流传输回部分进度。
输出
for chunk in response:
text = chunk["text"]
print(text)
生成文本时控制模型是否应该生成高频词汇
设置为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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。