2.3 KiB
2.3 KiB
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 に永続化する。
コマンド
バックエンド
Set-Location backend
# 依存インストール (uv 推奨)
uv sync
# または
pip install -e .
# 開発サーバー起動
uvicorn app.main:app --reload
# テスト
pytest
pytest tests/test_chat.py # 単一ファイル
フロントエンド
Set-Location frontend
# 依存インストール
npm install
# 開発サーバー起動 (port 5173)
npm run dev
# ビルド
npm run build
# 型チェック
npm run type-check
環境設定
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 でエンドポイントを設定。