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-03-10
バージョン: 1

下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。カテゴリー
検索履歴
エンジニア向け 326
会話履歴 299
大規模言語モデル 297
マルコフ連鎖 296
自動要約 291
NLP トランスフォーマー 288
データ前処理 283
言語モデル 283
パーソナライズドコンテンツ 277
教育AI 277
注意メカニズム 272
生成型要約 271
数学的アプローチ 270
トークン化 266
ミニバッチ学習 265
セルフアテンション 264
クロスエントロピー損失 257
ロス計算 257
LLM 要約 256
線形代数 256
GPT-2 テキスト生成 253
LLM テキスト生成 253
トレーニング 252
バイアス 問題 252
自動翻訳 249
GPT テキスト生成 247
LLM リアルタイム処理 246
自然言語処理 翻訳 245
GPT ファインチューニング 242
コード生成 242
チーム

任 弘毅
株式会社レシートローラーにて開発とサポートを担当。POSレジやShopifyアプリ開発の経験を活かし、業務のデジタル化を促進。

下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。