
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를 초기화해준다. | |
} |
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
'Flutter' 카테고리의 다른 글
flutter_launcher_icons (실행 아이콘 설정) (0) | 2023.05.25 |
---|---|
markdown_widget (마크다운 Renderer) (0) | 2023.05.24 |
flutter_dotenv (환경변수 설정) (0) | 2023.05.19 |
freezed (Code Generation) (0) | 2023.05.17 |
flex_color_scheme (Theme 간편 설정) (0) | 2023.05.16 |