此文件为 Claude Code (claude.ai/code) 在本仓库中工作时提供指导。
Travel Planner Skill —— 面向定制游服务商的专业路书生成系统。将简版行程表(文本、docx、截图)转化为可直接交付客户的 HTML/PDF 路书,底层为结构化的 tripData.json。输出为中文。
权威文档(在本仓库工作时优先阅读):
AGENTS.md— 交付禁令、一键命令模板、硬性规则(如"禁止向用户确认是否跑交付流水线")skill.md— 完整流程规范:旅行策划阶段、数据源规则、配图优先级、Intake 格式、LLM 提示词模板
标准交付命令按固定顺序执行 7 个步骤:
python3 scripts/deliver_roadbook_v2.py \
"路书目录/tripData.json" \
"路书目录/路书名.html" \
--check-in YYYY-MM-DD --check-out YYYY-MM-DD或通过 npm:npm run roadbook:deliver -- "…/tripData.json" "…/路书名.html" --check-in YYYY-MM-DD --check-out YYYY-MM-DD
步骤(按顺序执行):
merge_intake_fee_service.py— 从简表合并费用/服务文本(仅当传入--intake-brief时)enrich_daily_descriptions_from_xhs.py— 每日行程正文润色(小红书 → 飞猪 POI → 维基兜底,可选 LLM 润色)enrich_hotel_intro_from_flyai.py— 住宿长简介(飞猪 FlyAI)sync_brand_logo.py— 品牌 Logo 复制到 roadbook-images/fill_xhs_images.py— 按槽搜图(小红书 → 飞猪 → Wikimedia → 占位图兜底链)validate_roadbook_image_alternates.py— 校验每槽 ≥ N 张 https URLassets/generate.py— 渲染 HTML
关键参数:--allow-local-placeholders(草稿模式)、--fail-fast(遇错即停)、--no-hotel-force / --no-daily-force(跳过强制重写)、--skip-daily-enrich、--min-images / --max-images(默认 4)。
退出码:0 = strict 交付成功;2 = 已降级(某步骤使用了本地回退——不可直接交付客户,需人工核对)。
python3 scripts/roadbook_intake.py \
--input docs/examples/guizhou-brief.txt \
--output-dir generated-roadbooks/贵州黔南环线-2026-05 \
--render --html-name 贵州黔南6天路书.html| 脚本 | 用途 |
|---|---|
scripts/roadbook_intake.py |
解析简版行程(txt/docx)→ tripData.json |
scripts/deliver_roadbook_v2.py |
完整交付流水线编排 |
scripts/enrich_daily_descriptions_from_xhs.py |
每日行程正文润色(小红书 + LLM 润色) |
scripts/enrich_hotel_intro_from_flyai.py |
住宿简介(飞猪 FlyAI) |
scripts/fill_xhs_images.py |
按槽搜图(TikHub API) |
scripts/tikhub_xhs_cache.py |
共享 TikHub search_notes / get_note_info 结果,避免 enrich 与 fill 重复扣费(sources/xhs-note-cache.json,默认 TTL 7 天,环境 ROADBOOK_XHS_CACHE_TTL_SEC) |
scripts/tikhub_xhs_search.py |
TikHub 关键词搜笔记(标题/正文/图片 URL,CLI) |
scripts/tikhub_xhs_client.py |
TikHub 小红书 REST 客户端 |
scripts/validate_roadbook_image_alternates.py |
校验每槽图片 URL 数量 |
scripts/image_fallback_chain.py |
图片兜底链:小红书 → 飞猪 → Wikimedia → 占位图 |
scripts/merge_intake_fee_service.py |
费用/服务文本合并到 text-block 组件 |
scripts/xhs_search_keyword_rules.py |
图片搜索关键词构造规则 |
scripts/xhs_image_url_rules.py |
URL 指纹、去重、校验 |
scripts/relink_local_roadbook_images.py |
修复断裂的本地图片引用 |
scripts/refill_transport_images_from_flyai.py |
交通配图(仅走飞猪,不走小红书) |
scripts/sync_brand_logo.py |
品牌 Logo 复制到 roadbook-images/ |
scripts/roadbook_image_engine/ |
感知哈希去重(visual_hash.py)、质量分、缓存存储 |
assets/generate.py |
tripData.json → HTML 渲染(模板来自 assets/templates/) |
- 景点/美食/玩法图片:小红书 → FlyAI → Grok 搜索 → Wikimedia(前序命中即停,禁止跳级)
- 酒店相关信息(列表、价格、评分、设施、图片):仅允许 FlyAI / 携程。小红书可用于体验补充,但不可作为酒店主数据源。
- 交通配图:仅走 FlyAI keyword-search(不走小红书)
- 若 FlyAI 与携程均无结果,须标注"酒店数据缺失",不得用其他来源凑数。
.env文件位于仓库根目录(由deliver_roadbook_v2.py和enrich_daily_descriptions_from_xhs.py通过scripts/repo_dotenv.py自动加载):OPENAI_API_KEY/OPENAI_BASE_URL/OPENAI_MODEL— 每日正文 LLM 润色(优先)DEEPSEEK_API_KEY/DEEPSEEK_BASE_URL/DEEPSEEK_MODEL— 备选 LLM(未设 OpenAI 时生效)- 详见
docs/deepseek-llm-setup.md
- 运行时控制:
ROADBOOK_FILL_XHS_COOLDOWN_MS、ROADBOOK_V2_IMAGE_ALTERNATES、ROADBOOK_IMAGE_CACHE_ROOT(默认cache/)、ROADBOOK_XHS_AUTO_LOGIN、ROADBOOK_FILL_VISUAL_DEDUPE、ROADBOOK_XHS_CACHE_TTL_SEC(默认 7 天;置 0 表示不过期) - 图片去重依赖:
pip install -r requirements-roadbook-images.txt
flyai(npm) — 飞猪实时数据(机票、酒店、门票)- TikHub API — 小红书搜索/配图/正文(
.env中TIKHUB_API_KEY);CLI:scripts/tikhub_xhs_search.py mcp__grok-search__web_search— 通用网络搜索兜底
assets/templates/roadbook-v2/template-roadbook-v2.html— 主力生产模板assets/templates/default/、assets/templates/roadbook/、assets/templates/shared/— 旧版/兜底模板assets/brand/wd-trip-logo.png— 默认品牌 Logo
每本路书生成在 generated-roadbooks/<名称>/ 下:
tripData.json— 标准化结构化数据(可编辑)<名称>.html— 渲染后的路书roadbook-images/— 本地化图片(与 HTML 相对路径同级)sources/— 原始输入简表