[Node.js_4기] TIL : OpenAI_v4에서 생긴 버전 호환성 문제 (24/03/28)
2024. 3. 28. 19:57ㆍ공부/내배캠 TIL
목차
1. 학습 내용
검색을 통해 찾은 다음과 같은 openai.config.ts
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { JwtService } from '@nestjs/jwt';
import { Configuration, OpenAIApi, ChatCompletionRequestMessage } from 'openai';
@Injectable()
export class GptService {
private readonly openAiApi: OpenAIApi;
constructor(
private configService: ConfigService,
private jwtService: JwtService,
) {
const configuration = new Configuration({
organization: this.configService.get<string>('CHAT_GPT_ORGANIZATION_ID'),
apiKey: this.configService.get<string>('CHAT_GPT_API_KEY'),
});
this.openAiApi = new OpenAIApi(configuration);
}
}
하지만, openai 라이브러리에서 Configuration, OpenAIApi 을 찾을 수 없다는 오류 발생,
라이브러리를 확인했더니 정말로 해당하는 클래스가 존재하지 않음을 확인했습니다.
2. 내용 정리
v3 to v4 Migration Guide · openai/openai-node · Discussion #217 (github.com)
어느 굉장한 서양 형님의 정리.
요약하자면, 라이브러리가 업데이트 되면서 구성에 변화가 생겼기 때문에, 이전의 방법에서 필요로 하던 Config어쩌고, AIApi가 필요하지 않게 되었고, OpenAI만을 생성자로 가져오면 되게 되었다는 내용입니다.
이 외에도 내용들이 있지만, 지금 찾아낸 문제는 위와 같으므로 넘기겠습니다.
해결 방법도 제시되어 있습니다.
3. 예제
<initialze>
// Old
import { Configuration, OpenAIApi } from "openai";
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
// New
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY // This is also the default, can be omitted
});
<chatCompletion>
// Old
const chatCompletion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{role: "user", content: "Hello world"}],
});
console.log(chatCompletion.data.choices[0].message);
// New
const chatCompletion = await openai.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [{"role": "user", "content": "Hello!"}],
});
console.log(chatCompletion.choices[0].message);
<streaming chatCompletion>
// Old
// Not supported
// New
const stream = await openai.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [{"role": "user", "content": "Hello!"}],
stream: true,
});
for await (const part of stream) {
console.log(part.choices[0].delta);
}
<completion>
// Old
const completion = await openai.createCompletion({
model: "text-davinci-003",
prompt: "This story begins",
max_tokens: 30,
});
console.log(completion.data.choices[0].text);
// New
const completion = await openai.completions.create({
model: "text-davinci-003",
prompt: "This story begins",
max_tokens: 30,
});
console.log(completion.choices[0].text);
<header>
// Old
const response = openai.createChatCompletion(params)
response.headers['x-ratelimit-remaining-tokens']
response.data.id
// New
const { data, response } = openai.chat.completions.create(params).withResponse()
response.headers.get('x-ratelimit-remaining-tokens')
data.id
이 외에도 굉장히 많은 것들이 바뀐 대격변 업데이트 였습니다.
4. 생각 정리
docs가 nodejs기준이라 ts로 고치는 과정에서 gpt의 도움을 받았는데, 이때 gpt가 v3버전을 기준으로 코드를 알려줘서 생긴 문제였습니다.
참고했던 내용도 22년도 코드로, v4로의 업데이트가 23년도 중순경에 있었기 때문에 알아차리지 못하고 오류가 나던거였습니다.
호환성 문제를 해결하는데 거의 하루를 보냈습니다.
우울해집니다.
'공부 > 내배캠 TIL' 카테고리의 다른 글
[Node.js_4기] 최종프로젝트 2주차_day2_GPT파인튜닝, jsonl (24/04/02) (0) | 2024.04.02 |
---|---|
[Node.js_4기] 최종프로젝트 2주차_GPT파인튜닝 (24/04/01) (1) | 2024.04.01 |
[Node.js_4기] 최종프로젝트 2일차 TIL_회의와 의사결정 (24/03/27) (1) | 2024.03.27 |
[Node.js_4기] 최종프로젝트 1일차 TIL_회의 (24/03/26) (0) | 2024.03.26 |
[Node.js_4기] 팀 프로젝트 회고 : KPT + 프로젝트 회고 (24/03/25) (0) | 2024.03.25 |