(Flutter) 플러터에서 Openai API 사용하기

반응형

현재 OpenAI에서 공식 Dart/Flutter 라이브러리는 제공하고 있지 않습니다. 그래서 OpenAI API 문서를 보고 HTTP 요청을 직접 구현하거나, pub.dev에서 오픈 소스를 찾아서 사용해야 합니다.

dart_openai

dart_openai는 오픈 소스이며 가장 인기있는 OpenAI 클라이언트 패키지입니다. 이 라이브러리를 사용하면 OpenAI의 최신 AI 모델을 Dart/Flutter 애플리케이션에 쉽게 구현할 수 있습니다.

이 라이브러리는 GPT-3 언어 모델과 DALL-E 이미지 생성 등 OpenAI의 다양한 API를 쉽게 요청할 수 있는 간단하고 직관적인 함수를 제공합니다.

이 패키지는 가볍고 사용하기 쉽도록 설계되었기 때문에 HTTP 요청 처리로 인한 복잡성과 오류를 걱정할 필요 없습니다. 우리는 애플리케이션 구축에만 집중하면 됩니다.

dart_openai 설치하기

현재 dart_openai의 최신 버전은 1.9.1입니다. dart_openai 라이브러리를 설치합니다.

flutter pub add dart_openai

그리고 OpenAI API는 인증을 위해 API_KEY를 사용합니다. 그리고 이 비밀키는 런타임시에 파일에서 로드하는 것이 좋습니다

envied

envied 라이브러리는 빌드러너(build_runner)를 사용하여 .env 파일의 값이 포함된 부분 파일을 생성합니다. 그럼 애플리케이션에서는 Env 클래스를 사용하여 환경 변수에 접근할 수 있습니다.

envied 설치하기

flutter pub add envied
flutter pub add --dev envied_generator
flutter pub add --dev build_runner

envied 사용방법

프로젝트의 루트에 .env 파일을 추가합니다.

// .env
OPEN_AI_API_KEY=<REPLACE WITH YOUR API KEY>

환경 변수를 수집할 lib/env/env.dart 클래스를 생성합니다. 클래스에 Envied에 대한 어노테이션을 추가하고 .env 파일에서 가져올 환경 변수에 대한 EnviedField를 추가합니다.

// lib/env/env.dart
import 'package:envied/envied.dart';
part 'env.g.dart';

@Envied(path: ".env")
abstract class Env {
  @EnviedField(varName: 'OPEN_AI_API_KEY') // the .env variable.
  static const apiKey = _Env.apiKey;
}

[!important] 중요
.env 파일과 env.g.dart 파일을 모두 .gitignore 파일에 추가해야 합니다. 그렇지 않으면 환경 변수에 포함된 비밀키가 노출될 수 있습니다.

그런 다음 빌드러너를 실행합니다:

flutter pub run build_runner build

그리고 Env에서 apiKey 값을 읽어와 OpenAI 를 초기화합니다.

// lib/main.dart
void main() {
 OpenAI.apiKey = Env.apiKey; // Initializes the package with that API key
 // ..
}

채팅(ChatGPT) 사용하기

Chat Completion 만들기

각 메시지는 OpenAIChatCompletionChoiceMessageModel 객체로 생성해야 합니다.

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

Chat Completion 스트림 만들기

OpenAI.instance.chat.create()를 호출하는 것 대신에 OpenAI.instance.chat.createStream 메서드를 사용하면 결과를 Stream로 얻을 수 있습니다.

OpenAIStreamChatCompletionModel chatStream = OpenAI.instance.chat.createStream(
    model: "gpt-3.5-turbo",
    messages: [
      OpenAIChatCompletionChoiceMessageModel(
        content: "hello",
        role: OpenAIChatMessageRole.user,
      )
    ],
  );

chatStream.listen((chatStreamEvent) {
print(chatStreamEvent); // ...
  })

or

[카카오페이로 후원하기] [토스페이로 후원하기]

반응형