feixiaoxu2022

scenario-design

2
0
# Install this skill:
npx skills add feixiaoxu2022/agent-evaluation-skills --skill "scenario-design"

Install specific skill from multi-skill repository

# Description

设计Agent评测场景的统一配置文件(unified_scenario_design.yaml)。当需要创建新评测场景、设计需求模板、提升样本难度时使用此技能。这是init阶段最核心的工作,决定了样本质量和难度。

# SKILL.md


name: scenario-design
description: 设计Agent评测场景的统一配置文件(unified_scenario_design.yaml)。当需要创建新评测场景、设计需求模板、提升样本难度时使用此技能。这是init阶段最核心的工作,决定了样本质量和难度。


场景设计指南

Overview

场景设计是评测框架的init阶段核心工作,产出unified_scenario_design.yaml作为后续所有环节的输入。

核心原则:难度来自真实业务复杂性,而非人为刁难;可验证是底线

Agent能力评测体系(9个核心能力)

场景设计的最终目标是全方位评测LLM Agent在实际落地中的必备能力。每个场景应至少测试其中2-3个能力:

能力维度 定义 典型测试场景
1. 多模态理解 处理和融合文本、图像等多模态信息 文档审阅、图表分析、截图问题诊断
2. 复杂上下文理解 跨轮整合上下文并保持一致性 多轮对话任务、需求收集、上下文依赖推理
3. Prompt遵循 理解并遵循用户指令与业务规则 复杂业务规则执行、约束条件遵守
4. Tool Use 准确选择工具并构造参数 工具选择、参数构造、错误处理
5. 任务规划与工具组合 任务分解与工具编排 多步骤流程、工具链组合、依赖关系处理
6. 多轮对话管理与用户引导 结构化收集信息与清晰反馈 信息收集、澄清确认、进度同步
7. 反思与动态调整 基于执行结果诊断并调整策略 错误恢复、异常处理、策略调整
8. 多源信息深度融合与洞察 处理多源数据的一致性与权衡 数据冲突处理、优先级判断、信息整合
9. 结合领域知识的自主规划 利用领域知识做出专业决策 专业领域任务、技术实现、算法选择

设计方法与能力的映射

设计方法 主要测试能力 辅助测试能力
复杂业务规则 3-Prompt遵循, 8-多源信息融合 4-Tool Use, 5-任务规划
领域知识门槛 9-领域知识自主规划 3-Prompt遵循
人类共识任务 8-多源信息融合, 6-用户引导 2-上下文理解
多轮需求变更 2-上下文理解, 6-用户引导 7-反思与调整
信息洋葱 5-任务规划, 4-Tool Use 2-上下文理解, 7-反思与调整

场景设计时的能力覆盖检查

设计场景时,建议在YAML中增加tested_capabilities字段标注测试的能力:

tested_capabilities:
  - capability: "Prompt遵循"
    测试方式: "复杂业务规则中的条件判断和优先级处理"
  - capability: "Tool Use"
    测试方式: "正确选择工具和构造参数以完成状态更新"
  - capability: "多源信息融合"
    测试方式: "从多个实体中提取信息并做出决策"

五种设计方法

根据场景特点选择合适的设计方法(可组合使用):

方法 适用场景 复杂性来源 验证方式
复杂业务规则 任务分配、费用计算、资源调度 条件分支+状态更新+算法映射 final_state状态验证
领域知识门槛 技术任务、算法实现、安全评测 专家常识盲区 隐藏Boss测试
人类共识任务 信息记忆、优先级判断、质量评估 设计阶段/评估阶段共识 Rule-based或人工标注
多轮需求变更 客服对话、需求收集、项目管理 上下文累积+需求变化 final_state状态验证
信息洋葱 审批流程、工单处理、多级查询 多步推理链(GAIA思想) 最终答案验证

推荐组合:多轮变更 + 信息洋葱 + 复杂规则

详细指南references/scenario_design_patterns.md

YAML核心结构

scenario_name: "场景名称"
sub_scenario_type: "子场景类型"
description: "场景描述"

runtime_config:           # 时间基准
  system_time: "2025-07-16T10:00:00Z"

entities:                 # 实体定义
  主实体:
    attributes: {...}
    relationships: [...]

business_rules:           # 业务规则
  rule_X:
    trigger_conditions: {...}
    required_actions: [...]
    success_criteria: [...]
    sample_generation:
      query_templates: [...]
      data_variations: [...]

完整模板references/scenario_template.yaml

关键概念:Entity vs 外部知识

Entity(实体)的定义

Entity 是样本合成时的变量,分为两类:

  1. Query 变量:出现在用户需求中的可变参数
  2. 例如:用户指定的题材、目标受众、集数要求
  3. 这些会直接影响 query 的生成

  4. Environment 变量:环境中的可变数据

  5. 例如:不同的订单记录、不同的用户数据池
  6. 这些是 Agent 可以查询的背景信息

不应该作为 Entity 的
- ❌ 领域知识(如"都市甜宠短剧的创作原则")→ 应该放在 Skill 文档中,作为可查询的知识
- ❌ 固定的格式规范 → 应该放在 format_specifications 中
- ❌ 通用的业务规则 → 应该放在 business_rules 或 BusinessRules.md 中

决策树:这个信息应该放在哪里?

Q1: 这个信息在不同样本之间会变化吗?
    ├─ YES → 继续 Q2
    └─ NO  → 不是 Entity(考虑 Skill/Format/BusinessRules)

Q2: 变化的内容是用户需求的一部分还是环境背景?
    ├─ 用户需求 → Query Variable Entity
    └─ 环境背景 → Environment Variable Entity

Q3: 这个信息是原始数据还是规则/知识?
    ├─ 原始数据 → Environment Entity (在 environment 或 datapool 中)
    └─ 规则/知识 → Skill Entity (可查询的领域知识)

示例:短剧创作场景

正确的 Entity 设计

entities:
  genre_skill:  # Skill Entity(领域知识)
    type: "knowledge_base"
    description: "题材相关的创作指南"
    attributes:
      genre_type: string    # 变量:都市甜宠、古装权谋等
      skill_file: file      # 指向 datapool 中的 skill 文档

不正确的设计

# ❌ 错误示例1:把 Skill 内容直接写在 Entity 中
entities:
  genre_rules:
    attributes:
      sweet_romance_rules: "甜宠剧的钩子必须包含..."  # 错误:这是固定知识

# ❌ 错误示例2:把格式规范当作 Entity
entities:
  topic_brief:
    attributes:
      format: "钩子长度15-50字"  # 错误:这是格式约束,应该在 format_specifications 中

Business Rules 设计原则

三个核心判断标准

在 YAML 的 business_rules 中放入规则前,必须满足以下三个条件:

  1. 通用性检查:这个规则是否适用于所有题材/所有样本?
  2. ✅ 例如:"选题简报必须包含钩子、价值主张、关键元素"
  3. ❌ 例如:"甜宠剧的钩子要体现甜蜜感" → 应该放在题材 Skill 中

  4. 必要性检查:Agent 看不到这个规则会无法完成任务吗?

  5. ✅ 例如:"角色卡必须包含8个维度"(格式要求)
  6. ❌ 例如:"应该先创建选题再设计角色" → Agent 可以自主规划

  7. 不可推理性检查:Agent 通过常识或上下文无法推理出这个规则吗?

  8. ✅ 例如:"集数默认为3,除非用户明确指定" → 必须明确告知
  9. ❌ 例如:"短剧需要有故事情节" → 常识,不需要写

放入 business_rules 的典型内容

类型 示例 为什么放这里
格式规范 "钩子长度15-50字" 必须明确的约束
默认值逻辑 "集数默认3,用户可指定" 无法推理的决策规则
字段必填性 "角色卡必须包含8个维度" 交付物的强制要求
数值边界 "场景数量不超过3个" 明确的业务约束

不应该放入 business_rules 的内容

类型 示例 应该放在哪里
流程描述 "先创建选题,再设计角色" 不需要(Agent 自主规划)
题材特定规则 "都市剧的角色要贴近生活" 题材 Skill 文档
创作技巧 "钩子要能引发好奇心" 题材 Skill 文档
详细格式 JSON Schema 定义 format_specifications.json

决策流程图

这条规则应该放在 business_rules 中吗?
    │
    ├─ Q1: 是否适用所有题材/样本?
    │   └─ NO → 放入题材 Skill 或 user_need_template
    │
    ├─ Q2: Agent 看不到会无法完成任务吗?
    │   └─ NO → 不需要放(Agent 可自主决策)
    │
    ├─ Q3: 这是格式细节(JSON 结构)吗?
    │   └─ YES → 放入 format_specifications.json
    │
    └─ 三个条件都满足 → 可以放入 business_rules

格式规范的分离原则

建议将详细的格式规范独立到 format_specifications 中:

Before (不推荐)

business_rules:
  rule_topic_format:
    description: "选题简报格式要求"
    constraints:
      - "钩子长度15-50字"
      - "必须包含核心元素、冲突和价值主张"
      - "JSON 格式:{hook: string, elements: [...], ...}"

After (推荐)

# YAML 中只保留高层描述
business_rules:
  rule_topic_format:
    description: "选题简报必须符合 format_specifications 中的 topic_brief_schema"

# 详细格式规范放在独立文档
format_specifications:
  - spec_name: "topic_brief_schema"
    file_path: "datapool/specs/topic_brief_format.json"
    description: "选题简报的完整格式规范(JSON Schema)"

优势
1. Business Rules 保持简洁,只描述"必须遵守什么规范"
2. 格式细节结构化,便于 Checker 验证
3. Agent 可以通过文件读取获取详细规范(像 Skill 一样)

约束力度设计

在统一配置中定义业务规则时,约束的表达力度直接影响Agent的执行效果。

强制性 vs 条件性表达

核心原则:目标明确时用强制性,有选择时用条件性

弱表达(有解释余地):
- "如果用户明确指定X,则执行Y"
- "建议遵循Z原则"
- "尽量完成W"

强表达(直接传达目标):
- "必须完成用户指定的所有X"
- "所有Y必须包含Z字段"
- "禁止在W情况下执行V"

判断标准
- 如果这是check_item要验证的核心目标 → 用强制性
- 如果Agent需要根据情况判断 → 用条件性
- 如果是辅助建议 → 可以用建议性

应用示例:明确优先级

当场景涉及多种选择时,明确优先级能避免Agent困惑:

交互方式优先级

business_rules:
  checkpoint_confirmation:
    rule: |
      交互方式优先级:
      - 优先通过Human In The Loop性质的工具与用户进行交互
      - 仅当工具无法支持所需的交互类型时,才在对话回复中直接询问用户

数据源优先级

business_rules:
  data_source_priority:
    rule: |
      数据源优先级:
      1. 优先使用用户明确提供的数据
      2. 当用户未提供时,查询系统记录
      3. 仅当两者都无时,使用默认值

设计意图
- 通过优先级排序,让Agent在多选项时有明确依据
- 避免Agent在交互方式、数据来源等方面产生困惑
- 确保关键业务目标(如用户指定的集数)不被弱化表达

环境隔离设计(重要)

执行机制:每个样本在独立临时目录中执行,由executor自动创建和清理。

何时需要environment字段
- 样本需要数据文件(JSONL/JSON/CSV)、数据库(SQLite)、或配置文件

environment格式

environment:
  - type: file          # file/db/binary/sh
    path: "data.jsonl"  # 相对路径
    content: "..."

servers.json中使用占位符

mcpServers:
  filesystem:
    args: ["${ENV_DIR}"]  # executor自动替换为临时目录路径

需求模板设计

需求模板是样本多样性的核心,每个模板代表一种用户需求场景:

templates:
- need_template_id: LA_ANNUAL_WITH_COMPENSATORY
  description: 年假申请,调休充足优先扣除
  test_type: positive                    # positive/negative
  user_need_description: |               # 用户需求描述(用于生成query)
    你的需求:
    - 请假类型:{{leave_type_cn}}
    - 请假时间:{{leave_time_description}}
  employee_filter_conditions:            # 数据筛选条件
    - field: compensatory_leave_balance
      operator: '>='
      value: 3
  disclosure_pace: progressive           # 信息披露节奏
  validation_checks:                     # 验证点
    - check_type: create_operation_verified
      entity_type: leave_applications
      filter_conditions: {...}

详细指南references/need_template_design.md

参数配置原则:配置化而非解析化

核心原则:在 template 中明确配置所有参数,而不是依赖运行时从 query 文本中 NLP 解析。

正确做法:在 template 中明确配置参数

templates:
- need_template_id: SD_SWEET_10_EPISODES
  description: "10集的甜宠短剧创作"

  # ✅ 明确配置参数
  parameters:
    genre: "sweet_romance"
    episode_count: 10
    target_audience: "18-34岁女性"

  # Query 模板引用这些参数
  user_need_description: |
    我想做一个都市甜宠短剧,共{episode_count}集。
    目标受众:{target_audience}

  # Checker 使用相同的参数验证
  check_list:
    - check_type: "file_count"
      params:
        directory: "outlines/"
        expected_count: 10  # 直接使用配置的值

错误做法:依赖文本解析

templates:
- need_template_id: SD_SWEET_CUSTOM
  # ❌ 错误:让 Checker 从 query 中解析集数
  user_need_description: |
    我想做一个10集的短剧

  check_list:
    - check_type: "file_count"
      params:
        directory: "outlines/"
        # ❌ 用规则从 query 提取:如果 query 包含"X集"...
        extract_from_query: "\\d+集"

参数的两种来源

  1. 固定参数:在 template 配置中直接指定
    yaml parameters: episode_count: 10 # 固定值

  2. 变量参数:从 entity 数据池中采样
    yaml entity_filter: genre_type: "sweet_romance" # 筛选条件

关键:无论哪种方式,参数都应该是已知的、结构化的,而不是依赖运行时从文本中 NLP 解析。

设计流程(3步)

步骤 内容 关键动作
1 选择设计方法 根据场景特点从五种方法中选择(可组合)
2 定义实体和规则 设计entities、business_rules、success_criteria
3 设计需求模板 设计user_need_templates覆盖正向/负向/边界场景

质量快速检查

  • [ ] entities覆盖所有业务实体和关键属性
  • [ ] business_rules的success_criteria可客观验证
  • [ ] need_templates覆盖正向/负向/边界场景
  • [ ] 难度设计能有效区分不同模型能力

Reference Files

文件 内容 何时读取
scenario_design_patterns.md 五种设计方法详解+算法映射表 开始新场景设计时
scenario_template.yaml 完整YAML模板(带详细注释) 编写配置文件时
need_template_design.md 需求模板设计指南 设计测试用例时

优秀案例

案例 核心设计模式
ad_campaign ROI矩阵、渠道约束、预算分配(复杂规则+算法映射)
task_assignment 优先级排序、负载计算、技能匹配(CSP约束满足)
shortdrama 创作向场景典范:信息洋葱(多阶段依赖)、领域知识门槛(skill文档查阅)、文件系统输出+跨文件一致性检查、动态参数处理(集数可变)。展示了约束力度设计和优先级设计的最佳实践。
office_admin 信息收集、审批流程、异常处理(多轮变更+信息洋葱)
bikeshare_prototypes 多层用户体系、费用计算(复杂规则)

关键原则

  1. 方法可组合 - 一个场景可以同时使用多种设计方法
  2. 难度来自业务 - 真实业务复杂性,而非人为设计的陷阱
  3. 可验证是底线 - 所有success_criteria必须客观可验证
  4. 覆盖要全面 - 正向/负向/边界场景都要设计

可验证性设计指南(关键)

验证方式优先级

优先级 验证方式 适用场景 示例
1 Rule-based状态检查 实体属性变化 检查order.status == 'completed'
2 Rule-based工具调用 调用记录验证 检查是否调用了create_order
3 Rule-based内容匹配 关键词/格式验证 检查回复包含订单号
4 LLM Judge 纯语义判断 检查回复语气是否专业

设计时的可验证性自检

设计每个check_item时问自己:

Q1: 这个检查点能通过final_state的字段值验证吗?
    → YES: 使用 entity_attribute_equals
    → NO: 继续Q2

Q2: 这个检查点是验证工具是否被调用/参数是否正确吗?
    → YES: 使用 tool_called_with_params
    → NO: 继续Q3

Q3: 这个检查点是验证Agent回复中的特定内容吗?
    → YES: 使用 response_contains_keywords (先尝试关键词匹配)
    → NO: 继续Q4

Q4: 这个检查点必须理解语义才能判断吗?
    → YES: 使用 use_llm_judge: true(最后手段)
    → NO: 重新审视检查点设计

反模式(必须避免)

反模式 问题 正确做法
用LLM判断数值计算结果 LLM算数不可靠 检查final_state中的计算结果字段
用LLM判断是否调用了某工具 结构化数据用规则判断 tool_called_with_params
用LLM判断实体状态变化 final_state有确定性答案 entity_attribute_equals
所有检查都用LLM 成本高、结果不稳定 按优先级选择验证方式

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.