止观
AI前沿观察

[F2]手抄3遍攻略到1条提示词:国庆出游流水线

2026-09-30 · AI 项目实战 · 国庆特辑 · 全文约 5100 字 · 阅读约 13 分钟 · 作者:魏少冬

上篇《用 AI 给一家五口排了趟北京》发出去之后,评论区问得最多的一句话是:这套打法换个目的地还成立吗?

成立,但前提是你得把它从“一次性的聪明”变成“可复用的笨办法”。这周我干的事,就是把整套流程压成一条提示词——目的地、日期、随行的人,三个变量一改,管道重新跑。压的过程里翻出来的旧账,是我这三年的国庆准备史:第一次全靠手抄攻略,抄了 3 遍(小红书抄一遍、马蜂窝抄一遍、朋友发的 PDF 再抄一遍);第二次让 AI“总结一份五天攻略”,它回了我一篇漂亮小作文;第三次才是上篇讲的约束表打法。

从抄 3 遍到 1 条提示词,中间隔的不是运气,是把“哪些话必须让机器说、哪些话必须自己先说清楚”这件事想明白了。这篇就把那条提示词整个拆开给你:四个块各自堵什么漏、事实卡为什么要单独成一段、自检闸门怎么把“售完即止”变成手机提醒。所有政策数字我都跑了当期信源,2026 年国庆的硬事实先摆在这,你也可以直接抄:

事实数值信源口径
假期长度10 月 1 日(周四)至 7 日(周三),共 7 天国务院办公厅 2026 年节假日安排通知
高速免费窗口10-01 00:00 至 10-07 24:00,7 座及以下小客车,以驶离出口时间为准交通运输部重大节假日免费通行实施方案
火车票预售期提前 15 天(含当天),10-01 的票 9-17 已开售铁路 12306 公告
车流高峰9-30 午后起量,10-01 上午 9—12 时压力最大多地交通部门假期出行研判
手抄 3 遍到 1 条提示词:三次国庆的对比

※ ※ ※

🧱 提示词的第一块不是指令,是交付物定义

大多数人写规划类提示词,开头是“你是一位资深旅行规划师”。这种角色设定我给过,它唯一的作用是让用户自己感觉专业,模型并不因为被夸了就更懂你妈的膝盖。

我这条提示词的第一块,写的不是角色,是交付物:

【你要交付什么】
不是攻略文章,是四个文件:
1. itinerary.md —— D1..D5 每日行程,每个时段一行,含起止时刻、地点、
   交通方式、当日累计台阶层数、当日累计步行公里数;
2. facts.json —— 行程里每个对象的结构化事实卡(字段见第二段 schema),
   每张卡必须带来源 URL 与页面日期;
3. calendar.txt —— 抢票/预约时刻表,按"哪天几点抢哪天的票"排序,
   已过放票日的条目打 [紧急] 前缀;
4. fallbacks.md —— 每个"售完即止"项目对应的降级方案,一行一对。
拒绝输出以上四项之外的任何散文。

最后一句是这周的教训换来的。上周试跑旧提示词,模型写得兴起,在行程表后面加了一节“给您的贴心小贴士”,里面开始编“提前 3 天预约”“老人凭身份证享五折”。要是没人对着官方页面核,这些句子就成了路上排队时的争执。把“不要什么”写死,比把“要什么”写好更省钱——返工一次的成本远高于提示词里多两行。

交付物定义完,第二块才是约束。约束的写法上篇讲过(硬约束/软偏好分列,票价档位单独成列),这里不重复,只补一个进提示词后的形态:

【硬约束(违反即废,逐条对账)】
H1 任一成员单日累计台阶 ≤ 200 层,超过必须给出代步工具方案并注明落点
H2 周一不排闭馆类场馆
H3 每天 13:00-14:00 为无交通移动空档
H4 涉及票种的行必须标注核验介质(身份证/学生证/免核验)
H5 所有日期规则取当年公告口径,语料记忆一律视为过期

H5 是第三块里最容易被忽略的一条:大模型对“十一放假几天”“高速免费到初几”这类年度变动的政策,训练语料里全是往年版本。你不明确说“你的记忆不可信”,它就会用 2024 年的口径自信地答 2026 年的题。

※ ※ ※

📥 先取数再决策:事实卡的 schema 是管道的心脏

上篇立了“先取数、再决策”的原则,这篇给出取数那一刀的具体长相。事实卡不让模型自由发挥,给死 schema:

{
  "object": "故宫博物院",
  "facts": {
    "ticket": {"peak": "待检索", "low": "待检索", "free_tiers": "待检索"},
    "booking": {"lead_days": null, "release_clock": null, "quota": "售完即止?"},
    "closure": {"weekly": null, "special": null},
    "access": {"gate_in": null, "gate_out": null, "step_count": null}
  },
  "sources": [{"url": "https://example.com/... ", "page_date": "2026-09-28"}],
  "confidence": "VERIFIED / SINGLE_SOURCE / NOT_FOUND",
  "verified_by_human": false
}

三个设计细节,每个都付过学费:

一,空值比假值值钱。字段查不到就写 null 加 NOT_FOUND,绝不允许模型“根据常识补一个”。我第一版没写这条,国博放票时刻它填了个“每日 8:00”,看着特别合理,核到官方页面才发现差了好几个钟头。一个自信的错数字,杀伤力大过十个诚实的空格。

二,verified_by_human 是流程的接缝。事实卡生成后我先跑一遍机器对账(下一节),过了再导出 PDF 人工抽查高置信度外的每一张。机器能查“有没有来源”,只有人愿意为“来源是不是官方”负责。

三,来源 URL 用文档保留地址当示例(203.0.113.0/24 这类),但产出里必须是真实页面。提示词里我特意写了一句“示例地址不得进入输出”,防的就是模型把 schema 里的例子当真值抄进交付文件——这种错误回显我在三次试跑里见过两次。

※ ※ ※

🗓 把日历做成代码:24 行“紧急”比一篇小作文诚实

抢票日历这一步,我后来干脆不让模型做算术了——日期回推是字符串操作最容易翻车的地方,差一天就是白排一小时队伍。规则明确的事交给 40 行 Python,模型只负责把规则从事实卡里捞出来填进配置:

RULES = {
    "故宫博物院":  {"lead_days": 7,  "clock": "20:00", "note": "售完即止"},
    "国家博物馆":  {"lead_days": 7,  "clock": "17:30", "note": "免费需预约"},
    "八达岭长城":  {"lead_days": 7,  "clock": "06:30", "note": "旺季日限流"},
    "高铁往返":    {"lead_days": 15, "clock": "起售点", "note": "按车站起售时刻"},
}
# 游玩日 - lead_days = 抢票日;抢票日 < 今天 → [紧急]

RULES 里的放票时刻,只有故宫那条是我从官方订票页核对过的(参观日前 7 天 20:00 开售、不售当日票、周一闭馆遇法定节假日顺延——这几条 2026 年国庆适用),其余字段是占位示意,跑之前逐条替换核对。

9 月 30 日早上实跑,输出前面 25 行全是 [紧急]——15 天预售期意味着 10 月 1 日到 7 日的火车票早在 9 月下旬就开售了,日历把“你已经晚了”直接糊在脸上。这才是假期前一天的真相:

[紧急] 故宫博物院 10-01 场:已过放票日:立即查余票/走Plan B
[紧急] 国家博物馆 10-01 场:已过放票日:立即查余票/走Plan B
[紧急] 八达岭长城 10-01 场:已过放票日:立即查余票/走Plan B
[紧急] 高铁往返 10-01 场:已过放票日:立即查余票/走Plan B
...(10-02 至 10-06 场同上,外加 10-07 的高铁,共 25 条)
09-30 06:30 抢 10-07 的「八达岭长城」 ← 提前5分钟提醒 06:25|06:30
09-30 17:30 抢 10-07 的「国家博物馆」 ← 提前5分钟提醒 17:25|17:30
09-30 20:00 抢 10-07 的「故宫博物院」 ← 提前5分钟提醒 19:55|20:00

模型在这个环节的真正价值,是它从事实卡里读出了“八达岭放票 6:30、国博 17:30、故宫 20:00”这些时刻并填进 RULES——让一个 agent 做“搬运+判断来源可信度”,让人以外的部分做“算术”,各回各位。日历生成完,每条动作转成手机提醒(提前 5 分钟),fallbacks.md 里“售完即止”对应哪条退路,抢票当晚不用思考,照着降级方案执行就行。

※ ※ ※

🔁 第四块:回核提示词——让模型自己当质检员

提示词的最后一块不是写给规划用的,是写给“骂自己”用的。整条管道跑完,我会把四个交付物原样喂回去,下一道独立的命令:

【对账任务】你不是刚才那个规划师。你是较真的审核员。
逐条检查 itinerary.md 里出现的每一个数字、时刻、政策:
1. 该数字能否在 facts.json 里找到对应字段与来源 URL?找不到 → 标记无源;
2. 有来源但 page_date 早于 2026-01-01 → 标记过期风险;
3. 违反 H1-H5 任意一条 → 标记违规并注明第几条;
4. 台阶数、步行距离出现"约""左右"字样 → 标记估算;
输出一张问题清单(行号+问题+严重度),没有问题就输出"无问题",
不许输出安慰性总结。

这道“换人格”的效果比想象中稳:同一条行程,第一遍生成时模型爱用“约 150 层台阶”这种圆话,回核时它会把每一处“约”揪出来标成待处理。本质是生成和审核的目标函数不同——生成时要“看起来完整”,审核时被要求“找出茬”,你把第二个任务显式下达了,它才肯卸下第一个任务的包袱。

回核闸门:生成与审核是两个独立提示

问题清单回来我手工销号,销完这份文件才算定稿。三年下来我确信的只有一件事:攻略翻车从来翻在没人核过的那一行——免费窗口按“驶离出口”判定这种小字,写进硬约束之前,它只存在于官方页某个折叠板块里,等出发当天在收费站炸开。

※ ※ ※

🔧 复用:改三个变量,别碰管道

这条提示词现在住在我的模板文件里,头部只有三个占位符:

DEST    = 目的地城市
DATES   = 出行日期区间
CREW    = 随行约束表(人数/硬约束/票价档位)

今年国庆我改的就是这三个:CREW 里老人的折返线从“200 级台阶”调成了“单程车程 ≤ 40 分钟”(自驾纯电,冬天续航打几折是查了实测贴才知道的),DATES 从 5 天改成 7 天假期里避开 10-01 上午和 10-06 下午两个车流峰值两头。管道本身一行没动——这正是“流水线”和“一次性聪明”的区别:上篇交付的是一张行程表,这篇交付的是一张能过冬的表。

唯一要提醒的复用陷阱:模板里那些“7 天”“15 天”看着像常量,其实全是年度变动值。H5 那条硬约束我放在提示词最后,位置不是随便排的——模型的注意力会偏向开头和结尾,年度政策这种“必须推翻语料记忆”的规则,值得占住结尾那个位置。

※ ※ ※

结语:一条提示词救不了抢不到的票

流水线跑完该干嘛还得干嘛:9-17 开售的票没人替你蹲,限流额度售罄也没提示词能变出来。它省的是另一种东西——手抄 3 遍攻略那 6 个小时、出发前夜“到底约没约上国博”的反复自我怀疑、以及在景区门口才发现“老人免票不含缆车”的当场翻包。这些损耗以前全算在“出门玩就是这么麻烦”的默认账上,现在可以拆出来单独报销了。

你家国庆出游最难写进约束表的是哪一条?评论区聊聊,点赞“在看”的人多的话,节后把冬储模板开源出来。

下一篇预告:让 AI 写的小说,为什么一眼就被看穿?这次不聊管道,聊叙述人格。

※ ※ ※

📚 资料来源

  • ▪ 国务院办公厅《关于 2026 年部分节假日安排的通知》(2025-11 发布:国庆节 10 月 1 日至 7 日放假调休共 7 天)
  • ▪ 交通运输部《重大节假日免收小型客车通行费实施方案》及 2026 年国庆免费通行时段公告(10-01 00:00 至 10-07 24:00,以驶离出口时间为准)
  • ▪ 铁路 12306 预售期规则与“中国铁路”公众号 2026 国庆购票日历(提前 15 天含当天,10-01 车票 9-17 开售)
  • ▪ 文中 Python 代码块为本机可运行示例(Python 3.11,ticket_calendar.py),输出为 2026-09-30 实跑节选;放票时刻字段为示例占位,接入真实规则需逐条替换核对
  • ▪ 各景区预约与票价规则以出行当日官方页面为准;本文示例 URL 均使用 RFC 5737 文档保留地址,非真实可访问页面;家庭成员为作者自家情况,不含任何商业推广
  • ▪ 生成日期:2026-09-30

评论 (0)