Как использовать свойство OpenAI stream=true в ответе Django Rest Framework и при этом сохранить возвращаемое содержимое?
Я пытаюсь использовать свойство stream=true следующим образом.
completion = openai.Completion.create(
model="text-davinci-003",
prompt="Write me a story about dogs.",
temperature=0.7,
max_tokens=MAX_TOKENS,
frequency_penalty=1.0,
presence_penalty=1.0,
stream=True,
)
К сожалению, я не знаю, что делать дальше, чтобы вернуть его в мой фронтенд React. Обычно я использовал стандартные объекты ответа, задавая статус и serializer.data в качестве данных. Из прочитанного в интернете, кажется, что я должен использовать StreamingHttpResponse
, но я не уверен, как интегрировать это с объектом-итератором completion
, и фактически сохранить выведенные данные после завершения потоковой передачи, поскольку представление завершится после возврата итератора в конечную точку. Есть помощь?
Ответ оказался таким: я думал, что подхожу к этому неправильно. Используйте websockets! А не StreamingHttpResponse.
Вы можете использовать StreamingHttpResponse. Обратите внимание, что большинство api клиентов, таких как postman, не видят его в реальном времени, но вы можете увидеть его в терминале. Если вы хотите использовать его для react, вам придется использовать fetch api.
@api_view(["POST"])
def generate_names(request):
if request.method == 'POST':
# Parse the request body and extract the prompt
prompt = request.data.get('prompt')
# Set up the OpenAI API client
openai.api_key = OPENAI_API_KEY
# Define a generator function to stream the response
def generate_response():
for chunk in openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{
"role": "user",
"content": prompt
}],
stream=True,
):
content = chunk["choices"][0].get("delta", {}).get("content")
if content is not None:
yield content
# Return a streaming response to the client
return StreamingHttpResponse(generate_response(), content_type='text/event-stream'))
# Return a JSON error if the request method is not POST
return JsonResponse({'error': 'Method not allowed.'}, status=405)
Чтобы увидеть его в терминале, используйте эту команду Curl http://127.0.0.1:8000/api/v1/askkk --header "Content-Type: application/json" --data '{"prompt": "How do I set up payment invoices?"}'