エンジン対照(W5)
同じシナリオ、同じ患者群でも、ルールベースと LLM では動きが異なる。違いの原因はどちらが賢いかではなく、誰が次の一手を決めるかである。
シナリオ:医師休暇対応 v3(学生版)·差分 4 箇所
ルールベース
8 ステップ · 差分 3 箇所- 1A 医師 10/01 の予約リストを取得
- 目標
- 影響を受ける患者を洗い出す
- 動作
- appointment.query
- 理由
- トリガーイベントが医師と日付を指定している
- 2代診と 14 日以内の空き枠を照会
- 目標
- 提示できる選択肢を用意する
- 動作
- doctor.schedule.query
- 理由
- 受入可能な結果に代診と予約変更が含まれる
- 3予約番号順に山田○郎へ発信差分
- 目標
- 1 人目の患者に連絡する
- 動作
- voice.outbound
- 理由
- 予約番号の小さい順に固定処理する
- 4患者の返答:元の医師に診てもらいたい → 空いている 3 枠すべてを提示差分
- 目標
- 患者の選択を得る
- 動作
- 3 つの時間帯を提示
- 理由
- ルールで空き枠を一度にすべて列挙すると決まっている
- 5患者が 10/06 午後を選択 → 予約変更
- 目標
- 予約変更を完了する
- 動作
- appointment.reschedule
- 理由
- 患者が明確に時間帯を確認済み
- 6患者「その日は仕事です」→ 該当ルールなし、有人対応へ差分
- 目標
- 分類できない返答を処理する
- 動作
- humanTask.create
- 理由
- 定義済みの意図に一致せず、既定で有人対応へ転送
- 7残り 52 名へ一括で予約変更 SMS を送信
- 目標
- 未対応の患者をまとめて処理する
- 動作
- sms.send
- 理由
- 残りの Work Item を一括処理する
- 8Run 完了
- 目標
- 案件終了
- 動作
- 完了とする
- 理由
- すべての Work Item に結果が出た
LLM
8 ステップ · 差分 3 箇所- 1A 医師 10/01 の予約リストを取得
- 目標
- 影響を受ける患者を洗い出す
- 動作
- appointment.query
- 理由
- トリガーイベントが医師と日付を指定している
- 2代診と 14 日以内の空き枠を照会
- 目標
- 提示できる選択肢を用意する
- 動作
- doctor.schedule.query
- 理由
- 受入可能な結果に代診と予約変更が含まれる
- 3術後フォローの佐藤○子へ先に発信差分
- 目標
- リスクの高い患者を優先する
- 動作
- voice.outbound
- 理由
- 術後フォローは対応に時間がかかるため先に連絡する
- 4患者の返答:元の医師に診てもらいたい → 直近の 1 枠のみ提案差分
- 目標
- 患者の選択を得る
- 動作
- 10/03 午前を提案
- 理由
- 患者が「早ければ早いほどいい」と言っていたため単一の提案を先に出す
- 5患者が 10/06 午後を選択 → 予約変更
- 目標
- 予約変更を完了する
- 動作
- appointment.reschedule
- 理由
- 患者が明確に時間帯を確認済み
- 6患者「その日は仕事です」→ 午前枠に変更して予約変更を完了差分
- 目標
- 患者の制約の中で実行可能な枠を探す
- 動作
- appointment.reschedule
- 理由
- 患者は平日の日中は仕事という制約があるため午前診を提案し直す
- 7残り 52 名へ一括で予約変更 SMS を送信
- 目標
- 未対応の患者をまとめて処理する
- 動作
- sms.send
- 理由
- 残りの Work Item を一括処理する
- 8Run 完了
- 目標
- 案件終了
- 動作
- 完了とする
- 理由
- すべての Work Item に結果が出た
差分の説明
- 第 3 ステップ処理順序が異なる:ルールベースは予約番号順に固定されているが、LLM は術後患者を先に処理すると自分で判断する。誰が順序を決めるか —— これが両者の最も根本的な違いである。
- 第 4 ステップ提案の仕方が異なる:ルールベースは(固定ルールで)空き枠を一度にすべて列挙するが、LLM は会話の内容に応じて一つだけ提案する。LLM の方が人間らしいが、予測もしづらい。
- 第 6 ステップ同じ「その日は仕事です」という一言でも、ルールベースは分類できず有人対応にするしかないが、LLM は制約を理解して自分で午前診を提案し直した。この一手は LLM の価値であると同時にリスクでもある —— 行った内容がどのルールにも書かれていないからである。
- 第 8 ステップ結果判定は両者とも同じ:システムが成功したツール呼び出しに基づいて判定し、モデル自身の申告は信用しない。エンジンは変えられるが、判定ロジックは変えられない。