Files
playchat/CLAUDE.md
T
2026-06-01 20:16:53 +09:00

85 lines
2.3 KiB
Markdown

# 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` でエンドポイントを設定。