该代码段使用 OpenAI 的 GPT 模型生成对话回复。它使用了一个包含对话历史和指令的输入上下文,并从数据库中选择了一些先例样本。然后,它使用 OpenAI 的 ChatCompletion API 来生成对话回复。生成的回复被保存到文件中。这个过程在一个循环中进行,以确保在请求失败时进行重试。

代码首先从 'rom prompt.prompt_utils_v4_db import PromptManager' 中导入 PromptManager 类,这是一个用于管理提示的类。它还导入 openai、time 和 tqdm 库,分别用于与 OpenAI API 交互、计时和进度条。

然后,它设置 OpenAI API 密钥,并列出可用的 OpenAI 模型。它还加载了一个包含输入上下文的 JSON 文件,并从中提取前 10 个输入。

代码使用 PromptManager 类来获取提示,并在提示中添加一些先例样本。它使用 ChatCompletion API 来生成对话回复,并将回复保存到一个 JSON 文件中。

代码还包含一个循环,用于在请求失败时进行重试。

代码的具体步骤如下:

  1. 导入必要的库:
from prompt.prompt_utils_v4_db import PromptManager
import openai
import time
from tqdm import tqdm
  1. 设置 OpenAI API 密钥:
os.environ['OPENAI_API_KEY'] = "xxx"
openai.api_key = os.getenv("OPENAI_API_KEY")
  1. 列出可用的 OpenAI 模型:
print(openai.Model.list())
  1. 加载输入上下文:
with open("response.json", 'w') as f:
    json_str = json.dumps(openai.Model.list(), indent=2)
    f.write(json_str)
    f.write('
')

json_file = "alpaca_6k.json"    # scene file
f = open(json_file, 'r')
content = f.read()
input_list = json.loads(content)
f.close()

input_list = input_list[:10]    # for scene test
  1. 创建 PromptManager 实例:
alfred_db_path = "prompt/alfred_trainset_database_100.txt"  # for database test
prompt_manager = PromptManager(alfred_db_path)
  1. 循环处理每个输入:
for input_one in tqdm(input_list):
    print("================================================")
    index = input_list.index(input_one)
    save_path = os.path.join(os.getcwd(), "respond_db", str(index) + ".json")
    instruction = input_one["instruction"]
    input_context = input_one["input"]
    if not instruction:
        input_context = "List of objects: " + input_context
    else:
        input_context = "List of objects: " + input_context + "\n" + "Instruction: " + instruction

    # TODO: use langchain to generate prompt
    messages = prompt_manager.get_prompt_as_ai2thor()

    # Add fewshot_samples
    # print(f"input_context: {input_context}")
    # samples = prompt_manager.get_fewshot_sample_db(input_context, k=1)
    samples = prompt_manager.get_fewshot_sample()
    for sample_one in samples:
        messages.append({"role": "user", "content": sample_one["context"]})
        messages.append({"role": "assistant", "content": sample_one["response"]})
    messages.append({"role": "user", "content": input_context})
    time.sleep(6)
    while True:
        try:
            print(f"messages: {messages}")
            response = openai.ChatCompletion.create(
                # model="gpt-3.5-turbo-0301",
                # model="gpt-3.5-turbo-0613",
                # model="gpt-4-8k",
                model="gpt-3.5-turbo",
                messages=messages,
                temperature=0.8,  # 0.0 - 2.0
                max_tokens=2048,
            )
            break
        except:
            time.sleep(20)

    print(f"response: {response['choices'][0]['message']}")
    with open(save_path, 'w') as f:
        json_str = json.dumps(response, indent=2)
        f.write(json_str)
        f.write('
')

代码中的主要部分解释如下:

  • PromptManager 类:
    • 负责获取提示和先例样本。
    • get_prompt_as_ai2thor() 方法用于获取 AI2-THOR 格式的提示。
    • get_fewshot_sample() 方法用于获取先例样本。
  • ChatCompletion API:
    • 用于生成对话回复。
    • create() 方法用于创建新的聊天补全。
  • 循环:
    • 用于在请求失败时进行重试。
    • 使用 try...except 语句来捕获异常,并在异常发生时等待 20 秒后重新尝试。

代码的主要功能是使用 OpenAI 的 GPT 模型生成对话回复。它使用了一个包含对话历史和指令的输入上下文,并从数据库中选择了一些先例样本。然后,它使用 OpenAI 的 ChatCompletion API 来生成对话回复。生成的回复被保存到文件中。这个过程在一个循环中进行,以确保在请求失败时进行重试。

使用 OpenAI GPT 模型生成对话回复

原文地址: http://www.cveoy.top/t/topic/jCPm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录