当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > OpenAI API 怎样配置提示词缓存降低重复输入成本

OpenAI API 怎样配置提示词缓存降低重复输入成本

来源:17golang原创 2026-11-02 09:53:00 0浏览 收藏

OpenAI API 的提示词缓存应围绕反复使用的稳定前缀配置:固定业务规则放在前面,变化的问题放在后面,再依据模型设置缓存边界。判断是否省钱,要同时统计缓存读取和写入,不能只看命中率。

官方地址:https://developers.openai.com/

下面用 GPT-5.6 Sol 的 Responses API 举例。模型和账户访问权限需自行具备;示例没有执行付费请求,数字均为计算示意。

先记录可比较的输入成本

设想客服工单分类服务:每次都携带同一份分类规范,只有工单正文变化。先保留现有实现作为基线,记录模型、规范版本、输入 token、输出 token、缓存读写量和端到端耗时。改造后使用同一组工单,避免把输出变短带来的降费归因于输入缓存。

建议每条记录包含请求标识和以下字段,不记录客户原文或 API 密钥:

记录项用途
input_tokens本次输入总量
cached_tokens复用缓存的输入量
cache_write_tokens写入缓存的输入量
output_tokens、elapsed_ms分离输出费用和延迟变化

这些指标应按整组请求汇总,并单列错误率。官方部署说明也要求把读写量与实际费用一起观察。

把稳定前缀单独设为缓存边界

把规范保存为 UTF-8 文件 support-rules.txt,固定措辞、示例及其顺序。前缀必须足够长:GPT-5.6 及以后模型的最低可缓存长度为 1024 个可见输入 token,字符数不等于 token 数;不要为了凑长度塞入无关内容。

下面将规范作为 developer 消息,并在文本块末尾标记显式断点。用户问题位于断点之后,保持前面的规范不变。显式模式下若没有断点,就不会读写提示词缓存。具体规则见提示词缓存文档。

import os
import time
from pathlib import Path
import requests

# 从环境读取密钥;规范文件应包含实际需要的稳定业务内容。
rules = Path("support-rules.txt").read_text(encoding="utf-8")
payload = {
    "model": "gpt-5.6-sol",
    "prompt_cache_options": {"mode": "explicit", "ttl": "30m"},
    "prompt_cache_key": "support-demo:customer-a:rules-v1",
    "input": [
        {
            "role": "developer",
            "content": [{
                "type": "input_text",
                "text": rules,
                "prompt_cache_breakpoint": {"mode": "explicit"}
            }]
        },
        {"role": "user", "content": "工单:收到的商品数量比订单少一件。"}
    ]
}
started = time.perf_counter()
try:
    # 真实调用会计费;后续请求只替换用户问题,保留稳定前缀。
    result = requests.post(
        "https://api.openai.com/v1/responses",
        headers={"Authorization": "Bearer " + os.environ["OPENAI_API_KEY"]},
        json=payload, timeout=90
    )
    result.raise_for_status()
    usage = result.json()["usage"]
except (requests.RequestException, KeyError, ValueError) as exc:
    # 不打印请求头、密钥或客户原文;由调用方接入自己的失败处理。
    raise RuntimeError("请求或用量解析失败,请检查权限、参数与服务日志") from None

details = usage["input_tokens_details"]
print({
    "input_tokens": usage["input_tokens"],
    "cached_tokens": details["cached_tokens"],
    "cache_write_tokens": details["cache_write_tokens"],
    "output_tokens": usage["output_tokens"],
    "elapsed_ms": round((time.perf_counter() - started) * 1000)
})

代码需要安装 requests,且运行环境已设置密钥。实际项目应把工单替换为业务输入;规范更改时升级版本,客户之间使用各自稳定的键。这里的键用于分开缓存记账,不能替代业务鉴权。

稳定规范、显式断点和动态工单的静态配置关系
图1:缓存边界结构图。规范与断点属于稳定内容分组,工单属于动态内容分组;连线表示配置关联,不代表执行顺序或实测结果。

用冷请求与重复请求计算节省

先取一次没有可复用缓存的请求,再在有效期内复用相同规范发送多条不同工单。完整保留首条请求及后续请求的用量,按实际记录判断是否命中;单次耗时不代表稳定性能,可再比较同负载下的中位数与高分位耗时。

以下仅是算术示例:固定前缀 1600 token,动态工单每条 400 token,共 8 条。假设首条只写入固定前缀、后续 7 条均完整命中,动态内容全部按普通输入处理。

项目不复用缓存的对照假设的缓存组
普通输入160003200
缓存写入01600
缓存读取011200

按 GPT-5.6 Sol 标准短上下文价格,每百万普通输入 4 美元、缓存读取 0.40 美元,30 分钟缓存写入按普通输入的 1.25 倍计,示例输入费用为 (3200 × 4 + 1600 × 5 + 11200 × 0.40) / 1000000 = 0.02528 美元;对照为 0.064 美元,算例降幅约 60.5%。这是假设用量推导,不是实测收益;不含输出、工具及其他适用费用。价格和上下文档位以模型页及价格页为准。

落到真实日志时,普通输入量等于输入总量减缓存读取量、再减缓存写入量,三个部分各按自己的费率计算。不要把已计入写入部分的 token 再按普通输入重复收费;不同保留时长的写入也不能混用一个价格。

输入总量与普通输入、缓存读取、缓存写入三部分的计费关系
图2:输入计费关系说明图。用量分组区分三部分 token,费率分组表示各自对应的价格;图中不展示运行数据。

处理未命中与模型差异

命中为零时,先比较前缀实际内容:请求编号、当前时间、动态检索资料若被放在规范前面,就可能破坏复用。然后确认前缀长度、断点和模型支持情况,再看缓存有效期及请求路由。相同的键不能让不同内容自动变成相同前缀。

GPT-5.5 及更早模型使用旧式 prompt_cache_retention,不能照搬本例的显式断点配置;迁移时应按模型支持范围改参数。对于只使用一次的长规范,写入成本未必能被后续读取摊薄,应比较实际请求组再决定是否缓存。

缓存会直接返回上次答案吗?

不会。提示词缓存复用前缀计算,并不是把客户的答案作为响应缓存。是否需要另外缓存业务结果,取决于业务对时效和一致性的要求。

把 ttl 改得更长就一定更省吗?

不一定。更长的可选时长可能对应更高写入费率,只有之后的复用能抵消额外支出时才有收益。先保留本例的 30m,再依据真实重复间隔计算。

可以把两次命中请求的费用当作整体收益吗?

不可以。应把首次写入、未命中、失败及重试造成的实际用量一起统计,并独立报告输出费。对缓存的判断单位应是完整业务负载。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
PyTorch torch.utils.checkpoint 怎样用重计算换显存PyTorch torch.utils.checkpoint 怎样用重计算换显存
上一篇
PyTorch torch.utils.checkpoint 怎样用重计算换显存
Transformers DataCollatorForLanguageModeling 的 mlm 与 labels 构造方法
下一篇
Transformers DataCollatorForLanguageModeling 的 mlm 与 labels 构造方法
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    842次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    842次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    921次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    897次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    725次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码