스택큐힙리스트

OpenAI의 Completion API를 어떻게 스트리밍하나요? 본문

카테고리 없음

OpenAI의 Completion API를 어떻게 스트리밍하나요?

스택큐힙리스트 2023. 3. 28. 10:01
반응형

나는 completion via OpenAI's API의 결과를 스트리밍하고 싶습니다.

의사들은 server-sent events을 사용하기를 언급하지만, 이것은 isn't handled out of the box for flask 처럼 보이므로 클라이언트 측에서 시도해 보았습니다 (API 키가 노출되는 것을 알고 있습니다). 하지만 OpenAI API가 포스트를 요구하기 때문에 이것은 isn't compatible with the eventSource API 인 것 같습니다. 저는 fetch를 통해 이 작업을 시도해 보았지만, 예제를 통해 JSON으로 변환하려고 할 때 다음과 같은 오류가 발생합니다: Uncaught (in promise) SyntaxError: Unexpected token 'd', data: {id... is not valid JSON (이것은 유효한 JSON이 아닙니다). 전체 결과가 아닌 각 개별 스트림을 구문 분석하고 있어 보입니다.

data: {id: cmpl-5l11I1kS2n99uzNiNVpTjHi3kyied, object: text_completion, created: 1661887020, choices: [{text: to, index: 0, logprobs: null, finish_reason: null}], model: text-davinci-002}

data: {id: cmpl-5l11I1kS2n99uzNiNVpTjHi3kyied, object: text_completion, created: 1661887020, choices: [{text: AL, index: 0, logprobs: null, finish_reason: null}], model: text-davinci-002}

data: {id: cmpl-5l11I1kS2n99uzNiNVpTjHi3kyied, object: text_completion, created: 1661887020, choices: [{text: I, index: 0, logprobs: null, finish_reason: null}], model: text-davinci-002}

이것을 어떻게 해야할지 조언이나 간단한 코드 예제를 좋아했으면 좋겠습니다. 너무 오랫동안 이것 때문에 어려움을 겪고 있습니다. 감사합니다!

답변 1

마침내 작동하는 코드를 받았습니다.

import { Configuration, OpenAIApi } from openai;

import dotenv from dotenv;

dotenv.config({ override: true });

const openai = new OpenAIApi(new Configuration({ apiKey: process.env.OPENAI_KEY }));

const getText = async (prompt, callback) => {

const completion = await openai.createCompletion(

{

model: text-davinci-003,

prompt: prompt,

max_tokens: 1000,

stream: true,

},

{ responseType: stream }

);

return new Promise((resolve) => {

let result = ;

completion.data.on(data, (data) => {

const lines = data

?.toString()

?.split(\n)

.filter((line) => line.trim() !== );

for (const line of lines) {

const message = line.replace(/^data: /, );

if (message == [DONE]) {

resolve(result);

} else {

let token;

try {

token = JSON.parse(message)?.choices?.[0]?.text;

} catch {

console.log(ERROR, json);

}

result += token;

if (token) {

callback(token);

}

}

}

});

});

};

console.log(await getText(Who was the latest president of USA?, (c) => process.stdout.write(c)));

답변 2

오픈AI의 Completion API는 텍스트 생성, 자연어 이해, 감정 분석, 번역 등 다양한 자연어 처리 작업을 수행할 수 있는 강력한 기술입니다. 이제 이 기술을 이용해 실시간 스트리밍 작업을 할 수 있습니다. 이 문서에서는 오픈AI의 Completion API를 이용한 스트리밍 작업에 대해 살펴보겠습니다.

첫 번째로, 오픈AI Completion API를 사용하기 위해서는 API key가 필요합니다. API key를 획득한 후에는 Python, Java 및 Node.js와 같은 다양한 프로그래밍 언어를 사용하여 스트리밍 작업을 구현할 수 있습니다. 또한, REST API를 통해서도 작업을 진행할 수 있습니다.

두 번째로, 스트리밍 작업을 시작하기 위해서는 오픈AI의 Long Polling API를 사용해야 합니다. Long Polling API를 이용하면 API에서 새로운 데이터를 가져올 때까지 대기할 수 있습니다. 따라서 스트리밍 작업 시에도 반복적으로 API에 접근하는 것을 방지할 수 있습니다.

세 번째로, 스트리밍 작업을 구현하려면 WebSocket을 사용해야 합니다. WebSocket은 양방향 채널을 제공하여 서버와 클라이언트 사이에서 실시간으로 데이터를 전송할 수 있습니다. 이를 이용하여 오픈AI의 Completion API와 연결하여 스트리밍 작업을 시작할 수 있습니다.

네 번째로, 스트리밍 작업을 구현할 때에는 유의할 점이 있습니다. 먼저, API key를 공개하지 않도록 보안을 강화해야 합니다. 또한, 스트리밍 작업 시 많은 양의 데이터를 전송해야 하므로, 대역폭과 네트워크 처리 속도를 고려해야 합니다. 마지막으로, API에서 반환되는 데이터의 품질을 유지하기 위해서는 적절한 요청 속도를 유지해야 합니다.

이상의 내용을 요약하면, 오픈AI의 Completion API를 이용하여 스트리밍 작업을 구현하는 방법에 대해 알아보았습니다. API key를 획득하고 Long Polling API와 WebSocket을 이용하여 작업을 구현하며, 보안과 대역폭, 속도와 데이터 품질 유지를 유의해야 합니다. 이를 토대로 실시간 자연어 처리 작업을 구현하는 것이 가능해집니다.

반응형
Comments