mcpField
A
agentforce-offline-experimentation-run

agentforce-offline-experimentation-run

github.com/forcedotcom测试与质量1.1k44 次安装1 天前更新
代码仓库

关于 agentforce-offline-experimentation-run

用于评估不同 LLM 模型处理现有 Agentforce 对话效果的技能,涵盖从 Data Cloud 会话轨迹到提示词重放、评分及 CSV 和 HTML 报告的流程;部分后续操作仍属提案。

主要功能

  1. 01发现 Agentforce Agent 和会话
  2. 02通过 SFAP AI Gateway 重放提示词
  3. 03评估主题与函数调用
  4. 04判定参数和文本回复质量
  5. 05生成 CSV 和 HTML 报告

适用场景

  1. 01将目标模型与 Agentforce 历史会话对比
  2. 02检查主题与函数调用准确度
  3. 03评估生成的文本回复
  4. 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.py
resolve-token.sh
sfap_replay.py

详细介绍

管理 Agentforce 离线实验

何时使用此技能

当用户想要测试不同的 LLM 模型会如何处理现有的 Agentforce Agent 对话时,执行此工作流。从 Data Cloud STDM 获取会话轨迹,通过 SFAP AI Gateway REST API 使用结构化工具调用重放提示词,按四项指标进行评分(主题一致性、函数名称准确性、通过 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。 工作流门槛:在确认组织别名(从已通过身份验证的组织中自动发现)、Agent API 名称(从 STDM 自动发现)和目标模型 ID(询问用户)之前,不要进入阶段 0 之后的步骤。 SFAP JWT 会在约 2 小时后过期。重放 20 个或更多会话时,请在批次之间刷新令牌。每次 SFAP 重放调用耗时约 1-3 秒;建议少于 20 个会话,以确保合理的实际运行时间(约 10-30 分钟)。 重放完成后,评分和评判步骤(阶段 3)可以并行运行。精确匹配评分会立即完成;LLM 评判调用每轮会额外耗时约 1-2 秒。

关键约束

前提条件:

  • 已在组织中配置并启用 Data Cloud(检查:DataCloudProvisioned)
  • 已在组织中配置 Einstein LLM / GenAI Gateway(检查:EinsteinLlmEnabled)
  • 用户已登录目标组织并通过身份验证(检查:OrgAuthenticated)

操作参考

按用途分组的操作。使用这些操作作为上述工作流的构建模块。

摘要
操作用途状态调用依赖项
discover-data-space读取已实现getDataSpaces—
verify-stdm-availability验证已实现queryCdpAnsiSqlV2discover-data-space
discover-agents读取已实现queryCdpAnsiSqlV2verify-stdm-availability
list-available-models读取已实现queryAiModel—
find-sessions读取已实现queryCdpAnsiSqlV2verify-stdm-availability、discover-agents
get-conversation-details读取拟议queryCdpAnsiSqlV2find-sessions
get-llm-step-details读取拟议queryCdpAnsiSqlV2get-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,查找具有会话轨迹的不同 Agent + 版本组合

调用: queryCdpAnsiSqlV2 — 状态:implemented

依赖项: verify-stdm-availability

list-available-models

列出组织中配置的 Einstein LLM 模型,以帮助用户选择目标模型

调用: queryAiModel — 状态:implemented

find-sessions

按 Agent API 名称、版本和日期范围筛选 STDM 中最近的 Agentforce 会话

调用: queryCdpAnsiSqlV2 — 状态:implemented

输入:

  • agent_api_name (String) — 在 discover-agents 中选择的 Agent API 名称
  • agent_version_api_name (String) — 在 discover-agents 中选择的 Agent 版本 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

获取每次交互的步骤,包括大模型输入和输出

调用: queryCdpAnsiSqlV2 — 状态:proposed

依赖: get-conversation-details

replay-turn-prompts

从 STDM 大模型步骤输入中提取结构化消息(system/assistant/user),转换为 OpenAI 格式的消息数组并保留角色位置,从 gen_ai.request.tools 动态提取工具定义,根据工具签名将每个步骤归类为路由器(主题)或操作,并通过 SFAP REST API POST /ai/gpt/v1/chat/generations 使用 tool_choice=required 重放

状态: 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

当函数名称匹配(精确或宽松匹配)时,使用大模型作为评判器对函数参数进行评分

状态: proposed

依赖: score-exact-matches、obtain-sfap-token

judge-text-responses

使用大模型作为评判器,对以文本输出结束的轮次中的文本回复进行评分

状态: 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) — 用于解析令牌的已通过身份验证的组织别名

评论

支持 Markdown