📚 讯飞智能体平台迁移攻略

版本: v1.0.0 | 更新时间: 2026-03-31 | 状态: ✅ 可用

✅ 本文档可直接分享给同事
下载后直接发送,或者复制到团队文档中即可使用!

一、系统概述

1.1 当前系统架构

技术栈:

  • 前端:Next.js 16 + React 19 + TypeScript 5 + Tailwind CSS 4
  • 后端:Next.js API Routes
  • 数据处理:XLSX库解析Excel文件
  • 核心算法:自适应排班算法(适配矩阵 + 优先级分配 + 匀课均衡)

1.2 核心功能

  1. 文件解析:解析4个Excel文件(教员名单、预占表、中队需求、模拟机场次)
  2. 资质筛选:根据课程类型筛选适配教员
  3. 时间冲突检测:24小时内≤2场、间隔≥2小时
  4. 特殊规则处理:5个特殊教员的个性化排班规则
  5. 均衡排班:分4步分配课程,最后执行匀课均衡
  6. 结果导出:生成排班结果和统计信息

二、节点工具选择指南 ⭐核心

⚠️ 重要提示
不要随便拖空白工具!每个节点都有专门对应的工具类型,选择正确的工具才能正常运行。

2.1 核心规则

🎯 所有处理节点都使用"代码节点(Python)"工具!

2.2 节点工具对照表

序号节点名称工具类型难度代码量
1开始节点开始节点(固定)
2Excel解析代码节点(Python)⭐⭐~50行
3数据初始化代码节点(Python)⭐⭐⭐~150行
4构建适配矩阵代码节点(Python)⭐⭐~40行
5课程分类代码节点(Python)~30行
6UP检查课分配代码节点(Python)⭐⭐~60行
7普通检查课分配代码节点(Python)⭐⭐~60行
8特殊教员分配代码节点(Python)⭐⭐⭐~100行
9普通教员分配代码节点(Python)⭐⭐⭐⭐~200行
10降级补位代码节点(Python)⭐⭐⭐~80行
11匀课均衡代码节点(Python)⭐⭐⭐⭐⭐~150行
12结果统计代码节点(Python)⭐⭐~50行
13格式化输出代码节点(Python)~40行
14结束节点结束节点(固定)

统计: 代码节点12个 + 开始/结束节点2个 = 总计14个节点

2.3 如何添加代码节点

  1. 在左侧工具栏找到"代码"或"Python代码"工具
  2. 拖拽到工作流画布
  3. 双击打开编辑器
  4. 选择Python语言(重要!)
  5. 将攻略中的代码粘贴进去
  6. 保存

✅ 关键点:

  • 必须选择Python语言(不是JavaScript)
  • 不要用"空白工具"或"自定义工具"
  • 代码节点是最常用的类型

2.4 常见错误

错误类型问题后果正确做法
❌ 错误1使用"空白工具"代码无法执行使用"代码节点(Python)"
❌ 错误2选择JavaScript语言语法错误选择Python语言
❌ 错误3节点连接顺序不对数据流向错误严格按照1-14顺序连接

三、工作流架构设计

3.1 工作流流程图

开始节点 ↓ Excel解析(代码节点) ↓ 数据初始化(代码节点) ↓ 构建适配矩阵(代码节点) ↓ 课程分类(代码节点) ↓ UP检查课分配(代码节点) ↓ 普通检查课分配(代码节点) ↓ 特殊教员分配(代码节点) ↓ 普通教员分配(代码节点) ↓ 降级补位(代码节点) ↓ 匀课均衡(代码节点) ↓ 结果统计(代码节点) ↓ 格式化输出(代码节点) ↓ 结束节点

3.2 数据流转

输入: 4个Excel文件

中间数据: userMap, courseList, course_categories, scheduled_courses, results

输出: 格式化的排班结果文本

四、分步实施方案

4.1 环境准备(预计耗时:0.5小时)

  1. 访问讯飞星火平台:https://xinghuo.xfyun.cn/
  2. 注册并登录账号
  3. 进入"智能体管理"
  4. 点击"创建智能体"
  5. 名称:模拟机训练排班系统
  6. 描述:智能分配模拟机训练教员和检查员
  7. 进入智能体详情,点击"工作流编排"
  8. 创建新工作流

4.2 实施步骤概览

阶段步骤预计耗时说明
阶段1文件上传节点配置0.5小时配置开始节点输入参数
阶段2Excel解析节点1小时解析4个Excel文件
阶段3数据初始化节点2小时构建userMap和courseList
阶段4排班核心节点(6个)8小时实现核心排班逻辑
阶段5匀课均衡节点3小时实现均衡算法
阶段6统计和输出(2个)2小时生成结果和统计
阶段7测试验证4小时测试所有功能
阶段8调试优化4小时修复问题优化性能

总预计耗时: 25小时

五、代码迁移指南

5.1 核心函数对照

TypeScript函数Python函数说明
initData()init_data()数据初始化
filterInstructorByQualification()filter_by_qualification()资质筛选
checkTimeConflict()check_time_conflict()时间冲突检测
checkSpecialRule()check_special_rule()特殊规则检查
generateSchedule()generate_schedule()排班生成

5.2 特殊规则配置(Python)

SPECIAL_RULES = {
    'instructors': {
        '陈健': {
            'max_monthly_sessions': 1,
            'description': '每月仅1场'
        },
        '毛家良': {
            'max_monthly_sessions': 9,
            'description': '每月约8场'
        },
        '杨毅勇': {
            'allowed_date_range': {'min': 16, 'max': 31},
            'description': '仅下半月'
        },
        '张弘强': {
            'allowed_date_range': {'min': 1, 'max': 5},
            'description': '仅1-5日'
        },
        '王占兵': {
            'allowed_time_ranges': [
                {'start': 8, 'end': 12},
                {'start': 12, 'end': 16}
            ],
            'description': '仅早8点/午12点场'
        }
    }
}

5.3 时间冲突检测(Python)

def check_time_conflict(instructor_name, course, user_map, scheduled_courses):
    """
    检查时间冲突
    """
    user_info = user_map.get(instructor_name)
    if not user_info:
        return True
    
    start_time = course['start_time']
    end_time = course['end_time']
    
    # 规则1:预占时间冲突
    for occupancy in user_info.get('occupy_list', []):
        occupy_start = datetime.combine(
            occupancy['date'].date(),
            datetime.strptime(occupancy['start_time'], '%H:%M').time()
        )
        occupy_end = datetime.combine(
            occupancy['date'].date(),
            datetime.strptime(occupancy['end_time'], '%H:%M').time()
        )
        
        if check_overlap(start_time, end_time, occupy_start, occupy_end):
            return True
    
    # 规则2:24小时内≤2场,间隔≥2小时
    last_24h = [
        sc for sc in scheduled_courses
        if sc['instructor_name'] == instructor_name
        and sc['start_time'] >= start_time - timedelta(hours=24)
    ]
    
    if len(last_24h) >= 2:
        return True
    
    if len(last_24h) == 1:
        last_end = last_24h[0]['end_time']
        interval = (start_time - last_end).total_seconds() / 60
        if interval < 120:
            return True
    
    return False

六、测试与验证

6.1 测试数据准备

准备4个Excel测试文件:

  1. 教员、检查员名单.xls - 包含20个教员/检查员
  2. 附件4-人员预占 动态列表.xls - 包含预占时间
  3. 中队技术提高需求.xls - 包含中队需求
  4. 模拟机场次-需根据一定规则排教员检查员.xls - 包含约98场课程

6.2 验证清单

功能验证

  • 文件解析正确,所有数据读取完整
  • 教员信息正确(资质、干部、属地)
  • 预占时间正确解析
  • 课程分类正确
  • UP检查课只分配给干部检查员
  • 特殊教员规则正确执行
  • 时间冲突检测正确
  • 匀课均衡执行正确

6.3 结果验证

预期结果

  • ✅ 排班总数约98场
  • ✅ 排班成功率≥95%
  • ✅ 教员排班均衡(最高4场,最低2场)
  • ✅ 检查员排班合理
  • ✅ 未排班课程数量≤5场

七、注意事项

7.1 平台限制

  • 执行时间限制: 讯飞平台可能有单个节点执行时间限制(如30秒)
  • 内存限制: 可能有内存使用上限
  • API调用限制: 可能有API调用频率限制

7.2 数据处理

  • 日期格式:统一使用ISO 8601格式(YYYY-MM-DDTHH:mm:ss)
  • 文件编码:统一使用UTF-8编码
  • 数据验证:对输入数据进行严格验证

7.3 调试技巧

  • 在每个节点添加详细的日志输出
  • 记录关键数据的状态
  • 每个节点的输出可以暂存用于调试

八、常见问题FAQ

Q1: 工作流执行超时怎么办?

A: 将复杂逻辑拆分为多个节点,或者优化代码性能。

Q2: 如何处理Excel文件格式不一致的问题?

A: 添加数据预处理逻辑,自动识别和转换格式。

Q3: 如何验证排班结果的正确性?

A: 使用相同的测试数据在原系统和讯飞平台分别运行,对比结果。

Q4: 讯飞平台不支持某些Python库怎么办?

A: 寻找替代库,或者自己实现所需功能。

Q5: 如何提高排班成功率?

A: 优化降级补位逻辑,放宽部分限制条件,增加适配教员数量。

本攻略由AI辅助生成,仅供参考。如有疑问,请联系技术团队。