Route reminders by tool availability, not keyword matching

「7時にモーニングコールをお願い。」のような、REMINDER_KEYWORDS のどれとも
一致しない言い回しがリマインド機能を素通りし、ただの雑談として処理されて
いた(本番の api_logs で実例を確認)。「モーニングコール」「起こして」を
キーワードに追加しても、次の言い回しでまた同じことが起きるだけなので、
キーワード判定そのものをやめる。

discord_bot.on_message は雑談・天気のキーワード分岐はそのまま残し、それ以外の
全メンションで create_reminder / list_reminders / cancel_reminder の3ツールを
常に同席させる(reminders.build_tool_hint() が現在時刻の文脈を添える)。
使うかどうかはLLM自身の判断に委ねるため、キーワード一覧を事前に尽くす必要が
なくなる。本番のBedrock Nova 2 Liteで、実際に失敗していた文言が
create_reminder を正しく呼ぶことを確認済み。

reminders.handle_reminder_request() は resolve_reminder_tools(messages, ctx,
model) に一般化し、discord_bot 側で組み立てたmessages(人格プロンプト+天気
コンテキスト+ツール文脈)をそのまま受け取れるようにした。tool calling
非対応のモデルが設定されていた場合は、1ラウンド目の例外を検知してツール
なしの通常応答にフォールバックする。ツール呼び出しが一般会話の呼び出しに
統合された以上、それだけ別モデルを割り当てる余地がなくなったため
REMINDER_MODEL は廃止する。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 01:17:03 +09:00
co-authored by Claude Opus 5
parent 0ee9fac3f7
commit c6108a1b29
6 changed files with 75 additions and 81 deletions
+2 -3
View File
@@ -74,14 +74,13 @@ USELESS_TIPS_MODEL=
DISCORD_WEBHOOK_URL_TIPS=
# Discord Bot のリマインド機能(メンションで登録し、同じチャンネルへ通知する)
# 全メンションでツールを常に同席させ、使うかどうかはLLMが判断する(キーワード判定なし)ため、
# WEATHER_NOTIFY_MODEL(未設定ならDEFAULT_MODEL)は tool calling 対応モデルである必要がある
# 期限切れのリマインドを探しにいく間隔(秒)
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