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年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。カテゴリー
検索履歴
会話履歴 4182
LLM 731
大規模言語モデル 730
言語モデル 695
生成型要約 673
GPT-2 テキスト生成 650
注意メカニズム 642
GPT テキスト生成 636
NLP トランスフォーマー 632
エンジニア向け 620
クロスエントロピー損失 619
LLM テキスト生成 611
マルコフ連鎖 611
教育AI 609
LLM 要約 596
バッチサイズ 595
バイアス 問題 593
データ前処理 592
パーソナライズドコンテンツ 588
トレーニング 585
トークン化 577
自動要約 575
数学的アプローチ 569
ミニバッチ学習 550
セルフアテンション 546
LLM リアルタイム処理 543
コード生成 543
ロス計算 543
FAQシステム 539
線形代数 531
チーム
任 弘毅
株式会社レシートローラーにて開発とサポートを担当。POSレジやShopifyアプリ開発の経験を活かし、業務のデジタル化を促進。
下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。