ADKの画面向けメッセージと次ノードへの出力を分ける
ADK 2.xのPythonグラフでは、Eventのmessageは利用者向け、outputは次のノードへ渡すデータ。画面に「照会完了」と表示できても、後段に業務データを渡せたとは限らない。
用語
- イベント
- ノードの出力やメッセージなどを実行中に伝えるデータ。
- スキーマ
- 処理間で渡すデータの項目や型を定めたもの。
- アーティファクト
- 生成物や大きなデータを、会話状態とは別に扱うための対象。
図と例
messageで進捗を表示 → outputで構造化データを渡す → 必要な値をstateに保持 → 後段でIDと状態を検証
仮定の例:画面には「見積もりを準備しました」と表示し、outputには見積もりIDと確認待ち状態を返す。後段は表示文から「承認済み」と推測せず、状態を検証する。
実際のサービス・製品では
Google ADK 2.x
ADKのデータ資料はPythonのEventにおけるoutput・message・stateの役割と、ノード間のスキーマを説明する。このTipのフィールド名はPython版ADK 2.xを対象とする。
資料を読む
解説
表示文の言語や表現を変えても処理結果が変わらないか試す。ノード間で渡すスキーマと、セッションに保持する値を別々に確認する。
イベントには利用者向けの説明と、処理間で受け渡すデータという異なる役割がある。PythonのEventではmessageとoutputを使い分け、セッションを通して保持する値はstateで扱う。ノード間のデータにはスキーマを定め、対象ID、照会結果、判定状態を構造化して渡す。表示文を後段が再解釈して実行対象を決める設計は避ける。stateに大きな原本を詰め込まず、必要に応じてアーティファクトや外部保存先の参照を使う。言語別SDKでフィールド名が異なるため、Pythonの名前を他のSDKへそのまま当てはめない。
トレードオフ
- 表示文と構造化した出力を分ける
- 得るもの:画面の表現を変えても処理の入力を保ちやすい
- 払うもの:表示とデータの対応を検証する必要がある
- 小さな一時値をstateで共有する
- 得るもの:複数のノードや会話の次のやり取りで参照できる
- 払うもの:保持する範囲を広げすぎると古い値を使いやすい
さらに学ぶ
チェック
PythonのADKグラフでmessageだけを送ったノードの画面表示は正常だが、後段に見積もりIDが渡らない。確かめることは?
- 表示文をもっと丁寧にする
- messageに承認済みと書き加える
- 次ノード用のoutputにIDと状態を返しているか
解答と解説
次ノード用のoutputにIDと状態を返しているか
利用者向けメッセージと次ノードへの出力は用途が違う。表示文の言い換えで解決せず、outputと後段の入力スキーマを確認する。