Store timestamps as UTC-aware and slim the knowledge context to headlines

タイムゾーン:
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>
This commit is contained in:
2026-08-20 14:22:59 +09:00
co-authored by Claude Opus 5
parent 8b2231ea97
commit be3af44891
13 changed files with 427 additions and 49 deletions
+4
View File
@@ -8,6 +8,10 @@ services:
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