YD_S 개발로그
article thumbnail
Published 2023. 5. 22. 20:49
dart_openai (ChatGPT 패키지) Flutter

1. 아직 Flutter는 공식 OpenAI 패키지가 없다고?

현재 기준 (23.05.22) 아직 Dart/Flutter에서 공식적으로 지원하는 OpenAI 패키지는 존재하지 않습니다. 이전 포스팅한 chat_gpt_sdk 또한 공식 패키지가 아닙니다. 비공식적이지만 OpenAI 홈페이지에서 dart_openai 패키지를 추천하고있으므로 언제가될진 모르지만 공식 패키지가 지원되기 전까지 해당 패키지를 사용하는 것을 추천합니다.

 

2. 사용법

2.1. API 인증키 

dart_openai 패키지 설명에는 환경변수 설정을 envied 패키지를 사용하였지만 해당 패키지는 배포된지 얼마 되지않았을 뿐더러 Major버전이 0이므로 이전 포스팅한 flutter_dotenv 패키지를 사용하는 것을 추천합니다. ( flutter_dotenv 포스팅 )

import 'package:dart_openai/openai.dart';
void main() {
OpenAI.apiKey = 'API KEY'; // API Key를 초기화해준다.
}
view raw openai.dart hosted with ❤ by GitHub

 

2.2. 모델 정보 

2.2.1. 지원하는 모델 리스트 정보

import 'package:dart_openai/openai.dart';
void main(){
List<OpenAIModelModel> models = await OpenAI.instance.model.list(); // 지원하는 모델 리스트 가져오기
OpenAIModelModel firstModel = models.first;
print(firstModel.id);
}

 

2.2.2. 특정 모델 정보 

import 'package:dart_openai/openai.dart';
void main(){
OpenAIModelModel model = await OpenAI.instance.model.retrieve("text-davinci-003"); // text-davinci-003 모델의 정보 가져오기
print(model.id);
}

 

2.3. Text Completion

Text completion은 단일 문장이나 문단에 대해 빠뜨린 부분을 완성하는 기능입니다. 이는 주어진 텍스트의 빈칸을 채우는 작업으로, 주어진 문맥에서 논리적인 완성을 제공합니다. 예를 들어, "오늘 날씨는 매우 __"라는 문장을 주면, "덥다"나 "추움"과 같이 빈칸에 맞는 단어를 제안해줄 수 있습니다.

 

2.3.1. Stream으로 응답받기

Stream<OpenAIStreamCompletionModel> completionStream = OpenAI.instance.completion.createStream(
model: "text-davinci-003",
prompt: "Github is ",
maxTokens: 100,
temperature: 0.5,
topP: 1,
);
completionStream.listen((event) { // 응답 결과를 Stream 형태로 받는다.
final firstCompletionChoice = event.choices.first;
print(firstCompletionChoice.text); // ...
});

 

2.3.2. 비동기식으로 응답받기

OpenAICompletionModel completion = await OpenAI.instance.completion.create(
model: "text-davinci-003",
prompt: "Dart is a progr",
maxTokens: 20,
temperature: 0.5,
n: 1,
stop: ["\n"],
echo: true,
);
print(completion.choices.first.text); // 비동기식으로 응답받기

★ Request의 자세한 값은 https://platform.openai.com/docs/api-reference/completions/create 참고

 

2.4. Chat Completion

Chat completion은 더 넓은 문맥에서 대화를 자연스럽게 이어나가는 기능입니다. 사용자와의 대화에서 이전 발언 내용을 이해하고, 다음 발언을 생성하는 역할을 수행합니다. Chat completion은 더 긴 대화에서 각 턴에 대한 응답을 생성하므로, 연속적이고 일관된 대화 흐름을 유지할 수 있습니다. 예를 들어, "오늘 날씨가 어때?"라는 질문에 "오늘은 맑고 따뜻한 날씨입니다"라는 대답을 제공할 수 있습니다.

 

2.4.1. Stream으로 응답받기

OpenAIStreamChatCompletionModel chatStream = OpenAI.instance.chat.createStream(
model: "gpt-3.5-turbo",
messages: [
OpenAIChatCompletionChoiceMessageModel(
content: "hello",
role: OpenAIChatMessageRole.user,
)
],
);
chatStream.listen((chatStreamEvent) {
print(chatStreamEvent.choices.first.delta.content!); // Stream 형식으로 결과를 받는다.
});

 

2.4.2. 비동기식으로 응답받기

OpenAIChatCompletionModel chatCompletion = await OpenAI.instance.chat.create(
model: "gpt-3.5-turbo",
messages: [
OpenAIChatCompletionChoiceMessageModel(
content: "hello, what is Flutter and Dart ?",
role: OpenAIChatMessageRole.user,
),
],
);
print(chatStreamEvent.choices.first.delta.content!);

★ Request의 자세한 값은 https://platform.openai.com/docs/api-reference/chat/create  참고

 

 

이 밖에도 이미지 생성, 번역, 파일 관련 등을 작업할 수 있으므로 유용하게 사용할 수 있습니다.

OpenAI 기능을 활용해서 함께 개발해보아요

 

 

 

https://pub.dev/packages/dart_openai

 

dart_openai | Dart Package

Dart SDK for openAI Apis (GPT-3 & DALL-E), integrate easily the power of OpenAI's state-of-the-art AI models into their Dart applications.

pub.dev

 

profile

YD_S 개발로그

@YD_S

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!