关于 compare-flights
供 Agent 比较机票现金票价、里程票、积分门户和转点方案的编排技能,并将结果汇总为按成本排序的表格,附带故障处理与预订建议。
主要功能
- 01并行搜索现金票与里程票
- 02比较积分门户报价
- 03计算转点伙伴成本
- 04生成统一排序对比表
- 05报告数据源故障
适用场景
- 01比较现金票价与里程票
- 02评估积分门户兑换报价
- 03查找里程票的转点路径
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ borski/ travel-hacking-toolkit --skill compare-flights安装后在 Claude Code 中输入/compare-flights确认已加载。
详细介绍
比较航班
搜索所有可用来源,查找某条航线并提供统一的比较结果。将现金票价、奖励机票可用情况、门户网站积分支付方式和转点合作伙伴优化整合到一个表格中。
这是一项编排技能。 它会告诉 Agent 要运行哪些工具,以及如何整合结果。没有独立脚本。
配套参考技能。 加载以下技能以了解更多背景信息:
flight-search-strategy— 完整的来源优先级、市场选择和来源准确性层级points-valuations— CPP 规则、最低值/最高值、附加费计划和转点奖励partner-awards— 联盟及双边合作伙伴的可达范围lessons-learned— Seats.aero 工作流、Southwest 详情和 Companion Pass 计算fallback-and-resilience— 来源失效时的处理方式transfer-bonuses— 当前有效的转点奖励(实时数据);计算比较表的选项 4–7 时,会影响兑换比例stopovers— 行程有长时间转机或包含多个城市时,检查允许中途停留的计划是否比单独购买单程票的定价更低round-the-world— 对于包含 3 个或更多停靠点、跨多个地区的行程,环球旅行产品的奖励机票定价可能低于各段价格之和award-holds— 许多主要的西方计划(UA、Aeroplan、AS、DL、BA、ANA、Qatar、Korean)已不再提供保留机位服务。部分计划仍提供:AA(在线保留 24 小时)、Lufthansa M&M(5 天)、Flying Blue(3 天,电话办理需支付 $25)、Cathay(2 天,需支付 $39)、Turkish(2 天)、Virgin Atlantic(1–2 天,电话办理免费)、Singapore(由客服决定)。这会影响建议的方式是“先转点再出票”还是“立即出票”status-match— 比较包含升舱或精英会员专享权益(贵宾室使用权、免费行李、优先服务)的选项时使用;会员等级会改变航班的实际成本
适用场景
- “帮我找 8 月从 SFO 到 CDG 的最佳出行方式。”
- “这趟航班应该付现金还是用积分?”
- “比较从 SFO 到 NRT 的商务舱所有选项。”
- 用户希望全面了解情况的任何航班搜索
来源
尽可能并行运行以下来源。绝不要静默失败。 如果某个来源出错,请在输出中说明,让用户知道缺少了哪些信息。
现金票价(并行运行)
| 来源 | 技能 | 速度 | 备注 |
|---|---|---|---|
| Duffel | duffel | ~3s | 主要来源。提供带舱位代码的真实 GDS 票价。不包括 Southwest。 |
| Ignav | ignav | ~2s | 快速 REST API。适合比价。提供预订链接。 |
| Google Flights | google-flights | ~10s | 通过浏览器自动化运行。涵盖所有航空公司,包括 Southwest 现金票价。适合交叉核对。 |
| Skiplagged | web 搜索 | ~5s | 隐藏城市购票。经常能找到便宜很多的票价。搜索 skiplagged.com/flights/{origin}/{dest}/{date}。 |
| Kiwi.com | web 搜索 | ~5s | 灵活的航线、自行转机组合和多城市行程。搜索 kiwi.com。 |
| Southwest | southwest | ~20s | 仅限 Patchright、Docker。提供全部 4 个票价舱位的积分和现金价格。仅在 SW 执飞该航线时需要。 |
Skiplagged 和 Kiwi: 使用网页搜索(tavily 或 exa)查找票价。它们没有 MCP 技能,但其 URL 可预测。请始终注明 Skiplagged 票价的限制(不能托运行李,且必须将“错过”的转机城市作为目的地)。
Southwest: 如果 SW 执飞该航线,请运行 southwest 技能。在比较表中将 SW Rapid Rewards 积分作为单独的货币列出。lessons-learned 技能包含关于 SW 详情(票价舱位要求、Companion Pass 计算和 GDS 缺口)的完整信息。
SerpAPI 为可选项。 仅在用户询问 Google Hotels 或目的地发现时使用。
奖励机票可用情况
| 来源 | 技能 | 速度 | 备注 |
|---|---|---|---|
| Seats.aero | seats-aero | ~5s | 缓存了 25 个以上计划的奖励机票可用情况。主要奖励机票来源。 |
门户积分支付(并行运行,需要 Docker)
| 来源 | 技能 | 耗时 | 备注 |
|---|---|---|---|
| Chase UR | chase-travel | ~45s | 动态积分加成定价(部分预订可达约 1.5–2.0 cpp,但并非保证下限)。 |
| Amex MR | amex-travel | ~45s | 检测 Platinum 卡的 IAP 折扣。 |
门户搜索速度较慢(需要浏览器登录)。请彼此并行运行,但不要等待它们完成。先启动现金和奖励搜索,展示这些结果,然后在门户搜索完成后追加其结果。
只有在用户持有相关卡片或要求查询门户价格时,才运行门户搜索。 如果用户没有 Sapphire 卡,请勿运行 Chase 搜索。
工作流
步骤 1:收集所有价格
并行运行搜索。记录哪些来源成功,哪些失败。
PARALLEL GROUP 1 (fast, ~3-5s):
- Duffel: cash prices with fare classes
- Ignav: cash prices with booking links
- Seats.aero: award availability by program
- Skiplagged: hidden city fares (web search)
- Kiwi.com: creative routings (web search)
PARALLEL GROUP 2 (browser-automated, ~10-45s, Docker):
- Google Flights: all airlines including Southwest cash
- Southwest: points + cash for all fare classes (if SW flies the route)
- Chase Travel: UR portal pricing + Points Boost
- Amex Travel: MR portal pricing + IAP discounts
对于每个来源,记录:
- 来源名称
- 状态:"ok" | "error: {reason}" | "skipped: {reason}"
- 结果数量
- 数据
步骤 2:应用转点合作伙伴优化
对于每条 seats.aero 奖励结果,使用 data/transfer-partners.json 计算每种可转点货币的实际成本:
For each award (e.g., United business at 88,000 miles):
1. Look up which currencies transfer to United: Chase UR (1:1), Bilt (1:1)
2. Calculate effective cost: 88,000 / 1.0 = 88,000 UR or 88,000 Bilt
3. Calculate opportunity cost using data/points-valuations.json:
88,000 UR × 1.7cpp floor = $1,496 equivalent
包括所有可行的转点路径,而不只是成本最低的路径。用户在某种货币中的积分可能比其他货币更多。
步骤 3:计算门户 CPP
Chase 门户在 CSR/CSP 上采用动态积分加成定价。历史上的固定 1.5 倍乘数已取消。 现在每笔预订都会给出具体的积分价格;CSR 的实际 cpp 通常在 1.5–2.0 之间,但并非每笔预订都保证达到这一水平。务必获取实际门户报价,而不是根据乘数计算。
积分加成报价示例(请核实实际价格):
Portal quote: 269,841 points for a $5,397 flight
True CPP: $5,397 / 269,841 = 2.0 cpp (excellent)
对于加成较低或没有加成的预订,同一航班的报价可能为 1.5 cpp,甚至更低。比较时务必使用实际报价。
Amex 门户的航班兑换比例约为 1 cpp(1 MR = 1 美分)。IAP 票价是折扣后的现金价格:
Standard: $5,044 = 504,400 MR points
IAP: $4,381 = 438,100 MR points (saves 66,300 MR)
步骤 4:展示统一表格
始终使用 Markdown 表格。 将所有选项放入一张表中,并按实际成本排序。
示例:SFO → CDG 商务舱,8 月 11 日
| # | 选项 | 来源 | 价格 | 积分 | 货币 | CPP | 评级 |
|---|---|---|---|---|---|---|---|
| 1 | 现金(最低价) | Duffel | $4,200 | — | — | — | — |
| 2 | Flying Blue,经 Chase UR 转点 | seats.aero | $120 税费 | 55,000 | Chase UR | 7.4 | 极佳 |
| 3 | Aeroplan,经 Chase UR 转点 | seats.aero | $200 税费 | 70,000 | Chase UR | 5.7 | 极佳 |
| 4 | Chase 门户(加成优惠) | chase-travel | $5,400 门户价格 | 180,000 | Chase UR | 3.0 | 极佳(有此优惠时) |
| 5 | Chase 门户(无加成) | chase-travel | $5,400 门户价格 | 360,000 | Chase UR | 不固定(通常约 1.5) | 查询实时报价 |
| 6 | Amex 门户(IAP) | amex-travel | $5,044 门户价格 | 438,100 | Amex MR | 1.15 | 较差 |
| 7 | Amex 门户(标准) | amex-travel | $5,044 门户价格 | 504,400 | Amex MR | 1.0 | 较差 |
注:门户行的 CPP 以门户自身报价($5,400 / $5,044)为基准,因为这是门户实际收取的现金价格。奖励行则以 Duffel 的市场价格($4,200)为基准,因为这是用户兑换里程所放弃的现金等价。由于门户会加价,这两个基准不同,因此门户 CPP 和奖励 CPP 不能直接比较。更好的比较方式是比较每种方案的现金自付总额(税费 + 现金部分)。
示例:SFO → LAX 经济舱,8 月 11 日
| # | 选项 | 来源 | 价格 | 积分 | 货币 | CPP | 评级 |
|---|---|---|---|---|---|---|---|
| 1 | SW Wanna Get Away | southwest | $79 | 5,200 | SW RR | 1.52 | 不错 |
| 2 | 现金(最低价) | Duffel | $89 | — | — | — | — |
| 3 | SW WGA+ | southwest | $119 | 8,400 | SW RR | 1.42 | 一般 |
| 4 | 通过 Chase UR 兑换 United | seats.aero | $5.60 税费 | 5,000 | Chase UR | 1.67 | 不错 |
| 5 | Chase Portal | chase-travel | — | 8,900 | Chase UR | 不定(通常约 1.5) | 获取实时报价 |
| 6 | SW Anytime | southwest | $219 | 16,800 | SW RR | 1.30 | 一般 |
注意:SW 积分价值采用直接兑换的 CPP。如果用户拥有 Companion Pass,实际 CPP 会翻倍(支付一张机票的积分即可兑换两张机票)。
已查询的来源:
- ✅ Duffel:45 个结果
- ✅ Ignav:38 个结果
- ✅ Skiplagged:3 个隐藏城市选项
- ✅ Kiwi.com:12 个创意路线
- ✅ Seats.aero:12 个奖励兑换选项
- ✅ Southwest:4 种票价等级(WGA $79/5.2K、WGA+ $119/8.4K、Anytime $219/16.8K、BizSelect $289/22.1K)
- ✅ Chase Travel:300 个结果(其中 3 个可享 Points Boost)
- ✅ Amex Travel:292 个结果(可使用 IAP)
- ✅ Google Flights:52 个结果
步骤 5:提出建议
表格后,始终提供:
- 总体最佳价值: 哪个选项的 CPP 最高
- 最方便: 哪个选项最容易预订(在线预订还是电话预订、即时转点还是需要等待)
- 现金还是积分: 使用 trip-calculator 框架:
- 如果现金价格 < 最佳奖励兑换的机会成本 → “支付现金”
- 如果现金价格 > 机会成本 → “使用积分”
- 转点警告: “确认有位后再转点。转点通常即时到账,但可能需要 48 小时。”
- 余额检查: 如果已知用户的积分余额(来自 AwardWallet 或此前的上下文),请指出余额是否不足
错误处理
绝不能静默失败。 每个来源都必须报告其状态。
如果某个来源失败:
- ❌ Duffel: API error (rate limit exceeded). Cash prices from Ignav only.
- ❌ Chase Travel: Login failed (2FA timeout). No portal pricing available.
如果所有现金来源都失败,请明确说明。不要在未指出缺少现金价格对比的情况下,只提供奖励兑换结果。
如果 seats.aero 未返回任何可用性,请说明“未找到奖励兑换可用性”,而不是静默省略奖励兑换部分。
使用的数据文件
| 文件 | 用途 |
|---|---|
data/transfer-partners.json | 信用卡 → 忠诚度计划的转点比例 |
data/points-valuations.json | 用于计算机会成本的 CPP 下限/上限 |
data/partner-awards.json | 跨联盟预订选项(VA→ANA、EY→AA 等) |
限制
- 门户搜索需要 Docker 和登录凭据。如果未配置,请跳过。
- Seats.aero 显示的是缓存的可用性(可能最多早 24 小时)。通过 seats-aero-web 进行的实时搜索仅限本地。
- 转点比例来自
transfer-partners.json。进行大额转点前,请向发卡机构核实。 - Chase 门户价格采用动态 Points Boost(特定预订通常为 1.5–2.0 cpp,并非保证下限)。过去固定的 1.5 倍乘数已取消。请获取门户的实际报价,不要根据乘数计算。
- Southwest 不在 Duffel、Ignav 或 seats.aero 中。如果需要 Southwest 价格,请使用 Google Flights 技能。