工作流自动化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监控 #银行运营

相关文章
|
4天前
|
人工智能 监控 测试技术
银行业AI架构:从裸调API到六层技能体系
# 银行AI智能体架构实战:从单体到Skill协同的技术演进 ## 痛点:银行IT架构的三重困境 走在任何一家银行的科技部走廊里,你都能听到同样的叹息:系统又慢了、需求又排不上、监管又来查了。这不是某一家银行的困境,而是整个银行业IT架构的共性问题。我们把它拆解为三重困境。 **困境一:单体系
|
10天前
|
人工智能
告别排版噩梦:一个开源SKILL,让我彻底告别公众号排版的“噩梦”
**gzh-design-skill**,一个专门为公众号排版设计的 Skill,面向 AI Agent(如 Claude Code、Codex、Cursor 等)使用。 你写完 Markdown,它按你选的主题,生成样式**全内联**的 HTML——粘贴到公众号编辑器后**格式不丢、样式不掉**。自动编章节号、标关键词下划线、配引言卡与目录、处理代码块和图片、合并作者签名,并用校验脚本兜住公众号平台的各种坑。
191 1
告别排版噩梦:一个开源SKILL,让我彻底告别公众号排版的“噩梦”
|
6天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
706 11
|
6天前
|
人工智能 弹性计算 自然语言处理
阿里云产品与AI产品优惠信息参考:Token Plan、万小智AI建站、AI组合购等优惠信息汇总
阿里云最新云产品与AI产品优惠信息:覆盖基础云服务器、AI大模型、编程智能体、视频生成等全链路产品。核心优惠包括:百炼全模型通用Token Plan包季低至4.5折,覆盖150+款大模型;轻量应用服务器2核2G新人专享68元/年起,e实例99元/年续费同价;Qoder CN编程智能体59元/月起,秒悟Pro版限量9.9元/月,HappyHorse视频生成限时8折,万小智AI建站赠域名与灵感值。同时搭配最高100万元OPC创新助力Token补贴,全方位降低AI落地与上云综合成本。
|
13天前
|
人工智能 JSON 自然语言处理
阿里云百炼Token Plan产品详解:产品功能、支持模型与Agent工具、套餐和Credits价格介绍
阿里云百炼Token Plan团队版是面向企业与开发团队的预付费AI大模型订阅服务,以统一Credits计量,整合Qwen、DeepSeek、Kimi等多厂商文本与图像生成模型,兼容OpenAI/Anthropic标准接口,适配Qwen Code、OpenClaw等主流AI编程与智能体工具。产品提供198元/月(标准)、698元/月(高级)、1398元/月(尊享)三档坐席套餐,搭配5000元共享用量包,支持席位分配、用量分析与SSO集成,承诺不使用对话数据训练模型,多租户隔离架构保障高峰不排队。
|
18天前
|
人工智能 缓存 JavaScript
保姆级教程:OpenCode 14 个社区插件 + 6 个实战案例,建议收藏,手把手带你打造最强 AI 编码环境
OpenCode 插件使用保姆级教程:14 个社区插件 + 6 个实战案例,从加载规则到开发实战,手把手带你打造最强 AI 编码环境。建议收藏!
424 10
|
18天前
|
人工智能 文字识别 并行计算
离谱!我以为 OCR 还在一页页抠字,结果百度 1.2 万 Star Unlimited-OCR 直接把长文档一口气读完
百度开源 Unlimited-OCR,把图片、长文档、多页 PDF 这类非结构化资料推进到 Markdown、表格和可检索文本,适合 RAG、知识库和 Agent 文档入口。
153 7
|
19天前
|
人工智能 安全 Cloud Native
2026年企业级 AI 编程助手研发治理与选型完整指南
本文基于云原生微服务与大模型底座融合的研发现状,对市场主流五款AI编程工具进行多维度横向评测,围绕云生态适配、企业资产治理、代码可控性、隐私部署、智能体架构五大核心评估维度,拆解各产品核心能力,并面向企业管理者、架构师、独立开发者三类人群给出精准选型方案,解决引入AI工具后技术债泛滥、密钥泄露、代码幻觉、部署合规等研发治理痛点。
281 8
|
1月前
|
JavaScript 安全 应用服务中间件
LLM增强的网易云API部署用于鸿蒙原生音乐app: Melotopia
本文记录了在自建服务器上部署网易云音乐API并对接鸿蒙原生音乐App Melotopia 的全过程,涵盖 Node.js 一键部署、PM2 后台守护、Nginx 反向代理配置及 HTTPS 安全接入,实现账号同步与云端播放。(239字)
357 9
LLM增强的网易云API部署用于鸿蒙原生音乐app: Melotopia
|
1月前
|
数据采集 人工智能 分布式计算
多Agent集群中的"情报官"设计:为什么系统需要一个RDD
在多Agent系统中,信息采集环节的失误往往是级联错误的根源。本文从行业实践和学术研究两个维度,论证了专职情报采集Agent的必要性,并详细解析了枢衡RDD(资源探测)的五大架构设计原则,包括与CAD的对抗性协作机制等。最后提供了一套可落地的自检清单,帮助开发者判断自己的Agent集群是否需要引入专职情报官角色。