跳到文章正文
Grok 实用教程

Grok提示词缓存怎么用?固定前缀、缓存键与cached_tokens核对

通过Responses API固定提示前缀和prompt_cache_key,读取实际cache…

同一份长说明反复用于不同问题时,每次重新改写开头,会让Grok难以复用提示词缓存。缓存不是保存答案,而是复用未改变前缀的计算。本教程以重复使用一份自有操作手册为例,配置路由键并读取命中统计,不承诺固定折扣或必定命中,也不把API权益算进聊天会员。

第一步:选择同一条API路径

需要有可调用目标模型的xAI API账号和密钥,按控制台当前计费使用。官方示例使用grok-4.7。Chat Completions用x-grok-conv-id请求头;Responses用请求体prompt_cache_key。两者都用于让请求路由到相同服务器以提高复用机会,别把一个接口的字段原样放进另一个接口。

下面采用OpenAI兼容Python SDK的Responses接口,环境变量读取密钥,不把密钥写进源文件或日志。手册只用自己有权处理的内容,保留固定版本。先用少量请求观察,再决定是否扩展;本教程没有执行付费请求,也没有声称测得任何节省比例。

第二步:把稳定内容放前面

系统规则、格式约定和手册正文放在不变前缀中,每轮变化的问题放在末尾。避免每次都在开头加入当前秒级时间、随机编号或重新排序的列表。即使语义相同,改写措辞或空格也可能改变前缀;缓存优化应从实际发送的内容一致性开始。

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["XAI_API_KEY"], base_url="https://api.x.ai/v1")
with open("manual.txt", encoding="utf-8") as f:
    manual = f.read()
prefix = "只根据手册回答,缺少信息写未说明。\n" + manual
for question in ["如何登记借用?", "归还时检查什么?"]:
    response = client.responses.create(
        model="grok-4.7",
        input=prefix + "\n问题:" + question,
        extra_body={"prompt_cache_key": "manual-demo-v1"},
    )
    print(response.output_text)
    details = response.usage.input_tokens_details
    print("cached_tokens:", details.cached_tokens if details else None)

第三步:从usage核对实际命中

为每次调用记录输入Token数、cached_tokens和耗时,不记录私密手册正文。第一轮可能是在建立缓存,第二轮也不保证一定命中;过短材料或运行条件都可能影响观察。cached_tokens为零时先查请求一致性,不能只根据耗时变快就宣布缓存成功。

同一个缓存键不是业务会话存储,也不会自动补回缺失历史。示例是两个独立问题共享手册前缀,没有让第二轮引用第一轮答案。若要连续对话,需另外按官方历史管理方式传回消息或链接前一响应,不能仅靠键相同期待模型记住之前的决定。

第四步:检查多轮历史有没有被改写

官方提醒多轮聊天中不要编辑、删除或重排先前消息,只在末尾追加。推理模型还涉及前轮推理上下文:Responses可按官方方式传回完整输出项,或使用previous_response_id延续,不能只抽取一段最终文字就声称完整保留上下文。接入前先核对自己的接口类型和SDK。

排查时可以对比两轮实际请求的稳定前缀摘要,查看是否每次注入动态日期、工具定义顺序变化或自动压缩历史。修改手册后有意更新版本,并接受新前缀可能重新建立缓存。不要为了命中而沿用已经过期的业务规则。

第五步:同时检查质量和边界

从手册选两道已知答案和一道未提及问题,检查回答仍有依据且不会补造条款。固定前缀不该变成把无关私人资料放进每次请求。不同用户与资料权限要在应用层正确隔离,路由键不是权限控制工具。

验收包括正确接口、稳定前缀、实际命中统计和答案依据四项。缓存只是延迟与成本优化的一部分,最终费用还应看控制台实际用量。若出现429,继续按团队限额排查;缓存命中也不能被当作绕过请求或Token限制的方法。

官方资料

资料核对日期:2026年10月30日。

本文地址:https://www.163264.com/18515