Tennis Travel Rater
Evaluate tennis vacation destinations with structured scoring and recommendations.
Data Sources
This skill uses web search to collect flight price information. No external tools or installations are required.
Quick Start
- 1. Extract destination info from user input
- Confirm departure city (ask if not provided, default to Shanghai)
- Ask user preferences (optional, use default weights if skipped)
- Collect data for each dimension
- Calculate weighted scores
- Generate report using template
Scoring Dimensions
| Dimension | Weight | Key Metrics |
|---|
| Transportation | 25% | Flight price, frequency, ground transport |
| Accommodation |
25% | Hotel price, rating, proximity to courts |
| Weather | 20% | Temperature, precipitation, best season |
| Facilities | 30% | Court quality, fees, coaching availability |
Custom Weights: If user has preferences, adjust weights as follows:
- - If user selects 2 priorities: 35% / 35% / 15% / 15% for top 2 and bottom 2
- If user selects 1 priority only: 35% / 21.7% / 21.7% / 21.6% (priority gets 35%, others equally split remaining 65%)
- If user selects no preference: Use default 25% / 25% / 25% / 25%
Dimension Details
Transportation (交通可达性)
- - Flight price: Round-trip cost from origin
- Frequency: Daily/weekly flights, flexibility
- Ground transport: Airport to court/hotel convenience
Accommodation (住宿条件)
- - Hotel price: Mid-range average per night
- Court-proximity: Walking distance or shuttle available
- Rating: Booking/TripAdvisor scores
Weather (天气适宜度)
- - Temperature: 15-28C optimal for outdoor tennis
- Precipitation: Rain probability impact
- Sunlight: Playable hours per day
- Best season: Recommended months
Facilities (球场质量)
- - Court types: Hard/clay/grass count and quality
- Fees: Hourly rental rates
- Amenities: Locker room, shower, racket rental
- Coaching: Pro coach availability and rates
Destination Types
| Type | Characteristics | Best For |
|---|
| Training | Pro facilities, intensive atmosphere | Serious players |
| Resort |
Leisure vibe, integrated vacation | Families/friends |
| Scenic | Unique views, Instagram-worthy | Short trips |
| Urban | City center, trendy | Business travelers |
Workflow
Step 1: Gather Information
Extract from user input:
- - Destination name (city/resort/court) - 从文字或链接中提取
- Travel dates/season
- Departure city
- Any links provided (Xiaohongshu, Instagram, etc.)
信息收集原则:
- - 链接访问失败不阻塞流程
- 从用户消息文字中提取目的地(如"富士山" 确定为"静冈"或"山梨")
- 缺失信息先使用默认值,同时询问用户确认
Link Access Protocol
When user provides a link (e.g., Xiaohongshu, Instagram):
- 1. Extract destination from user message text first
- Parse destination from message content (e.g., "富士山人生球场" Japan Shizuoka/Yamanashi)
- This is the primary source - never rely solely on link access
- 2. Optionally attempt to access the link (non-blocking, 10s timeout)
- Use WebFetch or browser automation
- If successful supplement with additional details
- If failed continue with text-extracted information
- 3. Confirm with user if information is unclear
- Ask: "Detected you want to visit [destination]. Is this correct?"
- Get confirmation before proceeding
- 4. Never block on link failure
- Link access is supplementary only
- Always proceed with text-extracted information
- Missing details can be filled via user questions
If departure city unknown: Ask user or default to Shanghai (note in report).
Step 2: User Preferences (Optional)
Ask: "What's most important to you? (Choose up to 2)"
- - Flight convenience
- Hotel quality
- Weather
- Court facilities
If skipped, use default 25% weights.
Step 3: Data Collection
| Dimension | Data Source | Fallback |
|---|
| Flights | flyai CLI (if installed) for real-time prices | WebSearch for reference prices |
| Hotels |
Booking, TripAdvisor | WebSearch |
| Weather | Historical climate data | - |
| Courts | Built-in database, web search | - |
注意:如果 flyai CLI 未安装,将使用 WebSearch 获取参考价格,并在报告中标注数据来源。
Flight Search
Priority: Use flyai CLI for real-time prices if available
Step 1: Check if flyai is installed
CODEBLOCK0
Step 2: If installed, query real-time flight prices
CODEBLOCK1
Step 3: Parse results
- - Round-trip total price (for scoring)
- Top 3 cheapest options (for report)
- jumpUrl (booking link)
Fallback: If flyai is not installed
Use WebSearch to get reference prices:
- - Search query: INLINECODE0
- Label as "网络参考价(非实时)"
- Note in report: "Install flyai CLI for real-time prices:
npm install -g @fly-ai/flyai-cli"
Data Source Labels:
| Label | Condition | Scoring Impact |
|---|
| flyai实时 | flyai CLI executed successfully | Full score |
| 网络参考 |
WebSearch used (flyai not installed) | -1 point (max 8/10) |
| 待补充 | All methods failed | Max 5/10 |
Rules:
- - Never invent flight prices
- Always label data source clearly
Step 4: Scoring
Each dimension scored 0-10:
- - 9-10: Excellent
- 7-8: Good
- 5-6: Average
- <5: Poor
Final Score = (dimension_score weight)
Step 5: Report Generation
Use report-template.md for full template.
For single destination: Use single-destination template
For multiple destinations: Use comparison template
Report Structure
CODEBLOCK2
Report Footer - Price Monitoring (REQUIRED)
ALWAYS include this section at the end of every report:
CODEBLOCK3
触发条件(满足任一即需添加):
- 1. 用户没有设置具体出行日期
- 计划出行时间距离今天 >15天
如果用户同意监控:
- 1. 询问:出发城市、目的地、偏好月份、预算上限
- 手动价格检查:在当前会话中使用 WebSearch 或 flyai CLI 查询当前价格
- 提供建议:根据查询结果给出购票建议,但不创建自动监控任务
- 确认已提供价格信息
如果用户拒绝:正常结束,无需进一步操作
注意:本 skill 不创建自动后台监控任务。如需持续监控,请手动定期查询。
Built-in Database
Quick reference for popular destinations:
Asia: Sanya Haitang Bay, Shanghai Qizhong, Tokyo Ariake, Bali
Europe: Roland Garros, Wimbledon, Monte Carlo, Barcelona
Americas: Indian Wells, Miami, Cancun
Oceania: Melbourne Park, Gold Coast
For full database, see destinations.md.
Key Principles
- 1. No data, no output - Mark missing data as "待补充"
- Label all prices as "参考价" (reference only)
- Highlight data sources for transparency
- Never invent flight prices, hotel ratings, or any destination details
- Link fails Ask user - When cannot access user-provided links, always ask for direct input instead of guessing
Anti-Hallucination Checklist
Before generating report, verify:
- - [ ] 航班价格:来自flyai实时查询(Bash工具),或已标记为"待补充/网络参考价"
- [ ] 未使用WebSearch冒充flyai:没有用网络搜索价格冒充实时查询结果
- [ ] All ratings are from real platforms or marked "待补充"
- [ ] No information invented when link access failed
- [ ] User provided destination name (not guessed from failed link)
- [ ] Data sources clearly labeled in report
航班数据专项核查
必须确认:
- - 已检查 flyai CLI 是否可用
- 如可用,已使用 Bash 工具执行 flyai 命令
- 如不可用,已使用 WebSearch 获取参考价格
- 交通维度评分基于实际获取的价格数据
- 数据来源已清晰标注(flyai实时/网络参考/待补充)
Price Monitoring Guide (MANDATORY)
When to Include
MUST include price monitoring section in EVERY report when:
- - User has not set specific travel dates, OR
- Travel date is >15 days away from today
Where to Include
ALWAYS add at the END of the report, after the budget estimate section:
CODEBLOCK4
If User Agrees
- 1. Ask for details:
- Departure city (confirm)
- Destination (confirm)
- Preferred travel months
- Budget limit for round-trip flights
- 2. Perform immediate price check (no automatic monitoring):
- Use WebSearch or flyai CLI to check current prices
- Compare with user's budget
- Provide booking recommendation based on current data
- 3. Confirm to user:
CODEBLOCK5
If User Declines
Continue normally, no further action needed.
Examples
Example 1 - Basic query (flyai installed):
Input: "Evaluate Sanya for tennis trip from Shanghai in April"
Workflow:
- 1. Ask departure city Shanghai
- Ask preferences User selects "Weather" and "Facilities"
- Check if flyai is installed Yes
- Query real-time flights:
flyai search-flight --origin "上海" --destination "三亚" --dep-date-start 2025-04-01 --dep-date-end 2025-04-07 --back-date-start 2025-04-05 --back-date-end 2025-04-12 --sort-type 3
- 5. Parse price (1,580) Score transportation dimension
- Search hotels, weather, court info
- Generate report with weights: Weather 35%, Facilities 35%, Transportation 15%, Accommodation 15%
Output: Full report with 8.2/10 score (transportation based on flyai real-time price)
Example 1b - flyai not installed:
Input: "Evaluate Sanya for tennis trip from Shanghai in April"
Workflow:
1-2. Same as above
- 3. Check if flyai is installed No
- Use WebSearch fallback:
- Search: "上海到三亚机票价格"
- Get reference price: 1,200-2,000
- Label as "网络参考价(非实时)"
- 5. Score transportation dimension (max 8/10 due to reference data)
- Continue with other data collection
- Generate report with note: "Install flyai CLI for real-time prices"
Output: Report with reference prices and installation suggestion
Example 2 - Comparison:
Input: "Compare Sanya vs Bali for tennis vacation"
Output: Side-by-side comparison with recommendation
Example 3 - Custom weights (single priority):
Input: "I care most about flight convenience"
Workflow:
- 1. User selects only 1 priority: "Transportation"
- Weights: Transportation 35%, Accommodation 21.7%, Weather 21.7%, Facilities 21.6%
- Check flyai availability Query flights if installed, else use WebSearch
- Score transportation based on available data source
Output: Report with Transportation 35%, others equally split
Example 4 - User provides Xiaohongshu link:
Input: "我想去这里打球:96 【富士山人生球场!...】https://www.xiaohongshu.com/..."
Workflow:
- 1. Extract destination from text first:
- Parse "富士山人生球场" Japan Shizuoka/Yamanashi region
- Text extraction is primary - link access is optional
- 2. Optionally attempt link access Failed (Xiaohongshu anti-scraping)
- Continue with text-extracted information
- 3. Confirm with user: "Detected you want to visit a court near Mt. Fuji (Shizuoka area). Default departure city: Shanghai. Is this correct?"
- After user confirms, check flyai availability:
- If installed Query real-time flights
- If not installed Use WebSearch for reference prices
- 5. Generate report with clear data source labels
Output: Complete report with transportation data (source clearly labeled)
网球旅行评分器
通过结构化评分和推荐评估网球度假目的地。
数据来源
本技能使用网络搜索收集航班价格信息。无需外部工具或安装。
快速开始
- 1. 从用户输入中提取目的地信息
- 确认出发城市(如未提供则询问,默认上海)
- 询问用户偏好(可选,跳过则使用默认权重)
- 收集各维度数据
- 计算加权得分
- 使用模板生成报告
评分维度
| 维度 | 权重 | 关键指标 |
|---|
| 交通可达性 | 25% | 航班价格、频率、地面交通 |
| 住宿条件 |
25% | 酒店价格、评分、距球场距离 |
| 天气适宜度 | 20% | 温度、降水、最佳季节 |
| 球场质量 | 30% | 场地质量、费用、教练配备 |
自定义权重:如果用户有偏好,按以下方式调整权重:
- - 如果用户选择2个优先项:前两项35%/35%,后两项15%/15%
- 如果用户只选择1个优先项:优先项35%,其余三项均分剩余65%(21.7%/21.7%/21.6%)
- 如果用户无偏好:使用默认25%/25%/25%/25%
维度详情
交通可达性
- - 航班价格:从出发地往返费用
- 航班频率:每日/每周航班,灵活性
- 地面交通:机场到球场/酒店的便利性
住宿条件
- - 酒店价格:中档酒店每晚均价
- 距球场距离:步行距离或班车服务
- 评分:Booking/TripAdvisor评分
天气适宜度
- - 温度:室外网球最佳15-28°C
- 降水:降雨概率影响
- 日照:每日可打球时长
- 最佳季节:推荐月份
球场质量
- - 场地类型:硬地/红土/草地数量和质量
- 费用:每小时租赁价格
- 配套设施:更衣室、淋浴、球拍租赁
- 教练:专业教练配备和价格
目的地类型
| 类型 | 特点 | 最适合 |
|---|
| 训练型 | 专业设施,高强度氛围 | 认真球员 |
| 度假型 |
休闲氛围,综合度假体验 | 家庭/朋友 |
| 风景型 | 独特景观,适合拍照 | 短途旅行 |
| 城市型 | 市中心,时尚潮流 | 商务旅客 |
工作流程
第1步:收集信息
从用户输入中提取:
- - 目的地名称(城市/度假村/球场)- 从文字或链接中提取
- 旅行日期/季节
- 出发城市
- 提供的任何链接(小红书、Instagram等)
信息收集原则:
- - 链接访问失败不阻塞流程
- 从用户消息文字中提取目的地(如富士山确定为静冈或山梨)
- 缺失信息先使用默认值,同时询问用户确认
链接访问协议
当用户提供链接时(如小红书、Instagram):
- 1. 首先从用户消息文字中提取目的地
- 从消息内容中解析目的地(如富士山人生球场→日本静冈/山梨)
- 这是主要来源——绝不单独依赖链接访问
- 2. 可选尝试访问链接(非阻塞,10秒超时)
- 使用WebFetch或浏览器自动化
- 如果成功→补充额外细节
- 如果失败→继续使用文字提取的信息
- 3. 信息不明确时与用户确认
- 询问:检测到您想访问[目的地]。是否正确?
- 获得确认后再继续
- 4. 绝不因链接失败而阻塞
- 链接访问仅为补充
- 始终使用文字提取的信息继续
- 缺失细节可通过用户提问补充
如果出发城市未知:询问用户或默认上海(在报告中注明)。
第2步:用户偏好(可选)
询问:您最看重什么?(最多选2项)
如果跳过,使用默认25%权重。
第3步:数据收集
| 维度 | 数据来源 | 备用方案 |
|---|
| 航班 | flyai CLI(如已安装)获取实时价格 | WebSearch获取参考价格 |
| 酒店 |
Booking、TripAdvisor | WebSearch |
| 天气 | 历史气候数据 | - |
| 球场 | 内置数据库、网络搜索 | - |
注意:如果flyai CLI未安装,将使用WebSearch获取参考价格,并在报告中标注数据来源。
航班搜索
优先:如果可用,使用flyai CLI获取实时价格
第1步:检查flyai是否已安装
bash
which flyai
第2步:如果已安装,查询实时航班价格
bash
flyai search-flight \
--origin 出发城市 \
--destination 目的地 \
--dep-date-start YYYY-MM-DD \
--dep-date-end YYYY-MM-DD \
--back-date-start YYYY-MM-DD \
--back-date-end YYYY-MM-DD \
--sort-type 3
第3步:解析结果
- - 往返总价(用于评分)
- 前3个最便宜选项(用于报告)
- jumpUrl(预订链接)
备用方案:如果flyai未安装
使用WebSearch获取参考价格:
- - 搜索查询:[出发城市]到[目的地]机票价格
- 标注为网络参考价(非实时)
- 在报告中注明:安装flyai CLI获取实时价格:npm install -g @fly-ai/flyai-cli
数据来源标签:
| 标签 | 条件 | 评分影响 |
|---|
| flyai实时 | flyai CLI成功执行 | 满分 |
| 网络参考 |
使用WebSearch(flyai未安装) | -1分(最高8/10) |
| 待补充 | 所有方法均失败 | 最高5/10 |
规则:
第4步:评分
每个维度评分0-10:
- - 9-10:优秀
- 7-8:良好
- 5-6:一般
- <5:较差
最终得分 = (维度得分 × 权重)
第5步:报告生成
使用report-template.md获取完整模板。
单个目的地:使用单目的地模板
多个目的地:使用比较模板
报告结构
markdown
🎾 网球旅行评分报告
[目的地]
一句话总结:[简洁概括目的地核心优势和注意事项]
综合评分:[X.X]/10
评级:[强烈推荐/推荐/等]
类型:[训练型/度假型/风景型/城市型]
维度评分
| 维度 | 得分 | 权重 | 关键指标 | 数据来源 |
|---|
| 交通可达性 | X.X/10 | XX% | 往返机票 X,XXX起 | flyai实时/网络参考/待补充 |
| 住宿条件 |
X.X/10 | XX% | XXX/晚 | Booking/Agoda/携程 |
| 天气适宜度 | X.X/10 | XX% | 最佳季节:X-X月 | 历史气候数据 |
| 球场质量 | X.X/10 | XX% | 场地费 XXX/小时 | 酒店官网/实地调查 |
数据来源标注说明:
- - flyai实时:使用Bash工具执行flyai命令获取的实时价格
- 网络参考价:通过WebSearch获取的参考价格(非实时)
- 待补充:无法获取数据,需要用户自行查询
1 交通可达性 (X.X/10)
航班信息
地面交通
2 住宿条件 (X.X/10)
酒店概况
3 天气适宜度 (X.X/10)
最佳季节:X-X月
4 球场质量 (X.X/10)
球场设施
- - 球场名称:[球场名]
- 位置:[具体位置描述]
- [🗺