【FastAPI】FastAPIを用いたchatGPTのAPIのラップ方法

1. FastAPIのインストールとセットアップ

FastAPIはPythonの高速なWebフレームワークであり、効率的なAPIの構築に利用されます。以下では、FastAPIのインストールと基本的なセットアップ手順を説明します。

1.1 FastAPIのインストール

FastAPIをインストールするには、以下のコマンドを使用します。

pip install fastapi

1.2 依存関係のインストール

FastAPIには、アプリケーションを実行するために必要な追加の依存関係もあります。これには、ASGIサーバーであるUvicornなどが含まれます。以下のコマンドを使用して、必要な依存関係をインストールします。

pip install "uvicorn[standard]"

1.3 FastAPIプロジェクトのセットアップ

FastAPIプロジェクトをセットアップするために、まずPythonファイルを作成し、FastAPIモジュールをインポートします。

from fastapi import FastAPI




app = FastAPI()

上記のコードでは、FastAPIアプリケーションのインスタンスを作成しています。`app`はFastAPIアプリケーションのエントリーポイントとして使用されます。

FastAPIのインストールとセットアップが完了しました。次はChatGPTのインテグレーションに進みましょう。

2. ChatGPTのインテグレーション

ChatGPTをFastAPIアプリケーションに統合するためには、OpenAIのPythonクライアントを使用します。以下では、ChatGPTのインテグレーション手順を説明します。

2.1 OpenAIのクライアントライブラリのインストール

まず、OpenAIのPythonクライアントライブラリをインストールします。

pip install openai

2.2 OpenAI APIキーの取得

ChatGPTを使用するためには、OpenAI APIキーが必要です。APIキーを取得するには、OpenAIのウェブサイト(https://platform.openai.com/signup)でアカウントを作成し、APIキーを取得してください。

2.3 ChatGPTの初期化と認証

ChatGPTを使用するためには、APIキーを使用してOpenAIに認証する必要があります。以下のコードをFastAPIアプリケーションのセットアップコードの下に追加します。

import openai

また、.env等に下記を記載します。

OPENAI_API_KEY="sk-xxx"

上記のコードのYOUR_API_KEYを取得したOpenAI APIキーに置き換えてください。

ChatGPTのインテグレーションが完了しました。次はFastAPIエンドポイントの作成方法について説明します。

## 3. FastAPIエンドポイントの作成

FastAPIでは、エンドポイントを作成してAPIの振る舞いを定義します。ChatGPTを使用するためのエンドポイントを作成する手順を以下に示します。

3.1 リクエストモデルの定義

FastAPIでは、リクエストのデータ構造を定義する必要があります。まず、`pydantic`モジュールを使用してリクエストモデルを定義します。リクエストモデルは、APIエンドポイントに送信されるデータの形式を指定します。

from pydantic import BaseModel




class ChatInput(BaseModel):

    message: str

上記のコードでは、`ChatInput`という名前のリクエストモデルを作成しています。このモデルには、`message`という文字列フィールドが含まれています。このフィールドは、ChatGPTに渡すメッセージを表します。

3.2 ChatGPTエンドポイントの作成

次に、ChatGPTを呼び出すためのエンドポイントを作成します。`@app.post`デコレータを使用して、POSTリクエストを処理するエンドポイントを作成します。

from fastapi import FastAPI

import openai

import os

from dotenv import load_dotenv

from pydantic import BaseModel




load_dotenv()




api_key = os.getenv('OPENAI_API_KEY')

openai.api_key = api_key




app = FastAPI()




class ChatInput(BaseModel):

    message: str




@app.post("/chat")

async def chat_api(input: ChatInput):

    user_message = {'role': 'user', 'content': input.message}

    messages = [user_message]




    response = openai.ChatCompletion.create(

        model='gpt-3.5-turbo',

        messages=messages,

        temperature=0.0

    )




    return response['choices'][0]['message']['content']

上記のコードは、FastAPIを使用してChatGPTのAPIをラップするためのサンプルコードです。

上記のコードは、FastAPIの基本的な構造に従っています。

  1. `app = FastAPI()`: FastAPIアプリケーションのインスタンスを作成します。
  2. `class ChatInput(BaseModel)`: ChatGPTへのリクエストデータを定義するためのリクエストモデル `ChatInput` を作成します。この場合、`ChatInput` には `message` フィールドが含まれており、ユーザーからのメッセージを表します。
  3. `@app.post(“/chat”)`: `”/chat”` エンドポイントを作成し、POSTリクエストを処理します。
  4. `async def chat_api(input: ChatInput)`: `chat_api` 関数は `ChatInput` 型のリクエストデータ `input` を受け取ります。
  5. `response = openai.ChatCompletion.create()`: OpenAIの ChatCompletion.create() メソッドを使用して ChatGPT を呼び出し、応答を取得します。この場合、`model` パラメータには使用する ChatGPT モデルの名前(`gpt-3.5-turbo`)が指定され、`messages` パラメータにはユーザーのメッセージが含まれます。
  6. `return response[‘choices’][0][‘message’][‘content’]`: ChatGPTからの応答を抽出して返します。`response` のデータ構造は JSON 形式であり、この場合、`choices` リストの最初の要素の `message` フィールドの `content` フィールドが返されます。

このコードでは、ユーザーからのメッセージをChatGPTに送信し、ChatGPTからの応答を返すシンプルなAPIエンドポイントを作成しています。このAPIエンドポイントには、`”/chat”` パスでPOSTリクエストを送信することでアクセスできます。

実際にFastAPIサーバーを起動し、`http://localhost:8000/chat`にPOSTリクエストを送信すると、ChatGPTからの応答が返されます。

FastAPIエンドポイントの作成が完了しました。次はFastAPIサーバーの起動方法について説明します。

 

4. FastAPIサーバーの起動

FastAPIアプリケーションを実行し、サーバーを起動する手順を以下に示します。

  1. FastAPIアプリケーションのセットアップコードが記述されたPythonファイル(例えば、`main.py`)があることを確認します。
  2. ターミナルまたはコマンドプロンプトを開き、FastAPIプロジェクトのディレクトリに移動します。
  3. 以下のコマンドを使用して、FastAPIサーバーを起動します。
uvicorn main:app --host 0.0.0.0 --port 8000
  • `main`はFastAPIアプリケーションを定義したPythonファイルの名前です。ファイル名に応じて変更してください。
  • `app`はFastAPIアプリケーションのインスタンスを指定します。`app`を作成した変数名に合わせて変更してください。
  • `–host 0.0.0.0`は、サーバーが外部からの接続を許可することを意味します。必要に応じて変更してください。
  • `–port 8000`は、サーバーがポート8000でリクエストを待機することを意味します。必要に応じて変更してください。
  1. コマンドを実行すると、FastAPIサーバーが起動し、サーバーが指定されたホストとポートでリクエストを受け付けます。

FastAPIサーバーが起動したら、指定したホストとポート(デフォルトではhttp://0.0.0.0:8000)でリクエストを受け付け、ChatGPTのAPIにアクセスすることができます。

注意: FastAPIサーバーは、実行中にターミナルまたはコマンドプロンプトを閉じるまで実行され続けます。サーバーを停止するには、ターミナルまたはコマンドプロンプトで`Ctrl+C`を押して停止させるか、別のターミナルウィンドウを開いて停止コマンドを入力します。

5. fastAPIエンドポイントにリクエストを送る

このコードは、FastAPIサーバーに対して `/chat` エンドポイントに対してPOSTリクエストを送信する例です。以下に解説を行います。

コード

import requests

import json




url = "http://0.0.0.0:8000/chat"




data = {

    "message": "AIの定義を教えて"

}




response = requests.post(url, json=data)

print(response.json())

解説:

  1. `requests` モジュールを使用してHTTPリクエストを行うために、`import requests` を行います。
  2. リクエスト先のURLを `url` 変数に指定します。`http://0.0.0.0:8000/chat` はFastAPIサーバーの `/chat` エンドポイントへのリクエストを示しています。
  3. リクエストボディのデータを `data` 変数に辞書として定義します。ここでは、`message` フィールドに `”王の定義を教えて”` というメッセージを指定しています。
  4. `requests.post()` メソッドを使用して、指定したURLにPOSTリクエストを送信します。`json=data` とすることで、リクエストボディにデータをJSON形式で送信しています。
  5. レスポンスの内容を表示するために、`response.json()` を使用してJSON形式のレスポンスデータを取得し、表示しています。

このコードを実行すると、FastAPIサーバーに対して `/chat` エンドポイントに対して指定したメッセージを含むPOSTリクエストが送信されます。FastAPIサーバーはリクエストを受け取り、ChatGPTのAPIを呼び出して応答を生成し、レスポンスとして返します。`response.json()` を使用して、応答の内容を表示します。

なお、実際の実行環境に合わせて `url` の値を適切なサーバーのURLに変更してください。また、必要に応じてリクエストボディのデータを変更して、異なるメッセージを送信することも可能です。

コメント

タイトルとURLをコピーしました