FastAPIとAIを活用した30分で作るAIエンドポイント構築ガイド


Featured

今回はPythonのFastAPIとGoogleのGeminiに加えAI大モデル(LLM)を使用し、わずか30分でAIエンドポイントを構築する方法をお見せします。AIアプリケーションのバックエンドに最適なAPIを短期間で、実装し…Read More.Rate limiting and JWT tokens for authentication as security controls.

これはAI技術のファストAPIの統合に関心を持っている、人工知能サービスを自作したいエンジニア、またはAPIのセキュリティを強化するために学びたい方に向けた最適な記事です。具体的なコード例についてもGitHubで公開されており、技術者は実践的に習得することができます。

Table of Contents

FastAPIとAIエンドポイント構築のプロジェクト概要

初めに、私たちのプロジェクト全体をつかむことから始めます。FastAPIは、Python製の非常に速いWebフレームワークで、AIモデルを呼び出すAPIを気軽に作ることができます。Google Geminiは、最新の大規模言語モデルであり、自然言語処理の様々なタスクを非常に高い精度で解決することができます。

今回の目標は以下の通りです。

  • FastAPIでAIエンドポイントを作成する
  • GeminiモデルをAPI内で呼び出し、AI応答を生成する
  • APIのレスポンス速度と信頼性を確保する
  • レートリミティングを導入し、過剰なリクエストを制御する
  • JWTトークン認証を実装して安全なアクセスを実現する

これらを順を追って解説していきます。

FastAPIのセットアップ方法

 

開発環境を整えることが最初のステップです。Pythonの仮想空間を作って、FastAPIおよび必要なライブラリをインストールします。こちらのコマンドに従って基本のセットアップが完了します。

  1. Python仮想環境の作成と有効化
  2. FastAPIとUvicornのインストール
  3. Gemini用のAPIクライアントの導入

FastAPIは非同期処理に特に強く、非常に速いAPIサーバーの構築に非常に適しています。UvicornはASGIサーバーとしてFastAPIアプリを実行する際に使用します。

FastAPIアプリの作成

 

環境が準備完了の状態になったら、FastAPIアプリケーションのたたき台を作成します。とりあえず、基本のルーティングを設定し、APIが正常に動作することを確認しましょう。

以下は簡単なサンプルコード例です。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello, FastAPI and AI!"}

ブラウザでアクセスしてコードを実行することで、シンプルなJSONレスポンスが受け取れることが確認できます。

AI統合:Geminiモデルの活用

次に、APIに組み込みむGoogleのGemini LLMです。Geminiは自然言語理解と生成にすばらしいモデルでかつ、チャットボット、文章生成、質問応答などの多様な用途に使われることができます。

APIエンドポイント内でGeminiにAPIリクエストを送り、応答を取得する流れを実装します。GeminiのAPIキーはこちらから取得可能です。

以下は簡単なGemini呼び出し例です。

import openai

openai.api_key = "YOUR_GEMINI_API_KEY"

response = openai.ChatCompletion.create(
    model="gemini-1",
    messages=[{"role": "user", "content": "こんにちは、AI!"}]
)

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

この応答をFastAPIのレスポンスとして返すことで、AIエンドポイントが完成します。

カスタムシステムプロンプトの設定

AIモデルに対してより具体的な振る舞いを指示したい場合は、カスタムシステムプロンプトを使用します。これはAIに対する前提条件や役割を設定するもので、応答の質を大きく向上させることが可能です。

例えば、以下のようにプロンプトを設定します。

messages = [
    {"role": "system", "content": "あなたは親切なアシスタントです。"},
    {"role": "user", "content": "今日の天気は?"}
]

このようにすることで、AIは「親切なアシスタント」として振る舞い、より自然で適切な回答を返してくれます。

FastAPIサーバーの起動

コードが整理されてきたら、Uvicornを利用してFastAPIサーバーをスタートします。下記のコマンドを使用・利用・走らせる・流すます。

uvicorn main:app --reload

–reloadオプションは開発中にコード変更を自動反映してくれて便利です。起動後はhttp://localhost:8000/ にアクセスして、APIが正しく動作しているか確認しましょう。

レートリミティングの導入でAPIの安定性を確保

AIエンドポイントは、大量のリクエストを受ける可能性があり、過剰なアクセスはサービス障害の原因となります。そこで、それは、レートリミティングの実装を行い、1人当たりの一定期間内のリクエスト数を制限するということです。

FastAPIでのレートリミティングは、ミドルウェアや外部ライブラリを活用して簡単に導入することができます。例えば、slowapiライブラリを利用することで、以下のように設定することができます。

from slowapi import Limiter
from slowapi.util import get_remote_address
from fastapi import FastAPI

limiter = Limiter(key_func=get_remote_address)
app = FastAPI()

@app.get("/ai-endpoint")
@limiter.limit("5/minute")
async def ai_endpoint():
    # AI処理
    return {"message": "Success"}

このケースでは、1分間に行える要求は最大5回までという制限が設けられています。レートリミティングを行うと、APIの使用を過負荷にすることを防ぎ、従って、安定したサービスの運用が可能となります。

JWT認証による安全なアクセス管理

APIの公開にあたっては、認証と認可が重要です。 ここでは、不正アクセスを防ぐために、JWT(JSON Web Token)を用いたトークン認証を実装します。

JWTは、署名付きのトークンでユーザーごとに持ち運ぶもので、API request時にヘッダーに一緒に つけて 送信します。FastAPIはJWT認証の実装を簡単にサポートしており、以下の流れで導入可能です。

  1. ユーザー認証情報を検証し、JWTトークンを発行
  2. APIエンドポイントでJWTトークンの有効性を検証
  3. 有効な場合のみAI機能にアクセスを許可

具体的には、pyjwtfastapi.securityモジュールを利用してJWTの生成・検証を行います。

from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

async def get_current_user(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        user_id = payload.get("sub")
        if user_id is None:
            raise credentials_exception
        # ユーザー情報取得処理
    except JWTError:
        raise credentials_exception

この構造のAPIの認証を強化し、許可されたユーザーのみがAI機能を使えるようになります。

まとめ:FastAPIとAI技術で短時間に高機能APIを実現

このチュートリアルでは、PythonのFastAPIを使ってGoogle GeminiというAIモデルを統合し、30分でAIエンドポイントを作成する手順を詳述しています。カスタムシステムプロンプトによるAI応答の質向上、レートリミティングによる過負荷防止、JWTによる認証機能の追加と、実用的なAPI開発に必要なポイントを網羅しています。

Geminiの高度な自然言語処理能力合わせて、FastAPIのシンプルさと高速な設計は、AIを搭載したサービスの早期立ち上げを実現します。このノウハウを活用して、あなた自身のAIアプリケーション開発にトライしてください。

よくある質問(FAQ)

Q1: FastAPIとは何ですか?

FastAPIは、Pythonで作られた最新のWebフレームワークであり、非同期処理が得意であり、APIサーバーを非常に簡単に作成できます。自動的に生成される文書や型ヒントへの開発効率の高さもそれ専用のものです。

Q2: Google GeminiとはどんなAIモデルですか?

Geminiは、Googleが開発した大規模言語モデルであり、自然言語の理解と生成能力に優れています。チャットボット、テキスト要約、質問応答など、さまざまなタスクを実行できます。

Q3: レートリミティングはなぜ必要ですか?

APIへのリクエストが過剰に集中すると、サーバーに過負荷がかかり、サービスの応答が遅れたり場合によっては停止したりします。レートリミティングは、アクセスの頻度を制限するもので、安定したサービスの運用に貢献します。

Q4: JWT認証のメリットは何ですか?

JWTはデジタル署名が付与されたトークンであり、ユーザーの認証を効率化しつつ、不正な改竄を防ぎます。在庫の管理が困難な場合にたくさんの物流業者を使っていることがあるように、スケーラブルなステートレスであるために、多くのAPIがそれを採用しています。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です