SKILL.md
readonly只读
name
srt-booking
description
使用SRTrain库在韩国搜索、预订、查看和取消SRT车票。当用户询问SRT座位可用性、预订、取消或售罄重试计划时使用。
SRT 预订
技能功能
在 SRTrain 之上使用 scripts/srt_booking.py 辅助脚本来处理 SRT 查询和按车厢查看座位号,预订和取消则通过重新确认固定列车/预订后使用 SRTrain 进行。
使用场景
- "帮我找从水西到釜山的SRT"
- "明天上午的SRT有空位就帮我订"
- "帮我查看SRT 5号车厢的空座位"
- "帮我看看SRT 11A座位是否空着"
- "优先显示靠窗的SRT空位"
- "查看我的预订记录"
- "取消这个SRT预订"
不使用场景
- 需要自动完成支付的情况
- 试图直接在聊天窗口发送密码的情况
- 不是SRT而是KTX/Korail预订的情况
前提条件
- Python 3.10+
python3 -m pip install SRTrain
所需环境变量
KSKILL_SRT_IDKSKILL_SRT_PASSWORD
凭据解析顺序
- 如果环境变量中已存在,则直接使用。
- 如果代理正在使用自己的秘密存储(1Password CLI、Bitwarden CLI、macOS Keychain等),则可以从那里获取并注入为环境变量。
~/.config/k-skill/secrets.env(默认回退)——纯 dotenv 文件,权限0600。- 如果都没有,则询问用户并存储到2或3中。
存储到默认路径只是回退方案,并非强制。
输入
- 出发站
- 到达站
- 日期:
YYYYMMDD - 期望开始时间:
HHMMSS - 人数和乘客类型
- 座位偏好:普通席/特等席
- 座位详细条件:车厢等级、车厢号、座位号、仅显示空座、搜索优先级
工作流程
0. 全局安装缺失的包
如果 python3 -c 'import SRT' 失败,不要使用其他实现绕过,而是先尝试全局安装 Python 包。
python3 -m pip install SRTrain
1. 确保凭据可用
检查 KSKILL_SRT_ID 和 KSKILL_SRT_PASSWORD 环境变量是否已设置。如果没有,则按照上述凭据解析顺序获取。
不要因为缺少秘密信息而直接抓取网站或寻找其他非官方途径。
2. 先搜索
首先使用辅助脚本查询并汇总候选列车。
python3 scripts/srt_booking.py search 水西 釜山 20260328 080000 --time-limit 120000 --limit 5
3. 在产生副作用前汇总选项
在预订前,始终简要汇总以下信息:
- 出发/到达时间
- 普通席/特等席可用性
- 预计票价
4. 当用户询问座位号时查看详细座位
search 的座位可用性是列车级别的标志。当用户询问具体座位,如“剩余座位号”、“按车厢查看座位”、“特定座位”、“靠窗/顺向座位”、“预订前确认座位”时,在预订前调用 seats。
python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id>
如果只想查看特定车厢的空座,使用 --car-no 和 --available-only。
python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id> --car-no 5 --available-only
要检查特定座位是否空着,添加 --seat。
python3 scripts/srt_booking.py seats 水西 釜山 20260328 080000 --train-id <train_id> --car-no 5 --seat 11A
如果不指定特定车厢,则从中间车厢开始搜索。使用 --car-priority center|low|high 更改车厢搜索顺序,使用 --seat-priority forward-window|window-forward|row-low 更改座位排序优先级。
显示详细座位响应时,优先汇总以下信息:
- 每节车厢的
available_seat_count - 剩余座位号(
available_seats) - 每个座位的
direction、position - 如果请求了特定座位,则显示
requested_seat_available
此功能不会选择或占用座位。实际预订仅在下一步进行。
5. 仅在确定列车后进行预订
预订有副作用,因此仅在选定确切列车后进行。
python3 - <<'PY'
import os
from SRT import Adult, SRT, SeatType
srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
trains = srt.search_train("水西", "釜山", "20260328", "080000", time_limit="120000")
reservation = srt.reserve(
trains[0],
passengers=[Adult(1)],
special_seat=SeatType.GENERAL_FIRST,
)
print(reservation)
PY
6. 查看或取消
在取消前,重新确认目标预订。
python3 - <<'PY'
import os
from SRT import SRT
srt = SRT(os.environ["KSKILL_SRT_ID"], os.environ["KSKILL_SRT_PASSWORD"])
reservations = srt.get_reservations()
print(reservations)
PY
完成条件
- 如果是查询请求,候选列车已汇总
- 如果是详细座位查询,每节车厢的剩余座位号或特定座位是否空着已汇总
- 如果是预订请求,预订结果、票价和购买期限已确认
- 如果是取消请求,已明确取消了哪个预订
失败模式
- 登录错误:检查账户信息或SRT站点策略是否变更
- 售罄:重新搜索其他时间段或座位类型
- 座位选择页面格式变更:需要更新辅助脚本解析器
- 网络错误:短暂重试,但避免激进轮询
备注
- 详细座位查看以只读方式读取SRT网页座位选择页面
SRTrain是SRT专用库,使技能意图更清晰- 不自动化完成支付
- 自动重试循环应保持简短和保守,以保护账户






