# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## プロジェクト概要 Python (FastAPI) バックエンド + Vue 3 (TypeScript) フロントエンドのチャットアプリ。 LLM は LiteLLM 経由で OpenAI / Anthropic / Ollama など任意のプロバイダーを統一APIで扱い、会話履歴とメモリは SQLite に永続化する。 ## コマンド ### バックエンド ```powershell Set-Location backend # 依存インストール (uv 推奨) uv sync # または pip install -e . # 開発サーバー起動 uvicorn app.main:app --reload # テスト pytest pytest tests/test_chat.py # 単一ファイル ``` ### フロントエンド ```powershell Set-Location frontend # 依存インストール npm install # 開発サーバー起動 (port 5173) npm run dev # ビルド npm run build # 型チェック npm run type-check ``` ### 環境設定 ```powershell Set-Location backend Copy-Item .env.example .env # .env を編集してAPIキーとモデル名を設定 ``` ## アーキテクチャ 詳細は `docs/architecture.md` を参照。 ``` frontend (Vue3+Pinia, :5173) ↕ REST + SSE backend (FastAPI, :8000) ├── app/api/ ルーター (chat.py, memory.py) ├── app/core/ ビジネスロジック (llm.py, memory.py, config.py) └── app/db/ SQLAlchemy モデル・DB接続 ↕ SQLite (playchat.db) + LiteLLM → 任意のLLM ``` ### メモリ機構 - **短期**: セッション内の全メッセージをコンテキストに含める - **長期**: メッセージ数が `MEMORY_SUMMARIZE_THRESHOLD`(デフォルト20) を超えると、古い半分をLLMで要約して `memories` テーブルに保存し、次回以降のシステムプロンプトに注入する ### SSEストリーミング `POST /chat/stream` が SSE を返す。チャンク種別: `session_id`(新規セッションID)、`chunk`(テキスト断片)、`done`(完了)。 フロントは `src/api/client.ts` の `streamChat()` で fetch + ReadableStream により受信。 ### モデル切替 `.env` の `DEFAULT_MODEL` またはリクエストの `model` フィールドで指定。 ローカル Ollama は `ollama/llama3` 形式で指定、`OLLAMA_API_BASE` でエンドポイントを設定。