Как я могу сгенерировать многострочное завершение с помощью OpenAI API?
Я пытаюсь сгенерировать код, используя OpenAI API, используя OpenAI-API-dotnet, и понял, что многострочная генерация, похоже, не работает должным образом даже для предоставленного кода Python.
Детская площадка
Текст
Q: generate a standard model for Foo
A: public class Foo
{
public int Id { get; set; }
public DateTime DateCreation { get; set; }
public DateTime? DateModification { get; set; }
public int User { get; set; }
public bool Archive { get; set; }
}
Q: generate a standard model for Bar
A: public class Bar
{
public int Id { get; set; }
public DateTime DateCreation { get; set; }
public DateTime? DateModification { get; set; }
public int User { get; set; }
public bool Archive { get; set; }
}
Q: generate a standard model for MyNewModel
Генерируется движком Кюри (davinci будет генерировать ближе к тому, что я хочу)
Параметры
Temperature = 0
Top P = 1
Frequency Penalty = 0
B|est Of = 1
Stop Sequences = `A` and `Q`
Inject Start Text = A
Inject Restart Text = Q
Код
(это автоматически создается с использованием кода экспорта, предоставленного фоном)
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
start_sequence = "\nA:"
restart_sequence = "\nQ:"
response = openai.Completion.create(
engine="curie",
prompt="Q: generate a standard model for Foo\nA: public class Foo\n{\n public int Id { get; set; } \n public DateTime DateCreation { get; set; }\n public DateTime? DateModification { get; set; }\n public int User { get; set; }\n public bool Archive { get; set; }\n}\nQ: generate a standard model for Bar\nA: public class Bar\n{\n public int Id { get; set; }\n public DateTime DateCreation { get; set; }\n public DateTime? DateModification { get; set; }\n public int User { get; set; }\n public bool Archive { get; set; }\n}\nQ: generate a standard model for MyNewModel\nA: public class MyNewModel\n{\n public int Id { get; set; }\n public DateTime DateCreation { get; set; }\n public DateTime? DateModification { get; set; }\n}\n\nQ:",
temperature=0,
max_tokens=1024,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
stop=["A:", "Q:"]
)
Запуск этого кода возвращает следующий ответ:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"text": " generate a standard model for MyNewModel\n"
}
],
"created": 1622274844,
"id": "cmpl-34o5E2ORQwxxggF4FdwNGqvZDjRhO",
"model": "curie:2020-05-03",
"object": "text_completion"
}
Итак, существует разница между тем, как игровая площадка и экспортируемый код обрабатывают новые строки, и я не могу понять, как многострочный текст может быть правильно загружен и извлечен из OpenAI API.
Ответ содержит только первую строку того, что я ожидаю:
" generate a standard model for MyNewModel\n"
в отличие от того, что я получаю на детской площадке, который представляет собой многострочный ответ:
A: public class MyNewModel
{
public int Id { get; set; }
public DateTime DateCreation { get; set; }
public DateTime? DateModification { get; set; }
}
Q:
Есть идеи, как это сделать?