Skip to content

Latest commit

Β 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 
Β 
Β 
Β 
Β 

README.md

Customer Support Auto-Responder Agent

Production-grade AI-powered customer support with Agent OS governance.

🎯 Overview

This agent automatically handles customer support tickets with:

  • Multi-model verification (CMVK) - Responses verified across GPT-4, Claude, Gemini
  • RAG-based knowledge retrieval - 90% lookup, 10% reasoning
  • Policy enforcement - No false promises, discount limits, professional tone
  • Automatic escalation - Legal threats, complaints, sensitive topics
  • CSAT tracking - Quality metrics and continuous improvement

Benchmark: "Resolved 2,400 tickets, 4.7/5 satisfaction"

πŸš€ Quick Start

# Install dependencies
pip install -r requirements.txt

# Run the demo
python main.py

πŸ“Š Features

Ticket Classification

  • Billing, Technical, Refund, Account, Feature Request, Complaint
  • Automatic priority assignment (Urgent, High, Medium, Low)

Policy Enforcement

Rule Description
No Promises Blocks "guarantee", "definitely", "100%"
Discount Limits Tier-based: 10% (Tier1), 20% (Tier2), 50% (Supervisor)
Refund Limits $100 (Tier1), $500 (Tier2), $5000 (Supervisor)
PII Protection Redacts SSN, credit cards, passwords
Response Length Max 500 characters

Escalation Triggers

  • Legal threats: "lawsuit", "lawyer", "sue"
  • Media: "twitter", "viral", "news"
  • Executive: "CEO", "board"
  • Sensitive: "injured", "discriminat"

Knowledge Base (RAG)

  • Vector-based retrieval (Pinecone/ChromaDB ready)
  • Pre-loaded articles for common issues
  • Confidence scoring for response quality

πŸ“ˆ Metrics Tracked

tickets_handled: Total processed
tickets_resolved: Auto-resolved without human
tickets_escalated: Sent to humans
resolution_rate: % auto-resolved
avg_response_time_sec: Speed metric
avg_csat: Customer satisfaction (1-5)
policy_violation_count: Governance catches

πŸ”§ Configuration

Edit SUPPORT_POLICY in main.py:

SUPPORT_POLICY = {
    "response_rules": {
        "no_promises": True,
        "max_response_length": 500,
    },
    "discount_limits": {
        "tier1": {"max_percent": 10},
    },
    # ...
}

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Customer Ticket                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  TicketClassifier                        β”‚
β”‚         (Category + Priority Assignment)                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  PolicyEngine                            β”‚
β”‚            (Escalation Check)                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β–Ό                         β–Ό
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚  Escalate to   β”‚        β”‚  KnowledgeBase β”‚
     β”‚    Human       β”‚        β”‚   (RAG Search) β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                       β”‚
                                       β–Ό
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚   PolicyEngine     β”‚
                            β”‚ (Response Check)   β”‚
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                       β”‚
                                       β–Ό
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚  CrossModelVerifierβ”‚
                            β”‚      (CMVK)        β”‚
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                       β”‚
                                       β–Ό
                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                            β”‚   Final Response   β”‚
                            β”‚ (or Human Review)  β”‚
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”Œ Integration

Zendesk

from zendesk import ZendeskAPI

zendesk = ZendeskAPI(api_key=os.getenv("ZENDESK_API_KEY"))
agent = CustomerSupportAgent()

for ticket in zendesk.get_new_tickets():
    response = await agent.handle_ticket(ticket)
    if not response.requires_human_review:
        zendesk.reply(ticket.id, response.content)

Slack

@slack_app.event("message")
async def handle_dm(event):
    ticket = Ticket(
        ticket_id=event["ts"],
        customer_id=event["user"],
        message=event["text"]
    )
    response = await agent.handle_ticket(ticket)
    slack_app.respond(event, response.content)

πŸ“‹ License

MIT License - Use freely with attribution.