タイムゾーン: 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>
30 lines
1001 B
Docker
30 lines
1001 B
Docker
FROM python:3.12-slim
|
|
|
|
# slim イメージには /usr/share/zoneinfo が無く、TZ を設定してもUTCのままになるため入れる。
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends tzdata \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN pip install --no-cache-dir uv
|
|
|
|
WORKDIR /app
|
|
|
|
# UV_COMPILE_BYTECODE は無効のまま(janomeの辞書データファイルが巨大で、
|
|
# 事前バイトコードコンパイルが小規模インスタンスで60秒タイムアウトすることがあるため)。
|
|
# 初回import時に遅延コンパイルされるだけで動作に影響はない。
|
|
ENV UV_LINK_MODE=copy \
|
|
PYTHONUNBUFFERED=1
|
|
|
|
# 依存関係だけ先にインストールしてレイヤーキャッシュを効かせる
|
|
COPY pyproject.toml uv.lock ./
|
|
RUN uv sync --frozen --no-install-project --no-dev
|
|
|
|
COPY . .
|
|
RUN uv sync --frozen --no-dev
|
|
|
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
|
|
EXPOSE 8000
|
|
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|