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 が適しています。