CSのTips一覧

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が渡らない。確かめることは?

  1. 表示文をもっと丁寧にする
  2. messageに承認済みと書き加える
  3. 次ノード用のoutputにIDと状態を返しているか
解答と解説

次ノード用のoutputにIDと状態を返しているか

利用者向けメッセージと次ノードへの出力は用途が違う。表示文の言い換えで解決せず、outputと後段の入力スキーマを確認する。