CHAO AI LEARNING PATH

AI 知识库

从基础认知到真实项目,把零散知识整理成可以持续学习的路径。 继续学习 时间戳和动态变量为什么烧钱?
22学习模块 119已上线课程 30%当前章节
LEARNING MODULES

选择学习方向

成本、速度与模型选择时间戳和动态变量为什么烧钱?

成本、速度与模型选择

时间戳和动态变量为什么烧钱?

很多 AI 系统明明已经做了缓存,成本还是降不下来。常见原因是:时间戳、请求 ID、随机数、实时状态等动态变量,把本来一样的请求变成了每次都不一样。

一句话回答

动态变量本身不是问题,问题是它们太容易把本来稳定的输入变成每次都不一样。一旦变化太多,缓存命中率会下降,输入 Token 也会变多,成本就容易上去。

01 先看一张图:动态变量为什么会破坏复用? stable prefix, moving tail
每次都变

当前时间、请求编号、随机数会让输入很难复用。

固定前缀

系统规则、工具说明、输出规范尽量保持稳定。

动态后置

只把当前任务真需要的变量放到后面。

程序层保留

Trace ID、UUID、调试编号优先留在日志里。

固定内容尽量放在一起,动态内容尽量往后放。

02 哪些东西最常被塞进 Prompt? dynamic inputs
时间

当前日期、当前时间、精确到秒或毫秒的时间戳。

身份

用户 ID、会话 ID、账户编号、租户编号。

请求

请求编号、追踪 ID、重试次数、调试序号。

随机

随机数、随机文案、随机推荐结果。

实时状态

库存、订单、余额、价格、物流、行情。

上下文

当前任务目标、当前选择、当前步骤。

03 时间不一定要精确到那么细 use only the needed precision
不需要

写日报只要日期,不需要精确到毫秒。

刚刚好

安排会议通常需要日期 + 时间。

按需提取

实时价格只在用户问价格时再查。

少给模型

程序能判断的内容,不必都交给模型。

精度只保留完成任务真正需要的部分,不要无脑把秒、毫秒、微秒都送进去。

04 程序层和模型层要分开 keep internal fields internal
程序层

Trace ID、请求 UUID、服务器节点、日志编号。

模型层

任务目标、必要实时信息、业务规则、用户当前问题。

工具层

真正需要时再去查库存、价格、订单或日历。

程序需要知道,不代表模型必须知道。Trace ID、请求 UUID、服务器节点这些更像日志字段,不是模型需要理解的业务内容。

05 Prompt 的结构最好先稳后动 fixed first, dynamic later
不好的方式 坏结构 1 时间戳穿插在规则中间,每次请求都改变整段输入。 坏结构 2 把请求编号、用户 ID、调试字段都塞给模型。 坏结构 3 实时数据和固定规则混在一起,难以复用。
更好的方式 稳定前缀 系统规则、工具说明、输出格式集中放前面。 动态区块 当前任务变量、必要实时数据、日期放后面。 按需扩展 只有任务真的需要,才补充更多变量。

固定前缀稳定,动态内容尽量少。

06 实时数据也要拆开看 fixed rules + live data
固定规则

交易范围、风控规则、解释模板。

动态数据

BTC、ETH、当前持仓、实时价格。

延迟获取

用户真正问价格时再查工具。

避免污染

不要把每秒变化的内容提前塞满 Prompt。

07 动态变量为什么会直接增加 Token? more changing text, more input
更多输入 Token

动态内容越多,模型需要读的字越多。

更少命中缓存

输入一变,稳定前缀也更难完整复用。

处理更费力

模型要先过滤这些变化,再找真正重点。

成本更高

重复变化会把省下来的钱慢慢吃掉。

动态变量越多,不只是缓存变差,输入 Token 也会跟着涨。

08 最好的办法:能晚取就晚取 delay dynamic fetch
先判断

模型先决定这次任务到底需不需要实时变量。

再调用工具

需要库存、价格、订单或日历时,再去查最新值。

最后补充

只把这次真正需要的动态信息返回给模型。

动态信息不是不能用,而是不要提前把所有实时字段都塞满 Prompt。

09 写 Prompt 前,先问 6 个问题 use the checklist
这次真的需要吗?

不需要就别传。

能留在程序层吗?

能就别给模型。

精度够了吗?

别过度精确。

每次都会变吗?

会变就尽量缩小范围。

能按需获取吗?

能就延迟调用工具。

会破坏缓存吗?

会就重排结构。

本节练习

把一个客服 Agent 的 Prompt 重新排版

把固定客服规则、工具说明和输出规范放前面;把订单状态、当前日期和用户问题放后面;Trace ID、请求 UUID 留在日志里。

这次真的需要吗?不需要就别传。 能留在程序层吗?能就别给模型。 精度够了吗?别过度精确。 每次都会变吗?会变就尽量缩小范围。 能按需获取吗?能就延迟调用工具。 会破坏缓存吗?会就重排结构。

本节小结

动态变量不是不能用,而是要放对地方、用对粒度、只传当前任务真正需要的那一份。

  • 缓存最喜欢“重复”,动态变量最容易制造“变化”。
  • 固定规则、工具说明、输出规范尽量放在稳定前缀里。
  • 当前时间、用户 ID、请求 ID、随机数、实时状态等变量,只在任务真的需要时才给模型。
  • 不是动态变量不能用,而是不要让“每次都变”的东西污染本来可以复用的内容。