1.1 FlaskとFastAPIによるLLM APIの基本設計 | シンプルなPython API構築ガイド
1.1 FlaskまたはFastAPIを使ったAPIの基本設計
このセクションでは、Pythonフレームワークの Flask と FastAPI を使用して、LLM(大規模言語モデル)のAPIを設計・実装する方法を紹介します。基本的なAPIエンドポイントの作成から、リクエスト処理、エラーハンドリングまで、実践的な内容をカバーします。
Flask版
from flask import Flask, request, jsonify
from transformers import pipeline
app = Flask(__name__)
llm = pipeline("text-generation", model="gpt2")
@app.route("/predict", methods=["POST"])
def predict():
data = request.json
input_text = data.get("text", "")
if not input_text:
return jsonify({"error": "Input text is required"}), 400
try:
result = llm(input_text, max_length=50, num_return_sequences=1)
return jsonify({"output": result[0]["generated_text"]})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
FastAPI版
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from transformers import pipeline
app = FastAPI()
llm = pipeline("text-generation", model="gpt2")
class InputText(BaseModel):
text: str
@app.post("/predict")
async def predict(input_data: InputText):
input_text = input_data.text
if not input_text:
raise HTTPException(status_code=400, detail="Input text is required")
try:
result = llm(input_text, max_length=50, num_return_sequences=1)
return {"output": result[0]["generated_text"]}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e)}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
解説
- Flask版は、シンプルで学習コストが低く、小規模なアプリケーションに適しています。
- FastAPI版は、非同期処理に対応しており、高速なAPIを構築できます。また、Pydanticを使用することで、リクエストのバリデーションも行えます。
どちらを選ぶべきか?
- 小規模なプロジェクトや、非同期処理が不要な場合は Flask が便利です。
- 高速なAPIが求められる場合や、非同期処理が必要な場合は FastAPI が適しています。
公開日: 2024-11-03
最終更新日: 2025-09-15
バージョン: 3
下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。カテゴリー
検索履歴
会話履歴 5103
LLM 971
大規模言語モデル 827
言語モデル 809
生成型要約 771
GPT-2 テキスト生成 738
注意メカニズム 731
GPT テキスト生成 720
NLP トランスフォーマー 712
エンジニア向け 702
マルコフ連鎖 702
バイアス 問題 701
教育AI 699
LLM テキスト生成 692
クロスエントロピー損失 692
LLM 要約 682
データ前処理 681
トレーニング 681
バッチサイズ 678
パーソナライズドコンテンツ 673
トークン化 664
自動要約 657
数学的アプローチ 650
ロス計算 647
ミニバッチ学習 643
コード生成 631
LLM リアルタイム処理 629
セルフアテンション 629
FAQシステム 619
線形代数 617
チーム
任 弘毅
株式会社レシートローラーにて開発とサポートを担当。POSレジやShopifyアプリ開発の経験を活かし、業務のデジタル化を促進。
下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。