リマインドが「⚠️ 応答の生成に失敗しました」だけを返して原因が追えなかった ため、失敗経路を個別に捕まえてログにも残るようにする。 ロギング: uvicorn は自分のロガーしか設定しないため、アプリ側の logging.getLogger(__name__) は logging.lastResort 送りになっていた。 WARNING 未満が全て消え、出力にレベルもタイムスタンプもロガー名も付かず、 logger.info("Reminder created: ...") すら残らない状態だった。 main.py で basicConfig を呼び、LOG_LEVEL(既定 INFO)で制御する。 reminders.py: - choices[0].message の取り出しを個別に捕捉する。tool calling 非対応の エンドポイントは例外を投げずに choices が空の応答を返すことがあり、 ここで落ちると on_message の汎用ハンドラに流れて原因が消える - ツール実行を _run_tool() に切り出し、DBエラーを専用の文言で返す。 併せてDBセッションをツール1回分だけ開くようにした。LLMとの往復のあいだ 握り続けると SQLite のロックを長時間保持し、同時に走るAPIリクエストと 競合して "database is locked" を起こしうるため - tool_choice="auto" を渡すのをやめた。Bedrock はこの引数に非対応で、 今まで通っていたのは app.core.llm が litellm.drop_params=True を 立てている副作用に過ぎず、import 順が変われば壊れる。tools を渡した ときの既定が "auto" なので省いても挙動は変わらない - どのモデルで何を処理したかを INFO で残す CLAUDE.md には Lightsail への接続方法(作業ツリーにあった未コミット分)も 含む。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
92 lines
4.4 KiB
Bash
92 lines
4.4 KiB
Bash
# LLM設定
|
||
DEFAULT_MODEL=gpt-5.4
|
||
# OpenAI
|
||
OPENAI_API_KEY=sk-...
|
||
# OpenAI互換エンドポイントに向ける場合だけ設定する(ローカルの llama-server / Ollama など)。
|
||
# 設定したままにすると、gpt-* のモデルを選んでも接続先がそちらのままになり、
|
||
# 本家OpenAIには繋がらない(litellm は OPENAI_API_BASE、OpenAI SDK は OPENAI_BASE_URL を見る)。
|
||
# サーバーにデプロイする際はこの2行を消し忘れないこと。GUIの設定画面からも変更できる。
|
||
# OPENAI_API_BASE=http://localhost:11434/v1
|
||
# OPENAI_BASE_URL=http://localhost:11434/v1
|
||
# Anthropic
|
||
ANTHROPIC_API_KEY=sk-ant-...
|
||
# Ollama (ローカル) — APIキー不要、モデル名は ollama/llama3 形式で指定
|
||
OLLAMA_API_BASE=http://localhost:11434
|
||
# Amazon Bedrock (IAM経由 — Access Key方式) — モデル名は bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0 形式で指定
|
||
AWS_ACCESS_KEY_ID=
|
||
AWS_SECRET_ACCESS_KEY=
|
||
AWS_REGION_NAME=us-east-1
|
||
# 旧: API key方式(Bearer Token)。IAMを使う場合は不要
|
||
AWS_BEARER_TOKEN_BEDROCK=
|
||
|
||
# デバッグ (true にすると LiteLLM の詳細ログが出力される)
|
||
DEBUG=false
|
||
|
||
# GUIの「設定」画面(APIキー等の変更)を保護する簡易パスワード。
|
||
# 未設定だと設定画面は常に403で拒否される(=GUIからのAPIキー変更機能を使わないなら空でよい)。
|
||
# HTTPS化していない環境ではBasic認証の資格情報が平文で流れるため、公開環境ではHTTPS化とセットで使うこと。
|
||
SETTINGS_PASSWORD=
|
||
|
||
# サイト全体(チャット含む全機能)を保護する簡易パスワード。SETTINGS_PASSWORDとは別物。
|
||
# 未設定だとこれまで通りサイト全体が無認証で使える。外部公開する場合は必ず設定すること。
|
||
SITE_PASSWORD=
|
||
# セッションCookieの署名鍵。未設定でも動くが、その場合バックエンド再起動のたびに全員ログインし直しになる。
|
||
# 公開環境では `openssl rand -hex 32` などで生成した値を設定しておくこと。
|
||
SESSION_SECRET_KEY=
|
||
# ローカルのhttp開発環境(HTTPS化していない)でログインが効かない場合のみ false にする。公開環境では変更しないこと。
|
||
SESSION_COOKIE_SECURE=true
|
||
# ログインセッションの有効日数
|
||
SESSION_MAX_AGE_DAYS=30
|
||
|
||
# Tavily Web検索(未設定だとweb_searchツールは何も検索せず空振りする)
|
||
TAVILY_API_KEY=
|
||
# 蓄積知識をシステムプロンプトに注入する際の最大件数
|
||
KNOWLEDGE_CONTEXT_LIMIT=15
|
||
# Web検索結果を構造的な要約にまとめる際に使うモデル(未設定ならDEFAULT_MODELを使用)
|
||
SEARCH_SUMMARY_MODEL=
|
||
|
||
# ローカルMarkdownナレッジベース(backend/knowledge_base/ 配下のファイルを話題に応じて注入)
|
||
LOCAL_KB_DIR=knowledge_base
|
||
# Ollamaを使う場合は ollama/nomic-embed-text のように指定(OLLAMA_API_BASEも参照される)
|
||
LOCAL_KB_EMBEDDING_MODEL=text-embedding-3-small
|
||
LOCAL_KB_TOP_K=3
|
||
LOCAL_KB_MIN_SCORE=0.75
|
||
|
||
# 天気予報 → Discord 通知
|
||
DISCORD_WEBHOOK_URL=
|
||
WEATHER_AREA_CODE=120000
|
||
WEATHER_AREA_KEYWORD=北西部
|
||
WEATHER_NOTIFY_HOUR=22
|
||
WEATHER_NOTIFY_MINUTE=0
|
||
# 通知文をLLMで生成する場合のモデル(未設定ならDEFAULT_MODELを使用)
|
||
WEATHER_NOTIFY_MODEL=
|
||
|
||
# Discord Bot(メンションへの自動返信用)
|
||
DISCORD_BOT_TOKEN=
|
||
# 未設定ならデフォルトの「お天気アプリ」ペルソナが使われる
|
||
DISCORD_BOT_SYSTEM_PROMPT=
|
||
|
||
# どうでもいいtipsを定期的にDiscordへ投稿
|
||
USELESS_TIPS_ENABLED=false
|
||
USELESS_TIPS_INTERVAL_HOURS=3
|
||
USELESS_TIPS_MODEL=
|
||
# 未設定ならDISCORD_WEBHOOK_URL(天気通知と同じ)を使う
|
||
DISCORD_WEBHOOK_URL_TIPS=
|
||
|
||
# Discord Bot のリマインド機能(メンションで登録し、同じチャンネルへ通知する)
|
||
# 期限切れのリマインドを探しにいく間隔(秒)
|
||
REMINDER_CHECK_INTERVAL_SECONDS=30
|
||
# これより先の日時は登録を拒否する(日数)
|
||
REMINDER_MAX_AHEAD_DAYS=365
|
||
REMINDER_LIST_LIMIT=20
|
||
# 日時の解釈に使うモデル。tool calling 対応モデルを指定すること
|
||
# (未設定なら WEATHER_NOTIFY_MODEL → DEFAULT_MODEL の順にフォールバック)
|
||
REMINDER_MODEL=
|
||
|
||
# アプリ設定
|
||
DATABASE_URL=sqlite:///./playchat.db
|
||
MEMORY_SUMMARIZE_THRESHOLD=20
|
||
CORS_ORIGINS=http://localhost:5173
|
||
# アプリ側ログの出力レベル(DEBUG / INFO / WARNING / ERROR)
|
||
LOG_LEVEL=INFO
|