止观
AI前沿观察

用AI给一家五口排了趟北京,攻略就一张表

2026-09-24 · AI 项目实战 · 家庭出行规划 · 全文约 5300 字 · 阅读时间 13 分钟

出发前的那个晚上,我把五份攻略打印出来摊在餐桌上,我妈指着其中一张说:这个台阶,照片看着就腿疼。

那是我第三次给全家规划北京行程。第一次全靠搜,小红书、马蜂窝、公众号收藏文件夹各说各话;第二次我学乖了,让 AI 帮我“总结一份五天北京攻略”,它回了我一篇漂亮的小作文——漂亮,但没法用:没有一张票告诉我几点开售,没有一条路线标明老人中途哪里有地方坐。

第三次我换了打法:不让 AI 写攻略,让 AI 把旅行改成一个结构化问题。行程是一棵树,约束是一张表,抢票是一个日历。最后交付给家人的,就是一张纸、一张表——他们只负责在上面挑。

这篇把整套方法拆给你看:怎么收集约束、怎么让模型做决策、抢票日历怎么生成、备选方案为什么一次要出六套。所有票价和政策都写成了“怎么核对”而不是“是多少”,因为这类数字发布时一定变。

五步管道:把旅行变成结构化问题

※ ※ ※

📋 第一步:把“一家人”翻译成一张约束表

模型再聪明,也不知道你妈的膝盖。家庭出行规划的第一产物不是行程,是一张约束表——把每个同行的自然人拆成一行,把每件事拆成一列:

成员角色硬约束软偏好票价档位
大人A司机/记账纯电续航实际 400km想拍长城全价
大人B攻略审核不接受日均两万步博物馆 > 打卡全价
孩子1小学生需午睡缓冲要爬烽火台免票档
孩子2幼儿园身高 1.1m只看“大”的东西免票档
老人腿脚不便台阶 > 200 级需折返要看一次长城优待档

这张表看着朴素,但它是后面一切的地基。三个经验:

一,约束必须分软硬。“日均两万步以内”是硬的,“想去环球影城”是软的。混在一起写,模型会在软需求上消耗你的硬预算。

二,票价档位单独成列。国内景区的票务体系基本按“全价 / 学生优惠 / 未成年人免票 / 老年人优待 / 身高免票”五档走,而且各档的核验介质不一样:有的看身份证,有的看学生证,有的只看身高。这一列直接决定第三步的“免票门槛核对”要不要做、怎么做。

三,这张表就是提示词的正文。后面所有对 AI 的指令,都从这张表生成,不另起炉灶。

※ ※ ※

🔍 第二步:先取数,再决策——让 AI 干检索的活,别让它干背书的活

大多数人用 AI 规划旅行的姿势错了:直接问“帮我排五天北京行程”。模型只能靠训练语料里过期的记忆硬编——票价是三年前的,预约规则是疫情前的,闭馆日是猜的。

正确姿势分两刀。第一刀:取数。把每个候选景点的“当前规则”当作调研题目扔给带联网检索的 agent,要求逐条给出官方出处。我的清单长这样:

对下列每个对象,检索并输出结构化事实卡(附官方链接与页面日期):
- 故宫博物院:门票价格与淡旺季划分 / 预约提前天数与放票时间 / 周一闭馆规则
  / 未满18周岁免票政策与是否仍需预约 / 60岁以上优惠档 / 午门进、哪个门出
  / 14周岁以下需要成人陪同的比例要求
- 八达岭长城:门票价格 / 60岁以上免票与核验介质 / 1.2米以下儿童政策
  / 缆车、索道、滑道三种代步工具各自的到楼位置 / 地面缆车的检修日
  / 高铁车站到登城口的步行距离
- 中国国家博物馆:是否免费 / 预约提前天数 / 每日放票时刻 / 讲解服务档位
- 天坛公园:大门票与联票区别 / 回音壁在哪个院 / 无障碍通道情况
- 12306:当前预售期天数 / 起售时间点分布规则
输出 JSON,字段:name, ticket, booking_rule, free_tier, senior_tier,
facility_notes, source_url, verified_date。查不到的字段填 null,禁止猜测。

最后一句“查不到的字段填 null,禁止猜测”是整个提示词里最值钱的一句。不加,模型会用看起来合理的数字填空;加了,至少你知道哪里是空的、需要人肉补。

第二刀:核对。AI 交上来的事实卡,逐条点开 source_url 看原文。这一步不能省——取数快是 AI 的功劳,核对严是人的责任。两个我实际撞到的坑:

  • ▪ 故宫这类热门馆,官方页面上新旧公告并存,“提前 7 日”和“提前 1 日”两种说法在不同页面出现(前者是门票预售,后者是年票登记)。AI 检索时很容易抓错那条,只有你打开官方订票须知的原始页面才能分辨。
  • ▪ 景区优惠政策有陷阱后缀:“免票”常常只免大门票,不含缆车索道;“夜游项目”可能与日场政策完全不通。这种条款藏在政策页的小字里,也是第三步重点核对的对象。

一句话:AI 负责把全网规则捞成一张表,你负责给这张表签字。

※ ※ ※

🚄 第三步:抢票日历——把“哪天几点该动手”算出来

北京行程的难点从来不是“玩什么”,是“约不约得上”。故宫旺季门票放票即罄,热门场馆要卡点抢。这些全是有确定时刻表的动作,最适合让 AI 一次算完。

关键输入就两个数:目标参观日期和各渠道的提前放票规则。第一步的事实卡里已经有了,剩下的纯粹是日期算术:

# ticket_calendar.py — 生成抢票/预约行动日历
# 注意:规则字段来自第二步核对后的事实卡,示例值为占位,以官方页面为准
from datetime import datetime, timedelta

RULES = {
    "故宫博物院":   {"lead_days": 7, "open_time": "20:00", "note": "参观前7日20:00放票,售完即止"},
    "国家博物馆":   {"lead_days": 7, "open_time": "17:00", "note": "免费预约,具体放票时刻以官方公告为准"},
    "八达岭长城":   {"lead_days": 0, "open_time": None,    "note": "可当日线上购票,节假日建议提前约"},
    "高铁往返票":   {"lead_days": 15, "open_time": "按出发车站起售点", "note": "预售期与起售时刻以12306为准"},
}

itinerary = [
    ("2026-10-02", ["故宫博物院", "国家博物馆"]),
    ("2026-10-03", ["八达岭长城"]),
]

def build_calendar(itin, today=datetime(2026, 9, 24)):
    actions = []
    for day, spots in itin:
        d = datetime.strptime(day, "%Y-%m-%d")
        for s in spots:
            r = RULES[s]
            fire = d - timedelta(days=r["lead_days"])
            if r["open_time"]:
                actions.append(f"{fire:%m-%d} {r['open_time']}  抢 {day} 的「{s}」  ← {r['note']}")
            else:
                actions.append(f"{fire:%m-%d} 前       确认 {day} 的「{s}」  ← {r['note']}")
    return sorted(actions)

for a in build_calendar(itinerary):
    print(a)

跑出来的东西长这样(节选):

09-25 17:00 抢 10-02 的「国家博物馆」  ← 免费预约,具体放票时刻以官方公告为准
09-25 20:00 抢 10-02 的「故宫博物院」  ← 参观前7日20:00放票,售完即止
09-26 按出发车站起售点  抢 10-03 的「高铁往返票」  ← 预售期与起售时刻以12306为准

拿到日历后做两件事:每条动作设成手机提醒(放票时刻前 5 分钟),给每个“售完即止”的项目预设 Plan B——抢不到故宫是挪日程还是换景山?这个判断留给第四步让 AI 做,但答案要提前存在表里,抢票当晚没有思考时间。

※ ※ ※

🧩 第四步:路线不是搜出来的,是在约束下“解”出来的

现在轮到决策。给带检索能力的 agent 下这道题时,我把提示词写成约束满足而不是推荐:

基于 facts.json(已人工核对的事实卡)和 constraints.md(五人约束表),
为 D1-D5 生成可行程方案。硬性规则,违反即废:
1. 任一日内单成员累计台阶层数 ≤ 老人的 200 级折返线,超过必须给出
   代步工具方案并注明该工具到达第几楼;
2. 周一不排故宫/国博(闭馆类场馆),排了直接判废;
3. 每天 13:00-14:00 必须是无交通移动的空档(孩子午睡缓冲);
4. 每日步行量按地图 API 实测距离输出,不许估算;
5. 输出 3 套整体方案(省力优先 / 效率优先 / 天气备选),
   每套附「本日放弃项」清单;
6. 所有涉及票种的字段落尾标注核验介质(身份证/学生证/免核验)。

为什么是“三套整体方案”而不是“每天挑最优”?因为家庭行程的失败模式不是某天不够好玩,而是一个环节崩了全盘乱——下雨、老人体力透支、孩子闹觉,都是连锁反应。三套方案各有一个清晰的取舍逻辑,出问题时整段切换,不用当天临时拼凑。

顺带一个反直觉的发现:把规则写成可判废的硬约束后,模型的输出质量跳了一个台阶。之前问“帮我规划适合带老人小孩的行程”,它回的是形容词(“节奏舒缓”“寓教于乐”);现在回的是“本日放弃项清单”——因为它知道违反约束会被逐条对账。

※ ※ ※

🏔 第五步:长城为什么一次要六套备选

带腿脚不便的老人上长城,是全行程约束最紧的一题:台阶多、距离远、交通方式互相排斥、旺季人流不可控。单方案必翻车,所以我的做法是把备选树让 AI 一次列全,人只做删减。

第一维:选哪个长城。八达岭配套最全但人最多;慕田峪有索道、人相对少、坡道比八达岭北线缓;司马台+水镇能玩两天但车程最远;黄花镇、八达岭古长城(水关长城)是未过度开发的段位,缆车少要靠腿。筛法就一句话:老人腿脚 → 优先有索道/缆车直达敌楼的段落;孩子要“好汉感” → 优先有碑刻打卡点的段落;自驾纯电 → 查每个停车场有没有桩、回程 80km 高速在冬天打几折续航。

第二维:到了怎么上去。以八达岭为例,三种代步工具落点不同——有的直接到北八楼,有的到中段还得自己爬;而且有的有检修日、有的排队时长随人流波动。政策页上“老人免票不含缆车”这种小字(第二步挖出来的)也要在这里兑现成钱。

长城备选树:两维交叉出六套方案

两维交叉,让模型生成六套组合,每套带一行“这套赌的是什么”:

方案目的地上城方式赌什么崩了退到哪
A八达岭北线缆车上+步行下打卡经典,赌不堵车D 或 G3 高铁方案
B八达岭北线南索道+步行回赌南段人少同段反向步行
C慕田峪索道上滑道下赌孩子爱滑道、老人受得了滑道原索道往返
D慕田峪地面缆车往返全程最省力,赌视野够用无(兜底方案)
E司马台+水镇索道+步行赌两天节奏可行砍水镇,半天往返
F黄花城水长城步行+游船赌“长城在水里”的稀缺感直接放弃改国博

注意最后一列。每套备选必须写“崩了退到哪”,这是给抢票当晚和出发早上的自己留的活路。这六套方案没有一套是我自己想全的——我只提了目的地和体力两个维度,交通工具的落点差异、检修日、滑道对老人的不友好,都是从第二步的事实卡里长出来的。这就是先取数后决策的红利。

※ ※ ※

💰 第六步:预算口径——只算高速/过路费那一行

最后是所有攻略帖最爱吵的一件事:钱。我的口径先说死,免得被抬杠:

家庭自驾纯电,预算表只算高速和过路费,不算充电费和油费对比(家充桩用户没有比价意义,出行前充满即可;北京景区充电桩密度,出发前用地图 App 按停车场逐个确认可用状态,比算每公里差几分钱重要得多)。这条口径写进约束表,AI 生成的预算表就自动干净了。

真正要 AI 算清楚的反而不是油电,是节假日免费通行的边界。7 座及以下小客车在四个法定假期免收高速通行费,但判定标准是“驶离出口的时刻”——免费窗口第一天 0 时前下高速照收,最后一天 24 时前必须下完。这条规则值得让模型算一遍你的实际进出点:

# 收费站判定:以「驶离出口时间」为准,规则以交通运输部实施方案为准
free_windows = [("10-01 00:00", "10-08 24:00")]  # 国庆假期,年份不同窗口不同,以当年公告为准
exits = [("10-01 06:30", "进京检查站后第一个出口"),
         ("10-06 21:40", "返程下道口"),
         ("10-07 23:20", "备用返程窗口")]
for t, where in exits:
    print(f"{t} 驶离 {where} → 免费窗口内,缴费 0 元")

顺带把票价档位表也兑现了:一家五口按约束表的档位走,免票档的孩子只需预约凭证不需钱、老人优待档需要带的是什么证件,全部落到“当天口袋里要有什么”这个颗粒度。规划的最后一步不是表,是清单:谁的手机里要装哪个官方 App、哪张证件在哪个包里,AI 生成,人过一遍。

※ ※ ※

🧭 这套方法真正省下的不是时间

五步走完,交付给家人的那张纸长这样:一页行程树、一张抢票日历(带手机提醒)、六套长城备选(每套带退路)、一张“证件装包清单”。我妈没再问“这个台阶看着就腿疼”,因为每一天的纸上那行小字写着:中途有 3 个能坐的地方。

回头看,AI 在这套流程里干的都不是“帮我想要去哪玩”,是三件脏活:把散在几十个网页里的规则捞成一张可核对的表、把日期算术做成日历、把交叉组合枚举成人想不全的备选树。而“老人膝盖行不行”“孩子会不会闹”这些判断,机器从头到尾没资格碰——它只是把我写下来的约束执行得比人勤。

旅行攻略的本质是决策支持,不是信息堆砌。AI 时代前者终于有人干了,后者我们已经被淹了好多年。

你家出游的约束表里,最难写进去的那条约束是什么?评论区聊聊。觉得这套方法有用,点个“在看”,转给那个还在手抄攻略的朋友。

下一篇预告:3 万条买家评论扒出 12 个真需求——评论区才是免费的市调公司,从抓取、清洗到需求聚类的完整链路,附可复用的提示词模板。

※ ※ ※

📚 资料来源

  • ▪ 故宫博物院官网订票须知与门票政策页(预约提前天数、淡旺季票价、未成年人免票、老人半价、午门进神武门出、爽约规则),2026-09 检索核对;票价与规则以出行时官方页面为准
  • ▪ 八达岭长城景区公开票务信息(60 岁以上凭身份证优待、缆车索道滑道差异、免票不含代步工具),2026-09 检索核对
  • ▪ 交通运输部《重大节假日免收小型客车通行费实施方案》及官方解读(免费窗口以驶离出口时间为准)
  • ▪ 铁路 12306 公开信息(预售期、起售时刻规则)
  • ▪ 文中代码为本机可运行示例,票价与放票时刻字段均为占位,接入真实规则后需逐条替换核对
  • ▪ 本文涉及的家庭成员为作者自家情况,景点政策适用于一般家庭出行参考,不含任何商业推广

评论 (0)