省钱之道:token 成本日志 + FAQ 缓存

「从零到 AI 应用工程师」专栏 · 第 17 篇


RAG 比纯聊天多了检索,但大头费用往往仍在大模型 token 。

演示时同一句问十遍、前端重试、热门故障码被反复点------不缓存就重复付费。

今天两件事:把每次花销记下来 ,以及 FAQ 级缓存。


一、先看见钱:token 用量进日志与响应

每次 LLM 调用后记录:

字段 含义
prompt_tokens 输入(含参考片段!)
completion_tokens 输出
total_tokens 合计
cost_cny 按单价估算(可标 estimated)

响应里带上 token_usage,日志里带 request_id,你才能回答:

  • 哪类问题最贵?(往往是参考片段太长)
  • 缓存命中后是否降为 0 模型调用?
  • 调小 MAX_RAG_CONTEXT_CHARS 有没有省钱?

单价放配置,不写死在代码;换模型只改价表。


二、FAQ 缓存放哪一层

和 chat-api 的 Redis 缓存同构,但 Key 要包含「会影响答案的因素」:

text 复制代码
rag:faq:{hash(规范化问题 + filter_category + 关键开关)}

流程:

text 复制代码
POST /rag/query
  → 查 Redis
       ├─ 命中:直接返回,from_cache=true,跳过检索/Rerank/LLM
       └─ 未命中:走全链路 → 写入缓存(TTL)

建议:

情况 TTL / 策略
正常有依据回答 较长 TTL
拒答 短 TTL(避免错误拒答缓存太久)
llm_error 不缓存

知识库更新(新文档入库)后:按前缀批量失效,或接受 TTL 内短暂旧答案。


三、省钱的其它杠杆(缓存之外)

  1. 上下文截断:参考片段总长设上限;
  2. Rerank 后少喂:Top5→Top3,少 token;
  3. 热门问题缓存:比反复跑全链路便宜;
  4. 检索调试走 /retrieve:别每次调试都打付费生成。

四、验收

  • 一次问答响应含 token_usage 或日志可查
  • 同一问题连打两次,第二次 from_cache=true(若已启用)
  • 错误 Token/失败结果不会脏缓存

五、带走这三条

  1. 先计量,再优化------看不见 token 就谈不上省钱。
  2. FAQ 缓存 Key 要包含过滤条件与规范化问句。
  3. 拒答短 TTL、错误不缓存;入库后要能失效。

下一篇(阶段 2 收官):pytest 三条底线------入库、检索、引用,防止重构改崩。

这是专栏第 17 篇。两到三天一更,测试见。

相关推荐
量化分析码农1 小时前
【Python量化因子实战 #07】因子加权怎么选?等权 / IC 加权 / 最大化 IR 三种策略 PK
后端
Wx-bishekaifayuan2 小时前
springboot甘肃特产服务平台50301-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
Thneonl2 小时前
服务不通先别抓包:DNS 解析器的坑比内核网络栈多
后端·程序员
Thneonl2 小时前
一启动就 Exited(137):内存限制背后藏了四个参数
后端·架构
斯维赤2 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
对象存储与RustFS2 小时前
RustFS 生产部署实战:Docker / 二进制 / K8s Operator 三条路径怎么选
后端
知守观2 小时前
Spring Boot 2.1.0 停维护5年,10个依赖4个有CVE——2022年老项目的安全体检报告
spring boot·后端
SimonKing2 小时前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员
斑鸠喳喳2 小时前
读写锁模式 Read-Write Lock
java·后端