MetaAI / openenv.yaml
Tarun
Claude Sonnet 4.6
Clean up unused files and update manifests
26e181c
Raw History Blame Contribute Delete
3.55 kB
environment:
name: customer-support-agent
version: "2.0.0"
description: >
OpenEnv-compliant autonomous customer support environment.
Each episode is a 3-phase Markov Decision Process: Triage -> Route -> Resolve.
An AI agent classifies, assigns, and resolves realistic BPO/customer-support
tickets across e-commerce and SaaS workflows.
Deterministic per-phase reward shaping; observation state evolves each step.
tags:
- openenv
- customer-support
- reinforcement-learning
- multi-step
- bpo
tasks:
- name: easy
description: >
3-phase MDP with straightforward tickets. Phase 1: classify issue type.
Phase 2: route to correct team. Phase 3: respond or refund.
difficulty: easy
max_steps: 5
num_scenarios: 10
grader: openenv.graders.grader.GraderEngine
- name: medium
description: >
3-phase MDP with moderate complexity. Phase 1: classify. Phase 2: route.
Phase 3: respond, refund, or escalate safety/product defect issues.
difficulty: medium
max_steps: 5
num_scenarios: 10
grader: openenv.graders.grader.GraderEngine
- name: hard
description: >
3-phase MDP with ambiguous, high-stakes tickets. Requires distinguishing
escalate vs refund vs respond with asymmetric business penalties.
difficulty: hard
max_steps: 5
num_scenarios: 10
grader: openenv.graders.grader.GraderEngine
observation_space:
type: object
fields:
ticket_id:
type: string
description: "Unique ticket identifier (e.g. TKT-E001)"
issue_type:
type: string
description: "Category of the customer issue. 'unknown' in Phase 1; revealed after classify."
enum: [unknown, shipping, billing, technical, returns, safety, cancellation, complaint, orders, sales]
sentiment:
type: string
description: "Detected customer sentiment"
enum: [positive, neutral, negative, angry]
priority:
type: string
description: "Ticket urgency level"
enum: [low, medium, high, critical]
message:
type: string
description: "The customer's original message text"
history:
type: array
items:
type: string
description: "Phase transition messages and prior agent actions in this episode"
action_space:
type: object
fields:
action_type:
type: string
description: "Primary action to execute"
enum: [classify, assign, respond, refund, escalate]
team:
type: string
nullable: true
description: "Target team (used with assign/escalate actions)"
enum: [logistics_team, tech_support_team, safety_team, finance_team, orders_team, management_team]
response:
type: string
nullable: true
description: >
In Phase 1: the identified issue_type (e.g. 'billing').
In Phase 3: customer-facing response message.
reward:
range: [0.002, 0.998]
phases:
phase_1_triage:
classify_with_correct_issue_type: 0.998
classify_only: 0.55
wrong_action: 0.002
phase_2_route:
correct_team: 0.998
wrong_team: 0.400
wrong_action: 0.002
phase_3_resolve:
description: "Proportional quality score: action_type (0.3) + team (0.3) + keyword coverage (0.4)"
range: [0.002, 0.998]
penalties:
unnecessary_refund: -0.50
unnecessary_escalation: -0.30
wrong_team: -0.15
excessive_steps: -0.10 per step beyond 3
episode_score: "mean(phase_1_reward, phase_2_reward, phase_3_reward) clamped to [0.002, 0.998]"