1. 项目背景与需求分析
在传统企业办公环境中,员工请假通常需要登录专门的HR系统,在复杂的表单界面中填写各类信息。这种操作方式存在几个明显痛点:
- 操作路径长:需要从日常办公环境切换到HR系统,找到对应功能模块
- 交互不友好:表单式填写缺乏灵活性,无法处理模糊或自然语言表达
- 效率低下:即使只请一天假也需要完整走完所有字段填写流程
我们团队在2024年首次尝试用对话机器人解决这个问题时,需要构建复杂的意图识别和实体抽取模型。当时的实现方案包括:
- 使用Dify等工具搭建NLU模块
- 自定义实体抽取规则处理时间表达式
- 设计多轮对话状态机管理缺失信息补全
虽然最终实现了功能,但开发维护成本较高。直到2025年SKILL标准的出现,我们发现可以用更优雅的方式重构这个流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SKILL技术方案选型
SKILL是一种声明式的对话技能描述规范,相比传统方案具有以下优势:
- 开发效率高:通过YAML-like语法定义对话逻辑,无需编写复杂的状态管理代码
- 平台兼容性好:符合Claude发布的开放标准,可在支持SKILL的各类平台运行
- 维护成本低:业务逻辑变更只需修改声明文件,无需重新训练模型
在请假场景中,SKILL特别适合处理:
- 结构化信息的收集(请假类型、时间等)
- 多轮对话的缺省补全
- 输入格式的标准化处理
3. 请假SKILL实现详解
3.1 基础结构定义
SKILL文件采用三段式结构:
yaml复制---
name: "leave-request"
description: "处理用户的请假请求,确认请假类型、开始时间和结束时间。"
---
# 请假处理
## 功能描述
[...]
关键设计要点:
name采用kebab-case命名规范description简明扼要说明核心功能- 使用Markdown语法组织后续内容
3.2 触发条件设计
yaml复制## 触发条件
当用户表达想要请假的意图时触发,例如:
- "我想请事假"
- "我需要请年假"
- "我想请病假"
- "我想请假"
触发词设计原则:
- 覆盖常见表达变体(想/需要/申请等)
- 包含完整和模糊两种触发形式
- 避免过于宽泛的匹配(如单独"请假")
3.3 核心处理流程
yaml复制## 处理流程
1. **信息提取**:
- 使用预置模式匹配请假类型(事假/年假/病假)
- 用正则表达式提取日期格式("5月1日"/"2026-05-01"/"后天"等)
2. **信息确认**:
- 采用固定顺序确认缺失信息(类型→开始时间→结束时间)
- 每个确认步骤设置超时和重试机制
3. **信息汇总**:
- 自动计算请假天数
- 统一转换为标准日期格式
- 提供完整信息确认环节
流程设计考量:
- 确认顺序按信息重要性排列
- 日期处理支持多种常见表达
- 汇总环节避免信息误解
3.4 异常处理设计
yaml复制## 异常处理
1. **无效请假类型**:
- 提示可选类型:"请输入有效请假类型(事假/年假/病假)"
2. **日期格式错误**:
- 提供示例:"请按'5月1日'或'2026-05-01'格式输入"
3. **时间逻辑错误**:
- 开始时间晚于结束时间时:"开始时间不能晚于结束时间,请重新输入"
4. 实际应用测试案例
4.1 完整信息场景
code复制用户:我想请事假,从5月1日到5月3日
系统:好的,您将请事假从5月1日到5月3日,共3天。
处理过程:
- 匹配"事假"类型
- 提取"5月1日"和"5月3日"作为起止时间
- 自动计算天数差
4.2 模糊信息场景
code复制用户:我想休天假
系统:请问要请什么类型的假?(事假/年假/病假)
用户:年假
系统:请问开始时间是?
用户:下周一
系统:请问结束时间是?
用户:下周一
系统:好的,您将请年假从2026-04-06到2026-04-06,共1天。
关键技术点:
- 识别"休天假"为请假意图
- 将"下周一"转换为具体日期
- 单日请假自动修正为相同起止时间
4.3 边界情况测试
code复制用户:我想从明天请到昨天
系统:开始时间不能晚于结束时间,请重新输入
用户:那就今天到明天
系统:好的,您将请事假从2026-04-01到2026-04-02,共2天。
容错机制:
- 时间逻辑校验
- 自然语言修正处理
- 缺省类型补全(未指定时默认事假)
5. 系统集成方案
5.1 与HR系统对接
收集完整信息后,SKILL输出标准JSON:
json复制{
"type": "annual_leave",
"start_date": "2026-04-03",
"end_date": "2026-04-03",
"days": 1,
"employee_id": "E10086"
}
对接方式:
- REST API调用HR系统接口
- 消息队列异步处理
- 数据库直接写入
5.2 企业通讯工具集成
在OC等平台的实际部署方案:
-
权限控制:
- 绑定员工企业账号
- 自动获取个人信息(工号、部门等)
-
通知机制:
- 提交成功后通知主管审批
- 结果回调通知申请人
-
使用统计:
- 记录SKILL调用情况
- 分析常用请假模式
6. 实施经验与优化建议
6.1 实际部署中的发现
-
时间表达多样性:
- 需要支持"下下周"、"大后天"等相对表达
- 节假日特殊处理(如"国庆后第一天")
-
类型扩展需求:
- 后期增加了调休、婚假等类型
- 需要动态加载类型配置
-
多平台适配:
- 不同IM平台的消息格式差异
- 移动端输入的特殊处理
6.2 性能优化方案
-
缓存策略:
- 常用日期表达的计算结果缓存
- 员工基本信息本地缓存
-
异步处理:
- 耗时操作(如日期计算)异步化
- 接口调用队列管理
-
批量操作:
- 支持连续请假申请
- 批量审批功能扩展
7. 扩展应用场景
7.1 出差申请流程
类似结构可用于:
- 出差目的收集
- 行程时间确认
- 交通住宿偏好记录
7.2 会议室预订系统
适配处理:
- 会议室选择
- 使用时间段
- 设备需求
7.3 通用审批流程
可复用的模式:
- 申请类型识别
- 结构化信息提取
- 缺省信息补全
在实际项目中,我们进一步优化了日期处理模块,增加了对"清明节前后"等复杂时间表达的支持。同时引入了请假额度实时查询功能,在对话中就能显示剩余年假天数,大幅提升了用户体验。
