第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.pyapi_playground)。

Hands-on Exercise

演習: ミニ Flask チャットを書く

150 行以内で、次の機能を持つ Flask チャットを書いてください。

  • / で簡単な HTML (チャット UI)
  • /chat POST: 履歴を受け取り、Streaming で応答を返す
  • 履歴 30 ターン超なら古いターンを要約に置換
  • system は cache_control 付き
▶ Playground を開いて実行

理解度チェック

3 問のクイズで理解度を確認しましょう。

クイズを開く
🎉

まとめ

お疲れ様でした!