← 返回
未分类

主播AI排班_yxl

为电商直播店铺生成月度主播排班表。根据用户提供的主播信息、排班周期、休假安排,按阶梯式轮转规则自动生成排班表,支持文本输入和Excel模板读取,并导出为Excel文件。触发关键词:主播排班、排班表、直播排班、主播排版、阶梯排班、xlsx排班、表格排班。
为电商直播店铺生成月度主播排班表。根据用户提供的主播信息、排班周期、休假安排,按阶梯式轮转规则自动生成排班表,支持文本输入和Excel模板读取,并导出为Excel文件。触发关键词:主播排班、排班表、直播排班、主播排版、阶梯排班、xlsx排班、表格排班。
足道大师傅
未分类 community v1.0.1 2 版本 100000 Key: 无需
★ 0
Stars
📥 23
下载
💾 0
安装
2
版本
#latest

概述

主播AI排班_yxl

环境要求

使用本 Skill 前,需确保 Python 环境中已安装以下依赖:

pip install openpyxl
  • openpyxl:用于 Excel 文件的读取、写入和格式化
  • 其余依赖均为 Python 标准库(calendarjsoncollectionshashlib),无需额外安装

概述

根据用户提供的主播信息和排班规则,自动生成月度排班表,支持终端输出和Excel导出。

排班规则

规则1:基础排班规则(优先级最高)

  • 严格区分主播类型
  • 【00:00~08:00主播】:仅允许在00:00-08:00区间上播,不可跨区间排班
  • 【8:00~24:00主播】:仅允许在8:00-24:00区间上播,不可跨区间排班(有00:00~08:00主播休班除外)
  • 休假规则(第一规则):用户指定的休假主播当天禁止排班,直接跳过
  • 用户指定信息(特殊规则):严格按用户提供的排班周期生成排班表,优先应用用户提供的其他限制规则

规则2:默认排班规则

  • 每个上播时间段有且仅能有一人
  • 单次上播时长固定为2小时
  • 每日上播时间固定为4小时
  • 每日上播模式:连续上播2小时 → 休息2小时 → 再连续上播2小时
  • 【8:00~24:00主播】采用阶梯式排班(5天周期):
  • 第N天:22:00~24:00 + 18:00~20:00
  • 第N+1天:20:00~22:00 + 16:00~18:00
  • 第N+2天:14:00~16:00 + 10:00~12:00
  • 第N+3天:12:00~14:00 + 08:00~10:00
  • 第N+4天:休班

规则3:休假场景下替补规则

  • 00:00~08:00主播休假时,必须由8:00~24:00主播替补
  • 替补条件:替补主播上次上播时间必须为前一天的12:00~14:00或14:00~16:00
  • 若替补主播不满足条件,则该时间段标记为"缺失"

规则4:人员不足时的标记

  • 若某时间段无可用主播,用"缺失"标记

工作流程

1. 收集用户信息

从用户输入中解析以下信息:

  • 店铺名称
  • 00:00~08:00主播列表
  • 8:00~24:00主播列表(从所有主播中排除00:00~08:00主播得出)
  • 休假安排:按日期解析 {日期: [主播列表]}
  • 排班周期:起始日期和结束日期
  • 排班周期前2天的上播/排班计划(必须提供)
  • 其他限制/特殊规则(如有)

1.4 前置排班数据要求(必须执行)

用户在发送排班信息时,必须提供排班周期前至少2天的上播或排班计划

为什么需要前2天数据:

  1. 阶梯式排班连续性:阶梯轮转是连续的5天周期,第1天的排班需要知道前一天(第0天)各主播的阶梯位置,否则无法确定初始阶梯状态
  2. 替补规则依赖:00:00~08:00主播休假时,替补主播必须满足「前一天的12:00~14:00或14:00~16:00上播」条件。如果排班第1天就有00-08主播休假,必须知道前一天的排班情况才能确定替补人选
  3. 排班准确性:前2天数据确保从排班第1天开始,所有规则(阶梯轮转、替补条件)都能正确执行,避免第1-2天出现不必要的缺失

要求格式:

用户提供排班信息时,需额外说明前2天每个主播的上播时段,例如:

【前2天排班】
5月30日:
  慕何:18:00~20:00、22:00~24:00
  林秀:16:00~18:00、20:00~22:00
  ...
5月31日:
  慕何:16:00~18:00、20:00~22:00
  ...

如果用户未提供前2天排班数据,暂停排班,向用户说明原因并要求补充。

1.5 特殊规则冲突处理(优先级判断)

当用户提供了【其他限制】或特殊规则,且该规则与技能内置规则(规则1-4)存在冲突时,必须暂停排班,向用户确认优先级

触发条件:

  • 用户要求修改"单次上播时长"(原规则:固定2小时)
  • 用户要求修改"每日上播时长"(原规则:固定4小时)
  • 用户要求修改"工作模式"(原规则:连续2h-休息2h-连续2h)
  • 用户要求取消或修改"阶梯式排班"规则
  • 用户要求取消或修改"替补规则"
  • 用户指定的主播排班与原定区间划分冲突(如要求00-08主播在8-24区间上播)
  • 用户要求某主播固定某时段,与其他规则产生冲突
  • 任何其他与技能规则1-4矛盾的指令

处理流程:

  1. 识别冲突:逐条对比用户特殊规则与技能内置规则,列出所有冲突点
  2. 暂停排班:禁止在未确认前直接执行排班
  3. 向用户展示冲突清单,使用 ask_followup_question 工具逐项询问优先级
  4. 每项冲突提供三个选项:
    • 「优先用户规则」— 按用户特殊规则执行,覆盖内置规则
    • 「优先系统规则」— 忽略用户冲突规则,按内置规则执行
    • 「用户重新指定」— 让用户重新描述该规则
  5. 确认所有冲突的优先级后,再继续执行排班

1.6 冲突规则持久化确认(排班后执行)

当用户通过步骤1.5做了规则冲突处理,且用户选择了「优先用户规则」后:

  1. 先按确认的优先级执行排班
  2. 排班完成并输出结果后,必须询问用户是否将此项用户规则写入技能中,成为持久化规则
  3. 使用 ask_followup_question 工具询问,提供三个选项:
    • 「写入技能」— 将该用户规则永久写入 SKILL.md 的规则部分,后续排班自动应用
    • 「仅本次使用」— 本次排班应用此规则,下次排班恢复默认规则
    • 「先不处理」— 暂不决定,保留当前规则状态

写入方式:

  • 若用户选择「写入技能」,则在 SKILL.md 的「规则」章节下新增一个「用户自定义规则」子章节
  • 记录规则内容、写入日期、冲突时的优先级(优先用户规则)
  • 后续排班时,首先检查用户自定义规则,若与新输入的特殊规则再次冲突,仍需走步骤1.5确认

示例对话(排班输出完毕后):

排班已完成。本次排班应用了以下用户规则:
  - "每日上播6小时"(优先于系统默认的4小时)

是否需要将此规则写入技能,供后续排班使用?
  A) 写入技能 — 永久保存
  B) 仅本次使用 — 下次恢复默认
  C) 先不处理

示例对话:

检测到以下规则冲突:
1. 用户要求"每日上播6小时" vs 系统规则"每日固定4小时"
2. 用户要求"00:00~08:00主播 叶灵儿 在10:00~12:00上播" vs 系统规则"00-08主播不可跨区间"

请逐项确认优先级...

1.7 读取Excel模板排班(表格模板输入)

用户可能直接提供一个 Excel 模板文件(.xlsx),模板中包含前2天排班数据和休假安排,需要从模板中读取信息并填入排班结果。

触发条件:

  • 用户直接拖入或引用一个 .xlsx 文件并要求排班
  • 模板通常已包含:前2天的排班数据、休假信息、空白待填充的排班区域

处理流程:

  1. 读取模板结构:使用 openpyxl 读取 .xlsx 文件
    • 第1行:标题
    • 第2行:表头(时间段 + 前2天日期标签 + 1日~31日)
    • 第3-26行:24小时排班(前2列是已有数据,后续列待填充)
    • 第27-29行:休假01、休假02、休假03(休假信息)
  1. 解析前2天排班数据
    • 从模板第3-26行、第2-3列读取每小时的排班
    • 将1小时粒度数据合并为2小时时段(A/B/C/D/1-8)
    • 构建 prev_schedule = {-2: {slot: anchor}, -1: {slot: anchor}}
  1. 解析休假数据
    • 从模板第27-29行读取每日休假人员
    • 构建 vacation_raw = {"日期": [人员列表]}
  1. 解析主播信息
    • 从已有数据(前2天排班 + 休假行)中提取所有主播名
    • 从时段分布推断主播类型(00-08区间 vs 8-24区间)
  1. 执行排班:调用 build_schedule() 生成排班
  1. 填入模板:将生成的排班数据写回模板的空白区域
    • 保持模板原有格式、颜色、边框
    • 前2天数据也统一加上主播颜色
    • 底部追加统计行和检查结果行
  1. 选择输出方式(必须询问用户):排班完成后,使用 ask_followup_question 询问用户选择输出方式:
    • 「更新到本表」— 将排班数据直接写入原模板文件(覆盖空白区域),保留原有格式
    • 「输出到新表」— 另存为一个新的 xlsx 文件,原模板保持不变

示例询问:

```

排班已完成。请选择输出方式:

A) 更新到本表 — 直接修改 999.xlsx

B) 输出到新表 — 另存为 妇炎洁领航_2026年7月排班表.xlsx

```

  1. 保存输出:根据用户选择保存文件

1.8 写入指定Sheet(多Sheet场景)

当用户要求将排班结果写入Excel模板的指定Sheet新建Sheet时:

触发条件:

  • 用户说「写入第2个sheet」「新建一个sheet」「放到新sheet」等

处理流程:

  1. 读取工作簿:加载 .xlsx 文件,检查现有 sheet 列表
  2. 判断Sheet是否存在
    • 若指定名称的 sheet 已存在 → 直接使用该 sheet
    • 若不存在 → 使用 wb.create_sheet('sheet名称') 新建
  3. 完整构建新Sheet:从零开始创建排班表(标题、表头、前2天数据、排班数据、休假行、统计行、检查结果行)
  4. 前2天数据来源:从模板的第一个 sheet 读取前2天排班数据,复制到新 sheet
  5. 保存:直接保存到原 .xlsx 文件

代码示例:

wb = openpyxl.load_workbook('模板.xlsx')

# 新建或获取指定sheet
if '新排班表' not in wb.sheetnames:
    ws = wb.create_sheet('新排班表')
else:
    ws = wb['新排班表']

# 从第一个sheet读取前2天数据
ws1 = wb[wb.sheetnames[0]]
prev_schedule = {-2: {}, -1: {}}
for h in range(24):
    for col_idx, off in [(2, -2), (3, -1)]:
        val = ws1.cell(row=h+3, column=col_idx).value
        if val and val != '缺失':
            # 解析到对应时段...
            prev_schedule[off][sk] = val

# 在新sheet中构建完整排班表...

代码示例:

import openpyxl
from schedule import build_schedule, slot_to_hour_range, run_checks

# 读取模板
wb = openpyxl.load_workbook('模板.xlsx')
ws = wb.active

# 解析前2天数据
night_slots_map = {"A": (0,2), "B": (2,4), "C": (4,6), "D": (6,8)}
prev_schedule = {-2: {}, -1: {}}
for h in range(24):
    row = h + 3
    for col_idx, off in [(2, -2), (3, -1)]:
        val = ws.cell(row=row, column=col_idx).value
        if val and val != '缺失':
            sk = None
            for k in list(night_slots_map.keys()) + list(range(1, 9)):
                s, e = (night_slots_map[k] if isinstance(k, str) 
                        else ((k-1)*2+8, (k-1)*2+10))
                if s <= h < e: sk = k; break
            if sk:
                prev_schedule[off][sk] = val

# 解析休假
vacation_raw = {}
for d in range(1, 32):
    vac_list = []
    for vac_idx in range(3):
        val = ws.cell(row=27+vac_idx, column=d+3).value
        if val and val != '缺失':
            vac_list.append(val)
    if vac_list:
        vacation_raw[str(d)] = vac_list

# 执行排班并填入模板...

使用 scripts/schedule.py 脚本生成排班表。该脚本包含完整的排班逻辑:

python3 scripts/schedule.py

脚本内部逻辑:

  1. 解析休假数据,构建每日休假主播集合
  2. 为每个8:00~24:00主播初始化阶梯日计数器
  3. 逐日排班:
    • 收集可用主播(排除休假)
    • 按阶梯位置分配时段
    • 处理替补逻辑(当00:00~08:00主播不足时)
    • 标记缺失时段
  4. 将2小时时段展开为1小时粒度
  5. 输出排班表(终端格式)
  6. 执行8项自动检查

3. 导出Excel

使用 scripts/export_xlsx.py 将排班结果导出为Excel文件。在SKILL.md同级目录执行:

python3 scripts/export_xlsx.py

4. 自动检查(每次输出后必须执行)

每次生成排班后,自动执行以下8项检查:

编号检查项规则
--------------------
1每时段仅1人同一小时不能有多个主播
2每人每日4小时每天上播总时长恰好4小时
3工作模式连续2h → 休息2h → 连续2h
4休假合规休假主播当天不排班
5区间隔离00-08主播不出现在8-24区间
6替补合规8-24主播仅在替补时进入00-08
7单次时长每次上播恰好2小时
8阶梯轮转验证阶梯式排班模式正确

检查未通过时,必须修正后重新排班,直到全部通过。

4.5 双重检查确认(排班完毕后必须执行)

排班完成后,必须执行两轮完整检查以确保结果无误:

  1. 第一轮检查:执行步骤4的8项自动检查
    • 若发现问题,修正后重新排班,再次执行第一轮检查
    • 第一轮全部通过后,进入第二轮
  1. 第二轮检查:重新执行一遍全部8项检查(换一个主播验证阶梯轮转)
    • 不可跳过第二轮,不可因为第一轮通过就省略
    • 两轮检查结果一致且全部通过,才算排班合格
  1. 检查完成后:在输出结果中明确显示「第一轮检查通过 ✅」「第二轮检查通过 ✅」

示例输出:

📋 第一轮检查
  [1] 每时段仅1人: ✅
  [2] 每人每日4小时: ✅
  ...
  ✅ 第一轮全部通过

📋 第二轮检查(复验)
  [1] 每时段仅1人: ✅
  ...
  ✅ 第二轮全部通过

🎉 双重检查确认无误,排班表合格!

输出格式

终端输出

  • 第1行:时间段 1日 2日 ... 31日
  • 第2-25行:24个1小时时段(00:00~01:0023:00~24:00
  • 第26-28行:休假01休假02休假03
  • 当天1人休假 → 休假01填人名,休假02/03填"缺失"
  • 当天2人休假 → 休假01/02填人名,休假03填"缺失"
  • 当天3人休假 → 三行均填人名
  • 当天0人休假 → 三行均填"缺失"
  • 替补主播不额外标注,只填人名
  • 无法排班的时段填"缺失"

Excel输出

  • 标题行 + 表头行 + 24行排班 + 3行休假 + 检查结果行
  • 凌晨时段浅蓝底色,日间时段浅绿底色
  • 休假行黄色底色
  • 缺失文字红色
  • 冻结首列和表头
  • 统计行:每位主播的休班天数和上播总时长
  • 汇总行:总主播数、总上播时长、总休班天数

用户输入格式示例

【店铺】护肤
【00:00~08:00主播】叶灵儿、宁夕
【休假】5月11日(无涯、双儿)、5月12日(琳琅)
【排班周期】2026年5月1日~2026年5月31日
【其他限制】无

资源文件

  • scripts/schedule.py - 核心排班脚本(终端输出+检查)
  • scripts/export_xlsx.py - Excel导出脚本

版本历史

共 2 个版本

  • v1.0.1 Initial release 当前
    2026-06-04 21:40 安全 安全
  • v1.0.0 Initial release
    2026-06-04 10:25 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

office-efficiency

写入钉钉ai表格_yxl

user_5e4c54ff
这个技能的简介: --- **「写入钉钉ai表格_yxl_V1.0」** 一键将数据自动写入钉钉 AI 表格(多维表格 Notable)。只需提供目标表格 ID、工作表名称和要写入的数据,技能会自动完成获取授权令牌、写入记录并返回文档
★ 0 📥 49
business-ops

Trello

steipete
使用 Trello REST API 管理看板、列表和卡片
★ 162 📥 41,239
business-ops

Discord

steipete
当需要通过discord工具控制Discord时使用:发送消息、添加反应、发布或上传表情包、上传表情、创建投票、管理帖子/置顶/搜索、获取权限或成员/角色/频道信息,或在Discord私信或频道中处理管理操作。
★ 78 📥 38,011