【Python × OpenAI API】Dockerによる環境構築編

1. はじめに

今回はPythonとDockerを組み合わせて、効率的かつ再現性の高いOpenAI APIの活用環境を構築する方法を紹介します。Dockerを使うことで、依存関係の管理が簡素化され、環境の一貫性を保ちながら開発を進めることができます。

このブログでは、Dockerを使ってPython環境をセットアップし、OpenAI APIにアクセスするための基本的な構成をステップバイステップで解説します。初心者の方でもすぐに始められる内容になっているので、ぜひ最後までお読みください。

これから、必要なツールの紹介や具体的な設定手順について順番に見ていきましょう。

2. 環境構築手順

以下のディレクトリ構成に基づいて各ファイルを作成していきます。

my-openai-project/
│
├── .env                 # 環境変数を定義するファイル (Gitの管理対象外)
├── .gitignore           # Gitで無視するファイルやディレクトリを指定
├── Dockerfile           # Dockerイメージを定義するファイル
├── compose.yaml         # Dockerコンテナを管理するための設定ファイル
├── requirements.txt     # Python依存パッケージを定義
└── src/                 # Pythonプログラムのソースコード
    └── test.py          # 動作確認用のPythonスクリプト

1. 環境変数の定義

Dockerに限らず、APIキーやパスワードなどの機密情報を直接コードに書くことは避けたいですよね。今回は、環境変数を使って管理しようと思います。環境変数を使用することで、コードベースから機密情報を分離し、セキュリティを向上させることができます。

プロジェクトルートに .env ファイルを作成し、OpenAI API用のAPIキーを環境変数として定義します。

OPENAI_API_KEY=YOUR_API_KEY

「YOUR_API_KEY」を取得したAPIキーに置き換えます。(「""」で囲む必要はありません)
ここで定義した環境変数は「compose.yaml」の「environment」セクションで${VARIABLE_NAME} の形式で取得して、コンテナ内で使用することができます。

2. gitignoreの指定

環境変数やキャッシュファイル、バイナリファイルなど、リポジトリに含めたくないファイルを指定するために、 .gitignore を設定します。これにより、機密情報や不要なファイルがバージョン管理に含まれないようにします。

.env
__pycache__/
*.pyc
.vscode/

この .gitignore により、機密情報が誤って公開されるのを防ぎ、プロジェクトのセキュリティを確保することができます。

3. 依存パッケージの定義

プロジェクトに必要なPythonパッケージを定義します。「requirements.txt」を作成することで、後述するDockerfileの設定からDockerコンテナ内で自動的に必要なライブラリがインストールされ、環境を簡単に再現することができます。

openai==0.27.9

4. Dockerfileの作成

シンプルなPythonベースのDockerfileの例です。Python 3.11をベースとして、「requirements.txt」の内容を元に必要なパッケージをインストールする設定になっています。

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY src/ .

5. Docker Composeの作成

Docker Composeは、複数のサービスを一括で管理するためのツールで、単一のコマンドでアプリケーション全体を起動できるため、開発・運用にとても便利です。今回は単一のサービスですが、今後の拡張も踏まえてDocker Composeを使用します。

「environment」セクションでコンテナ内で使用するための環境変数を定義しています。

services:
  app:
    build: .
    volumes:
      - ./src:/app
    environment:
      OPENAI_API_KEY: ${OPENAI_API_KEY}

3. 動作確認

ここからはVS CodeのDevcontainerを使ってPythonプログラムをDocker上で動作確認していきます。コンテナ内でPythonプログラムを作成し、 requirements.txt に記載したパッケージを使って動作確認が可能になります。

コンテナ上で直接コードを書き、実行できるため、ローカル環境に依存せず、再現性のある開発ができます。(Devcontainerの使い方については割愛させて頂きます)

「src」ディレクトリに「test.py」を作成します。

import os
import openai


openai.api_key = os.environ["OPENAI_API_KEY"]


response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "Pythonについておしえてください"},
    ],
)

print(response.choices[0]["message"]["content"])

VS Codeのターミナルを開き「test.py」を実行します。

# python src/test.py
Pythonは汎用プログラミング言語の1つで、直感的で読みやすい構文を持つことで知られています。Pythonは使いやすさと拡張性に優れており、機械学習やデータ分析などの分野でも広く利用されています。

Pythonの主な特徴は以下の通りです:
1. シンプルな構文:Pythonは文法が簡潔で読みやすく、初心者にも理解しやすい言語です。
2. インタプリタ言語:Pythonはインタプリタ言語であり、コンパイルする必要がなく、対話的にプログラムを実行できます。
3. 豊富なライブラリ:Pythonには豊富な標準ライブラリやサードパーティのライブラリが用意されており、さまざまな用途に利用できます。
4. クロスプラットフォーム:Windows、Mac、Linuxなど、さまざまなプラットフォームで動作します。
5. コミュニティのサポート:Pythonはオープンソースであり、活発なコミュニティが存在しており、質問や情報交換などが容易です。

Pythonはウェブ開発、データ分析、人工知能、IoTなど幅広い分野で利用されており、初心者からプロまで幅広く利用されています。Pythonの学習は比較的簡単であり、将来にわたって重宝されるスキルです。

無事、OpenAI APIを呼び出してレスポンスを取得することができました!

まとめ

今回のブログでは、PythonとDockerを活用してOpenAI APIを呼び出すための環境構築手順を解説しました。Dockerを使用することで、開発環境を統一し、依存関係の管理や再現性を高めることができるため、プロジェクトが成長しても簡単にメンテナンスできます。

以下が今回のポイントです:

  • 環境変数の管理: 機密情報は .env ファイルを使って管理し、セキュリティを確保する方法を学びました。
  • gitignoreの指定: 不要なファイルや機密情報をGitリポジトリに含めないための設定方法を説明しました。
  • 依存パッケージの定義: 必要なPythonパッケージを requirements.txt に定義することで、Docker内で簡単に依存関係をインストールできるようにしました。
  • Dockerfileの作成: Pythonの環境をDockerで構築するための基本的な設定を行いました。
  • Docker Composeの利用: docker-compose.yml を使用して、簡単に環境全体を起動する方法を紹介しました。

この一連の手順を通じて、効率的な開発環境を構築できるだけでなく、スクリプトの実行やデプロイも簡単に行えるようになりました。今後はこの環境を使用してツールの開発をしていこうと思います!

同様の環境構築が必要な場合にはぜひDockerを活用してみてください。