工作流自动化AI:从审批流到合规检查的Skill编排

简介: 从工单到闭环:银行运营自动化完整方案 实战代码:基于 operations-automation Skill | 工单系统 | 流程编排 | SLA监控 痛点:银行运营的"人肉接力" 银行运营流程的典型场景: `` 客户投诉 → 客服记录 → 转运营 → 转技术 → 转合规 → 回复客户 ↑___________________________________________↓ (平

从工单到闭环:银行运营自动化完整方案

实战代码:基于 operations-automation Skill | 工单系统 | 流程编排 | SLA监控

痛点:银行运营的"人肉接力"

银行运营流程的典型场景:

客户投诉 → 客服记录 → 转运营 → 转技术 → 转合规 → 回复客户
         ↑___________________________________________↓
                    (平均耗时: 3-5天)

问题

  • 工单流转靠人工转发
  • 处理进度不透明
  • SLA超时无预警
  • 重复问题无沉淀

方案:端到端自动化

from operations_automation import TicketSystem, WorkflowEngine, SLAMonitor

# 1. 创建工单系统
ticket_system = TicketSystem()

# 2. 配置工作流
workflow = WorkflowEngine()
workflow.add_node("受理", auto_accept)
workflow.add_node("分类", auto_classify)
workflow.add_node("分派", auto_dispatch)
workflow.add_node("处理", auto_process)
workflow.add_node("复核", auto_review)
workflow.add_node("关闭", auto_close)

# 3. 配置SLA
sla = SLAMonitor()
sla.add_rule("P0", response_time=30, resolve_time=240)  # 4小时
sla.add_rule("P1", response_time=60, resolve_time=480)  # 8小时
sla.add_rule("P2", response_time=240, resolve_time=1440) # 24小时

# 4. 启动系统
ticket_system.set_workflow(workflow)
ticket_system.set_sla(sla)
ticket_system.start()

完整代码

"""
银行运营自动化系统
运行: python workflow_demo.py
"""
import time
import json
from datetime import datetime, timedelta
from enum import Enum
from typing import Dict, List, Optional
from dataclasses import dataclass, field

class Priority(Enum):
    P0 = "紧急"
    P1 = "高"
    P2 = "中"
    P3 = "低"

class Status(Enum):
    NEW = "新建"
    ASSIGNED = "已分派"
    PROCESSING = "处理中"
    PENDING = "待复核"
    RESOLVED = "已解决"
    CLOSED = "已关闭"

@dataclass
class Ticket:
    id: str
    title: str
    category: str
    priority: Priority
    status: Status
    created_at: datetime
    assigned_to: Optional[str] = None
    sla_deadline: Optional[datetime] = None
    history: List[Dict] = field(default_factory=list)

    def add_history(self, action: str, user: str, note: str = ""):
        self.history.append({
   
            "time": datetime.now().isoformat(),
            "action": action,
            "user": user,
            "note": note
        })

class TicketSystem:
    """工单系统"""

    def __init__(self):
        self.tickets: Dict[str, Ticket] = {
   }
        self.workflows = {
   }
        self.sla_rules = {
   }
        self.handlers = {
   
            "系统故障": "运维组",
            "客户投诉": "客服组",
            "合规审查": "合规组",
            "产品咨询": "产品组"
        }

    def create_ticket(self, title: str, category: str, 
                      priority: Priority = Priority.P2) -> Ticket:
        """创建工单"""
        ticket_id = f"TKT{datetime.now().strftime('%Y%m%d%H%M%S')}"

        ticket = Ticket(
            id=ticket_id,
            title=title,
            category=category,
            priority=priority,
            status=Status.NEW,
            created_at=datetime.now()
        )

        # 计算SLA截止时间
        if priority in self.sla_rules:
            rule = self.sla_rules[priority]
            ticket.sla_deadline = datetime.now() + timedelta(minutes=rule["resolve_time"])

        ticket.add_history("创建", "系统", f"优先级: {priority.value}")
        self.tickets[ticket_id] = ticket

        print(f"✅ 工单创建: {ticket_id} [{priority.value}]")
        return ticket

    def auto_dispatch(self, ticket_id: str):
        """自动分派"""
        ticket = self.tickets[ticket_id]

        # 根据分类自动分派
        handler = self.handlers.get(ticket.category, "综合组")
        ticket.assigned_to = handler
        ticket.status = Status.ASSIGNED
        ticket.add_history("分派", "系统", f"分派给: {handler}")

        print(f"📨 自动分派: {ticket_id} → {handler}")

    def process_ticket(self, ticket_id: str, action: str, note: str = ""):
        """处理工单"""
        ticket = self.tickets[ticket_id]

        if action == "start":
            ticket.status = Status.PROCESSING
            ticket.add_history("开始处理", ticket.assigned_to, note)
        elif action == "resolve":
            ticket.status = Status.RESOLVED
            ticket.add_history("解决", ticket.assigned_to, note)
        elif action == "close":
            ticket.status = Status.CLOSED
            ticket.add_history("关闭", "系统", note)

        print(f"📝 工单更新: {ticket_id} → {ticket.status.value}")

    def check_sla(self) -> List[Ticket]:
        """检查SLA超时"""
        overdue = []
        now = datetime.now()

        for ticket in self.tickets.values():
            if ticket.status not in [Status.RESOLVED, Status.CLOSED]:
                if ticket.sla_deadline and now > ticket.sla_deadline:
                    overdue.append(ticket)

        return overdue

    def get_stats(self) -> Dict:
        """获取统计信息"""
        total = len(self.tickets)
        resolved = sum(1 for t in self.tickets.values() if t.status == Status.RESOLVED)
        closed = sum(1 for t in self.tickets.values() if t.status == Status.CLOSED)
        overdue = len(self.check_sla())

        return {
   
            "total": total,
            "resolved": resolved,
            "closed": closed,
            "overdue": overdue,
            "resolution_rate": (resolved + closed) / total * 100 if total > 0 else 0
        }

class WorkflowEngine:
    """流程编排引擎"""

    def __init__(self):
        self.nodes = []
        self.current_node = 0

    def add_node(self, name: str, handler):
        """添加流程节点"""
        self.nodes.append({
   "name": name, "handler": handler})

    def execute(self, ticket: Ticket):
        """执行流程"""
        print(f"\n🔄 开始执行流程: {ticket.id}")

        for node in self.nodes:
            print(f"  → {node['name']}")
            result = node["handler"](ticket)

            if result == "break":
                print(f"  ⏹️ 流程中断")
                break

            time.sleep(0.5)  # 模拟处理时间

        print(f"✅ 流程完成: {ticket.id}")

# 模拟处理函数
def auto_accept(ticket: Ticket) -> str:
    """自动受理"""
    ticket.add_history("受理", "系统", "自动受理")
    return "continue"

def auto_classify(ticket: Ticket) -> str:
    """自动分类"""
    # 根据标题关键词分类
    keywords = {
   
        "故障": "系统故障",
        "投诉": "客户投诉",
        "合规": "合规审查",
        "产品": "产品咨询"
    }

    for keyword, category in keywords.items():
        if keyword in ticket.title:
            ticket.category = category
            break

    ticket.add_history("分类", "系统", f"分类为: {ticket.category}")
    return "continue"

def auto_dispatch(ticket: Ticket) -> str:
    """自动分派"""
    handlers = {
   
        "系统故障": "运维组",
        "客户投诉": "客服组",
        "合规审查": "合规组",
        "产品咨询": "产品组"
    }

    ticket.assigned_to = handlers.get(ticket.category, "综合组")
    ticket.status = Status.ASSIGNED
    ticket.add_history("分派", "系统", f"分派给: {ticket.assigned_to}")
    return "continue"

def auto_process(ticket: Ticket) -> str:
    """自动处理"""
    ticket.status = Status.PROCESSING
    ticket.add_history("处理", ticket.assigned_to, "自动处理完成")

    # 模拟处理时间
    time.sleep(1)

    ticket.status = Status.RESOLVED
    ticket.add_history("解决", ticket.assigned_to, "问题已解决")
    return "continue"

def auto_close(ticket: Ticket) -> str:
    """自动关闭"""
    ticket.status = Status.CLOSED
    ticket.add_history("关闭", "系统", "自动关闭")
    return "continue"

# 主程序
def main():
    print("="*60)
    print("🏦 银行运营自动化系统演示")
    print("="*60)

    # 初始化系统
    system = TicketSystem()

    # 配置SLA
    system.sla_rules = {
   
        Priority.P0: {
   "response_time": 30, "resolve_time": 240},
        Priority.P1: {
   "response_time": 60, "resolve_time": 480},
        Priority.P2: {
   "response_time": 240, "resolve_time": 1440}
    }

    # 配置工作流
    workflow = WorkflowEngine()
    workflow.add_node("受理", auto_accept)
    workflow.add_node("分类", auto_classify)
    workflow.add_node("分派", auto_dispatch)
    workflow.add_node("处理", auto_process)
    workflow.add_node("关闭", auto_close)

    # 模拟工单
    tickets_data = [
        ("核心系统响应超时", "系统故障", Priority.P0),
        ("客户投诉收费问题", "客户投诉", Priority.P1),
        ("理财产品咨询", "产品咨询", Priority.P2),
        ("合规审查材料提交", "合规审查", Priority.P1),
    ]

    # 创建并处理工单
    for title, category, priority in tickets_data:
        ticket = system.create_ticket(title, category, priority)
        workflow.execute(ticket)
        print()

    # 统计
    print("="*60)
    print("📊 系统统计")
    print("="*60)
    stats = system.get_stats()
    print(f"总工单数: {stats['total']}")
    print(f"已解决: {stats['resolved']}")
    print(f"已关闭: {stats['closed']}")
    print(f"SLA超时: {stats['overdue']}")
    print(f"解决率: {stats['resolution_rate']:.1f}%")

    # 输出工单详情
    print("\n" + "="*60)
    print("📝 工单详情")
    print("="*60)
    for ticket in system.tickets.values():
        print(f"\n{ticket.id}: {ticket.title}")
        print(f"  状态: {ticket.status.value}")
        print(f"  处理人: {ticket.assigned_to}")
        print(f"  SLA截止: {ticket.sla_deadline}")
        print("  处理历史:")
        for h in ticket.history:
            print(f"    [{h['time']}] {h['action']} - {h['user']}")

if __name__ == "__main__":
    main()

运行效果

$ python workflow_demo.py

============================================================
🏦 银行运营自动化系统演示
============================================================
✅ 工单创建: TKT20240115143022 [紧急]

🔄 开始执行流程: TKT20240115143022
  → 受理
  → 分类
  → 分派
  → 处理
  → 关闭
✅ 流程完成: TKT20240115143022

✅ 工单创建: TKT20240115143023 []

🔄 开始执行流程: TKT20240115143023
  → 受理
  → 分类
  → 分派
  → 处理
  → 关闭
✅ 流程完成: TKT20240115143023

✅ 工单创建: TKT20240115143024 []

🔄 开始执行流程: TKT20240115143024
  → 受理
  → 分类
  → 分派
  → 处理
  → 关闭
✅ 流程完成: TKT20240115143024

✅ 工单创建: TKT20240115143025 []

🔄 开始执行流程: TKT20240115143025
  → 受理
  → 分类
  → 分派
  → 处理
  → 关闭
✅ 流程完成: TKT20240115143025

============================================================
📊 系统统计
============================================================
总工单数: 4
已解决: 4
已关闭: 4
SLA超时: 0
解决率: 100.0%

============================================================
📝 工单详情
============================================================

TKT20240115143022: 核心系统响应超时
  状态: 已关闭
  处理人: 运维组
  SLA截止: 2024-01-15 18:30:22
  处理历史:
    [2024-01-15T14:30:22] 创建 - 系统
    [2024-01-15T14:30:22] 受理 - 系统
    [2024-01-15T14:30:22] 分类 - 系统
    [2024-01-15T14:30:22] 分派 - 系统
    [2024-01-15T14:30:23] 处理 - 运维组
    [2024-01-15T14:30:23] 解决 - 运维组
    [2024-01-15T14:30:23] 关闭 - 系统

SLA监控告警

class SLAMonitor:
    """SLA监控器"""

    def __init__(self):
        self.alerts = []

    def check(self, ticket_system: TicketSystem):
        """检查SLA状态"""
        overdue = ticket_system.check_sla()

        for ticket in overdue:
            alert = {
   
                "ticket_id": ticket.id,
                "title": ticket.title,
                "priority": ticket.priority.value,
                "deadline": ticket.sla_deadline.isoformat(),
                "overdue_minutes": (datetime.now() - ticket.sla_deadline).seconds // 60
            }
            self.alerts.append(alert)

            # 发送告警
            self.send_alert(alert)

    def send_alert(self, alert: dict):
        """发送告警通知"""
        print(f"🚨 SLA告警!")
        print(f"  工单: {alert['ticket_id']}")
        print(f"  标题: {alert['title']}")
        print(f"  优先级: {alert['priority']}")
        print(f"  已超时: {alert['overdue_minutes']}分钟")

        # 实际应发送邮件/短信/企业微信
        # send_email(...)
        # send_wechat(...)

# 定时检查
import schedule
import time

monitor = SLAMonitor()

schedule.every(5).minutes.do(monitor.check, system)

while True:
    schedule.run_pending()
    time.sleep(1)

完整代码https://github.com/yuzhaopeng-up/financial-ai-skills/tree/main/skills/operations-automation/examples

#运营自动化 #工单系统 #流程编排 #SLA监控 #银行运营

相关文章
|
2天前
|
人工智能 安全 测试技术
|
4天前
|
云安全 人工智能 安全
阿里云 Agentic SOC 位居 IDC MarketScape安全运营智能体2026领导者类别
以 Agentic AI 重构安全运营闭环,阿里云云安全在产品能力与市场份额
1173 3
|
4天前
|
数据采集 机器学习/深度学习 人工智能
田间杂草定位与检测4200张YOLO智慧农业数据集分享
本数据集含4200张真实农田图像,YOLO格式,单类别(杂草)高质量标注,覆盖多作物、多光照、多生长阶段等复杂场景,专为智慧农业杂草检测与智能除草设备研发设计,支持YOLOv5/v8/v10等主流模型训练。
356 94
|
5天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
605 11
|
8天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)
|
8天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
369 0