Archive summarized messages instead of deleting them
要約で長期メモリに移したメッセージをDBから物理削除していたため、
一度要約されると人間も内容を確認できなくなっていた。削除をやめ、
messages に archived_at(要約に取り込まれた時刻)と memory_id
(どの要約に取り込まれたか)を持たせる。
モデルからは従来どおり見えない:
- get_context_messages() がアーカイブ済みを除外する
- maybe_summarize() の閾値判定も現役メッセージだけを数える
(ここを除外し忘れると件数が減らず再要約が繰り返される)
- backfill_tags() もアーカイブ済みは対象外にする
人間からは確認できる:
- GET /chat/sessions/{id}/messages がアーカイブ済みも archived_at
付きで返す。export/import もアーカイブ状態を保持する
- チャット画面では半透明で表示し、最後のアーカイブ済みメッセージの
直後に「ここから先がモデルに渡る」区切り線を出す
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+5
-3
@@ -48,13 +48,15 @@ SSE でストリーミング応答を返す。
|
||||
---
|
||||
|
||||
### GET /chat/sessions/{session_id}/messages
|
||||
セッションのメッセージ一覧を `created_at` 昇順で返す。
|
||||
セッションのメッセージ一覧を `created_at` 昇順で返す。要約に取り込まれた(アーカイブ済みの)
|
||||
メッセージも含めて返し、`archived_at` で区別する。アーカイブ済みのものは LLM に渡す
|
||||
コンテキストには入らないが、履歴としては残っている。
|
||||
|
||||
**レスポンス**
|
||||
```json
|
||||
[
|
||||
{ "id": 1, "role": "user", "content": "...", "created_at": "..." },
|
||||
{ "id": 2, "role": "assistant", "content": "...", "created_at": "..." }
|
||||
{ "id": 1, "role": "user", "content": "...", "created_at": "...", "archived_at": "2026-08-20T04:00:00+00:00", "tags": [] },
|
||||
{ "id": 2, "role": "assistant", "content": "...", "created_at": "...", "archived_at": null, "tags": [] }
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user