国内城市旅游攻略生成
把"去 X 玩 N 天"变成一套可交付的攻略:5 类小红书风格图 + 1 份 Word 文档。
AI 只填数据/文案,几何/样板/质检由 scripts 完成,一次全流程约 8–12 分钟。
产物清单
| 产物 | 说明 |
|---|---|
| 路线总览卡片 | 3-4 列彩色卡片,每天一列,节点串联含真实照片 |
| 景点分布总地图 | 真实地图底图 + 彩色虚线圈分区 + 图钉标签 |
| Day1-N 每日路线图 | 真实放大底图 + 编号圆圈 + 箭头 + 交通标注 |
| 攻略 Word | 全部图 + 住宿/交通/预算/清单,A4 排版 |
流程总览
详细步骤读 references/workflow.md。骨架:
- 收集偏好:预算/同行人/节奏/兴趣/日期,一次问完(workflow.md Step 1)
- 研究目的地:搜索可用就搜,不可用就用领域知识 + 时效信息标"出行前复核"——绝不编造精确价格当事实。用户给了出发城市时:顺带查真实高铁/航班班次(填
transport)和真实酒店/民宿(填stays)——无公开免费携程/12306 MCP,用 web 搜索替代,价格标"以平台实时为准" - 设计行程(AI 唯一要动脑的):地理聚类分区、远郊单独一天、每天 3-4 个点,产出
plan.json - planner.py:一键生成全部 spec + 底图 + 照片清单 + docx 骨架(坐标/bbox/分区圈/路线链/标签避让全自动)
- 渲染:make_overview / make_day_map → render_html.sh 截图 → wiki_photo 照片 → img_tools 压缩
- 质检:qcheck.py 查重叠/空白/尺寸,PASS 才继续
- Word:make_docx.js 吃 docx_content.json(AI 补文案)→ validate.py 全绿
- 交付:说明文件位置,提醒时效信息复核
图片管线(本 skill 的核心)
底图:高德瓦片拼接(免 key,planner 自动做)
# 手动方式(planner.py 内部也是调它)
python3 scripts/fetch_tiles.py --bbox 104.0,30.55,104.20,30.80 --zoom 13 \
--out basemap.png --meta origin.json
# bbox/zoom 由 planner 按目标宽自动选(总图 ~1536px、每日图 ~1792px)
坐标换算
planner 内部用 scripts/geo.py 的 to_pixels();手动可跑:
python3 scripts/geo.py --meta origin.json --spots spots.json --out pixels.json
景点数据
scripts/spots_db.py 内置 10 城(重庆/成都/西安/杭州/北京/上海/广州/深圳/武汉/南京)景点坐标/门票/图标/描述/照片搜索词。plan.json 直接写景点名,planner 自动取数。查可用城市:python3 scripts/spots_db.py --cities
渲染 HTML
模型的唯一工作是填 plan.json + spec 里的文案,不手写 spec 坐标/HTML——planner.py 自动生成全部 spec,样式已固化在 scripts/xhs_style.py:
python3 scripts/make_overview.py map_spec.json overview_map.html # 总地图
python3 scripts/make_day_map.py day1_spec.json day1.html # 每日图
python3 scripts/make_overview.py cards_spec.json cards.html # 路线卡片(先下照片)
截图
# 必须用本机 Chrome headless,别用 omp browser/cmux(视口锁定)
bash scripts/render_html.sh day1.html day1.png 768 1204
# make_day_map.py 会打印正确的 window-size;HTML 路径必须绝对(脚本已自动处理)
质检(不可跳过)
python3 scripts/qcheck.py --out guide_out/
qcheck 用与浏览器一致的包围盒公式自动查标签/交通/Tips 重叠 + 像素采样查空白页 + 尺寸校验,替代人工逐图 read。标签自动避让后通常直接 PASS;FAIL 按 [tag] 定位回 plan.json 修改重跑。四类历史高频问题(标签重叠/中文乱码/空白页/底图错位)大多已被自动避让和绝对路径修复消除。
Word 组装
scripts/make_docx.js 是固定 12 节模板,吃 docx_content.json(planner 生成骨架,AI 补住宿/交通/预算/清单/文化/时间线文案)。不手写 docx-js 代码。图片尺寸自动读取缩放。
- 目录开箱即有内容:静态目录(10 节标题 + 书签,点击可跳转),非空白 TOC 域
- 交通/住宿预填:plan.json 填了
transport(真实班次)和stays(真实酒店),"五、交通明细"与"四、住宿推荐"自动生成具体表格,AI 无需再补
生成后:
NODE_PATH=$(npm root -g) node scripts/make_docx.js docx_content.json
python3 <docx-skill路径>/scripts/office/validate.py 攻略.docx
校验全绿 + 解包抽查文本后才算完成。docx-js 踩坑清单见 references/docx_tips.md。
设计原则
- 行程跟着地理走:分区圈就是"同一天逛的点",圈画得合理 = 行程合理;行程设计保留给 AI,几何全自动
- 图是主角:用户要的是能照着走的图,文字是补充。宁可少写字也要把图标清楚
- 诚实标注不确定性:价格/预约政策写"约"并提醒复核,不编造
- 照片必用 CC 协议来源:Wikimedia Commons,页脚标注来源
- 标签密集时合并而非硬推:同点位太近(planner 报 unresolved)→ 合并成一个标签名(如"解放碑 → 八一路")