タイムゾーン: SQLite の DATETIME は tzinfo を保存できず、DateTime(timezone=True) を 指定してもバインド時に捨てられるため、API のレスポンスがオフセット無しの ISO 文字列になりフロントがローカル時刻として誤解していた。UtcDateTime (TypeDecorator) を追加し、書き込み時は naive な UTC に正規化、読み出し時は UTC の aware として返すようにする。格納フォーマットは変わらないので既存 データはそのまま正しく解釈でき、マイグレーションは不要。 コンテナは TZ 未設定で UTC だったため、天気通知の cron 時刻・深夜スキップ 判定・「明日」の日付計算が9時間ずれていた。TZ=Asia/Tokyo を指定し、slim イメージに無い tzdata を導入する。 蓄積知識: 層1が最新15件の要約全文を毎リクエスト無条件に注入しており、同じ内容が ローカルKB(層3)にも保存されているため重複していた。層1を「クエリ+ 一行要約」の目次に変え、本文は read_knowledge ツールで読み出す形にする。 一行要約は要約生成時の既存 LLM 呼び出しに相乗りするので呼び出し回数は 増えない。headline を持たない既存エントリは本文の先頭行から導出する。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
48 lines
1.3 KiB
YAML
48 lines
1.3 KiB
YAML
services:
|
|
backend:
|
|
build:
|
|
context: ./backend
|
|
restart: unless-stopped
|
|
env_file:
|
|
- ./backend/.env
|
|
environment:
|
|
# SQLite ファイルと知識ベースを永続ボリュームに置く(.env の値を上書き)
|
|
DATABASE_URL: sqlite:////app/data/playchat.db
|
|
# コンテナのタイムゾーン。未設定だとUTCになり、天気通知のcron時刻・深夜スキップ判定・
|
|
# 「明日」の日付計算がすべて9時間ずれる。プロセス起動前に効かせる必要があるため
|
|
# .env ではなくここで指定する(後から os.environ に入れても libc には反映されない)。
|
|
TZ: Asia/Tokyo
|
|
volumes:
|
|
- backend_data:/app/data
|
|
- backend_knowledge_base:/app/knowledge_base
|
|
expose:
|
|
- "8000"
|
|
|
|
frontend:
|
|
build:
|
|
context: ./frontend
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- backend
|
|
expose:
|
|
- "80"
|
|
|
|
caddy:
|
|
image: caddy:latest
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./Caddyfile:/etc/caddy/Caddyfile
|
|
- caddy_data:/data
|
|
- caddy_config:/config
|
|
depends_on:
|
|
- frontend
|
|
|
|
volumes:
|
|
backend_data:
|
|
backend_knowledge_base:
|
|
caddy_data:
|
|
caddy_config:
|