agentforce-offline-experimentation-run について
既存の Agentforce 会話に対する別の LLM モデルの応答を評価するスキルです。Data Cloud のセッション追跡からプロンプトの再実行、採点、CSV・HTML レポート作成までを扱いますが、後半の一部操作は提案段階です。
主な機能
- 01Agentforce のエージェントとセッションの検出
- 02SFAP AI Gateway 経由のプロンプト再実行
- 03トピックと関数呼び出しの採点
- 04引数とテキスト応答の判定
- 05CSV・HTML レポートの作成
活用シーン
- 01対象モデルを Agentforce の既存セッションと比較
- 02トピックと関数呼び出しの精度確認
- 03生成されたテキスト応答の評価
- 04実験結果の判定レポート作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill agentforce-offline-experimentation-runインストール後、Claude Code で/agentforce-offline-experimentation-runを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/build_report.pyresolve-token.shsfap_replay.py詳細
Agentforce オフライン実験の管理
このスキルを使用する場面
異なる LLM モデルが既存の Agentforce エージェントの会話をどのように処理するかをテストしたいというユーザーの要望に応じて、このワークフローを実行します。Data Cloud STDM からセッショントレースを取得し、構造化ツール呼び出しを使って SFAP AI Gateway REST API 経由でプロンプトを再生し、4 つの指標(トピックの一致度、関数名の正確性、LLM による判定を介した関数引数の正確性、LLM による判定を介したテキスト応答の品質)でスコアを付け、SAFE/REVIEW/UNSAFE の判定バッジ付きの CSV および HTML レポートを生成します。Agentforce Activity データストリーミングが有効になった Data Cloud、認証済みの組織、ターゲットモデル ID(SFAP による再生には llmgateway__ プレフィックスが必要)が必要です。10 セッションの場合の推定実行時間は 10~30 分です。
ワークフロー
discover-data-space → verify-stdm-availability → discover-agents → list-available-models(モデル選びのサポートが必要な場合)→ find-sessions → get-conversation-details → get-llm-step-details → obtain-sfap-token → replay-turn-prompts → [score-exact-matches, judge-function-args, judge-text-responses] → generate-csv-report → generate-html-report. ワークフローのゲート:フェーズ 0 を越えて進む前に、組織のエイリアス(認証済み組織から自動検出)、エージェント API 名(STDM から自動検出)、ターゲットモデル ID(ユーザーに確認)のすべてを確定してください。 SFAP JWT の有効期限は約 2 時間です。20 セッション以上を再生する場合は、バッチの合間にトークンを更新してください。SFAP の再生呼び出しにはそれぞれ約 1~3 秒かかります。妥当な実時間(約 10~30 分)に収めるため、20 セッション未満にしてください。 再生が完了したら、スコアリングと判定のステップ(フェーズ 3)は並行して実行できます。一致判定のスコアリングは即時に完了します。LLM による判定の呼び出しには、ターンごとに約 1~2 秒かかります。
重要な制約
前提条件:
- Data Cloud が組織にプロビジョニングされ、有効になっていること(確認項目:
DataCloudProvisioned) - Einstein LLM/GenAI Gateway が組織に設定されていること(確認項目:
EinsteinLlmEnabled) - ユーザーがターゲット組織への認証済みセッションを持っていること(確認項目:
OrgAuthenticated)
操作リファレンス
操作を目的別に分類しています。以下の操作を、上記のワークフローを構成する要素として使用してください。
概要
| 操作 | 目的 | ステータス | 呼び出し | 依存先 |
|---|---|---|---|---|
discover-data-space | 読み取り | 実装済み | getDataSpaces | — |
verify-stdm-availability | 検証 | 実装済み | queryCdpAnsiSqlV2 | discover-data-space |
discover-agents | 読み取り | 実装済み | queryCdpAnsiSqlV2 | verify-stdm-availability |
list-available-models | 読み取り | 実装済み | queryAiModel | — |
find-sessions | 読み取り | 実装済み | queryCdpAnsiSqlV2 | verify-stdm-availability、discover-agents |
get-conversation-details | 読み取り | 提案済み | queryCdpAnsiSqlV2 | find-sessions |
get-llm-step-details | 読み取り | 提案済み | queryCdpAnsiSqlV2 | get-conversation-details |
obtain-sfap-token | 検証 | 提案済み | — | — |
replay-turn-prompts | 読み取り | 提案済み | — | get-llm-step-details、obtain-sfap-token |
score-exact-matches | 読み取り | 提案済み | — | replay-turn-prompts |
judge-function-args | 読み取り | 提案済み | — | score-exact-matches、obtain-sfap-token |
judge-text-responses | 読み取り | 提案済み | — | replay-turn-prompts、obtain-sfap-token |
generate-csv-report | 書き込み | 提案済み | — | score-exact-matches、judge-function-args、judge-text-responses |
generate-html-report | 書き込み | 提案済み | — | generate-csv-report |
依存関係グラフ
graph TD
discover_data_space["discover-data-space (read)"]
verify_stdm_availability["verify-stdm-availability (validate)"]
discover_agents["discover-agents (read)"]
list_available_models["list-available-models (read)"]
find_sessions["find-sessions (read)"]
get_conversation_details["get-conversation-details (read)"]
get_llm_step_details["get-llm-step-details (read)"]
obtain_sfap_token["obtain-sfap-token (validate)"]
replay_turn_prompts["replay-turn-prompts (read)"]
score_exact_matches["score-exact-matches (read)"]
judge_function_args["judge-function-args (read)"]
judge_text_responses["judge-text-responses (read)"]
generate_csv_report["generate-csv-report (write)"]
generate_html_report["generate-html-report (write)"]
discover_data_space --> verify_stdm_availability
verify_stdm_availability --> discover_agents
verify_stdm_availability --> find_sessions
discover_agents --> find_sessions
find_sessions --> get_conversation_details
get_conversation_details --> get_llm_step_details
get_llm_step_details --> replay_turn_prompts
obtain_sfap_token --> replay_turn_prompts
replay_turn_prompts --> score_exact_matches
score_exact_matches --> judge_function_args
obtain_sfap_token --> judge_function_args
replay_turn_prompts --> judge_text_responses
obtain_sfap_token --> judge_text_responses
score_exact_matches --> generate_csv_report
judge_function_args --> generate_csv_report
judge_text_responses --> generate_csv_report
generate_csv_report --> generate_html_report
読み取り操作
discover-data-space
組織内のアクティブな Data Cloud データスペースを検出します
呼び出し: getDataSpaces — ステータス:implemented
discover-agents
STDM にクエリを実行し、セッショントレースがあるエージェントとバージョンの組み合わせを重複なく取得します
呼び出し: queryCdpAnsiSqlV2 — ステータス:implemented
依存先: verify-stdm-availability
list-available-models
ユーザーがターゲットモデルを選べるように、組織に設定されている Einstein LLM モデルを一覧表示します
呼び出し: queryAiModel — ステータス:implemented
find-sessions
エージェント API 名、バージョン、日付範囲で絞り込んで、STDM 内の最近の Agentforce セッションを検索します
呼び出し: queryCdpAnsiSqlV2 — ステータス:implemented
入力:
agent_api_name(String) — discover-agents で選択したエージェント API 名agent_version_api_name(String) — discover-agents で選択したエージェントバージョン API 名start_date(String)end_date(String)max_sessions(Integer)
依存関係: verify-stdm-availability、discover-agents
get-conversation-details
各セッションのインタラクション(ターン)を STDM Interaction DMO から取得します
呼び出し: queryCdpAnsiSqlV2 — ステータス:proposed
依存関係: find-sessions
get-llm-step-details
各インタラクションについて、LLM の入力と出力を含むインタラクションステップを取得します
呼び出し: queryCdpAnsiSqlV2 — ステータス:proposed
依存関係: get-conversation-details
replay-turn-prompts
STDM の LLM ステップ入力から構造化メッセージ(system/assistant/user)を抽出し、ロールの位置を保持したまま OpenAI 形式のメッセージ配列に変換します。gen_ai.request.tools からツール定義を動的に抽出し、ツールのシグネチャに基づいて各ステップをルーター(トピック)またはアクションに分類して、tool_choice=required を指定し、SFAP REST API POST /ai/gpt/v1/chat/generations 経由で再生します
ステータス: proposed
入力:
target_model(String) — 対象モデル ID(llmgateway__ プレフィックス、例:llmgateway__OpenAIGPT41)
依存関係: get-llm-step-details、obtain-sfap-token
score-exact-matches
トピックの一致度と関数名の正確性について、完全一致スコアを計算します
ステータス: proposed
依存関係: replay-turn-prompts
judge-function-args
関数名が一致する場合(完全一致または緩やかな一致)の関数引数を、LLM-as-judge でスコアリングします
ステータス: proposed
依存関係: score-exact-matches、obtain-sfap-token
judge-text-responses
テキスト出力で終了するターンのテキスト応答を、LLM-as-judge でスコアリングします
ステータス: proposed
依存関係: replay-turn-prompts、obtain-sfap-token
書き込み操作
generate-csv-report
ターンごとの再生結果と集計スコアの概要を含む CSV レポートを生成します
ステータス: proposed
入力:
output_csv(String)
依存関係: score-exact-matches、judge-function-args、judge-text-responses
generate-html-report
判定バッジ、スコアカード、失敗の内訳を含む、自己完結型の HTML 分析レポートを作成します
ステータス: proposed
入力:
html_output(String)
依存関係: generate-csv-report
その他の操作
verify-stdm-availability
Data Cloud で STDM(Session Trace Data Model)をクエリできることを確認します
呼び出し: queryCdpAnsiSqlV2 — ステータス:implemented
依存関係: discover-data-space
obtain-sfap-token
組織のセッション認証と /ide/auth エンドポイントを使用して、SFAP JWT トークンを取得します
ステータス: proposed
入力:
org_alias(String) — トークン解決に使用する認証済み組織のエイリアス