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

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