第8章 · Practice Projects
シンプルなチャットボット
Simple Chatbot
→ で次のスライド · F でフルスクリーン · N で講師ノート · Esc で終了
重要キーワード
Stateless API
ステートレスAPI
サーバーが履歴を保持しない設計。クライアントが履歴を持つ
Streaming
ストリーミング
応答を逐次返す方式
Sliding Window
スライディングウィンドウ
履歴の古い部分を切る or 要約する技法
Compaction
圧縮
長い会話を要約して短くする処理
シンプルなチャットボット
最小構成のチャットボットを Flask で作ります。
設計
- 状態は クライアント (ブラウザ) が持つ。
- サーバーは履歴を受け取って Claude に転送するだけ。
- Streaming で応答を逐次返す。
サーバー側
wzxhzdk:2
クライアント側 (擬似)
wzxhzdk:3
履歴の長期化対策: Sliding Window + Summary
会話が長くなると input が肥大化します。次の戦略を組み合わせます:
wzxhzdk:4
summarize() も Claude で実装すれば自然な要約に。
ベストプラクティス
- システムプロンプトはキャッシュ対象に。
- 入力検証: 極端に長い入力 / 連投 を制限。
- ユーザー識別はハッシュ化して
metadata.user_idに。 - 失敗時は 古い応答に戻す or 再試行 UI を提供。
- レート制限はサーバー側でクオータ実装。
Cache をかける
長い system は cache_control: ephemeral で。
ユーザーが多いほどヒット率が上がる。
wzxhzdk:6
Tip: ユーザーごとのカスタム system
「このユーザーは英語で答える」「あのユーザーは詳細な技術解説を好む」など、 ユーザー設定 + 共通システム のハイブリッドが理想。
この academy アプリも参考に
本講座の Playground は同じパターンで実装されています (app.py の api_playground)。
Hands-on Exercise
演習: ミニ Flask チャットを書く
150 行以内で、次の機能を持つ Flask チャットを書いてください。
/で簡単な HTML (チャット UI)/chatPOST: 履歴を受け取り、Streaming で応答を返す- 履歴 30 ターン超なら古いターンを要約に置換
- system は cache_control 付き
🎉
まとめ
お疲れ様でした!