Gemini API context caching怎样复用长文档上下文
Gemini API 复用长文档的关键,是先创建显式 context cache,后续请求只提交新问题并引用缓存名称。长文档、固定系统指令和工具配置放进缓存,变化的提问留在 generate_content 调用中;这样可以减少重复传输和重复处理,但缓存不是跨模型通用的永久知识库。
官方地址:https://ai.google.dev/gemini-api/docs/generate-content/caching
- 显式缓存使用
cachedContents资源,创建时绑定模型和长文档。 - 后续请求通过
cached_content引用缓存,把新问题单独传入。 - TTL、模型绑定、文档版本和 usage metadata 是排查成本与命中问题的四个重点。
先区分显式缓存和隐式缓存
Gemini API 有两种 context caching。隐式缓存由平台根据相似前缀自动尝试,代码不需要创建缓存对象;显式缓存则由应用主动创建、命名和设置生命周期,适合一本手册、接口文档、会议转录或规则库会被连续提问的场景。需要可控地复用一份长文档时,优先使用显式缓存。
当前文档还说明,Interactions API 只支持隐式缓存;下面的手动创建方式使用 generateContent API 和 Google GenAI SDK。缓存资源创建后绑定具体模型,不能创建一次再随意换模型使用。
先把长文档变成可复用的缓存资源
下面示例把本地文本上传到 Files API,再创建一个带系统指令的缓存。ttl 用秒表示,示例中的一小时只是演示,生产环境应按文档更新频率和请求高峰调整。

from google import genai
from google.genai import types
import os
# API key 从环境变量读取,避免把凭据写进源码或缓存配置。
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 先上传会被反复引用的长文档,返回的文件对象交给缓存资源。
document = client.files.upload(file="docs/product-manual.txt")
# 缓存资源绑定模型;TTL 到期后需要重新创建或续期。
cache = client.caches.create(
model="gemini-2.5-flash",
config=types.CreateCachedContentConfig(
contents=[document],
system_instruction="只根据缓存文档回答,并指出无法从文档确认的内容。",
ttl="3600s",
display_name="product-manual-v1",
),
)
print(cache.name) # 保存 cachedContents/{id},后续请求只引用这个名称。
这里的 contents 是固定上下文,system_instruction 也属于缓存资源的一部分。不要把会频繁变化的用户问题放进创建阶段,否则每个问题都要重新建立缓存。文档更新时也不要继续沿用旧的 display_name 作为版本依据,建议在应用数据库中保存源文件摘要、缓存名称和创建时间。
后续请求只发送新问题
拿到 cache.name 后,每个问题都通过 cached_content 关联同一份上下文。请求仍然需要指定与缓存一致的模型;回答内容不会自动写回缓存,因此“复用长文档”与“保存多轮对话状态”是两件事。

from google import genai
from google.genai import types
import os
# 生产环境应从持久化配置中读取缓存名称,而不是每次重新创建缓存。
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
cache_name = "cachedContents/replace-with-your-cache-id"
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="请列出退款流程中的人工审核条件,并按文档章节给出依据。",
config=types.GenerateContentConfig(cached_content=cache_name),
)
print(response.text)
# usage metadata 用于观察输入 token 与缓存命中情况,字段以 SDK 版本为准。
print(response.usage_metadata)
需要注意的是,缓存只保存可复用的输入上下文,不等于把所有后续问题和答案永久累积。若业务需要连续对话,应另外保存 previous_interaction_id 或自己的会话记录;不要把会话状态和显式 context cache 混成一条数据。
TTL、版本和命中情况怎么排查
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| 引用时报资源不存在 | TTL、缓存名称、项目凭据 | 读取缓存元数据,过期后按当前文档重建 |
| 请求提示模型不匹配 | 创建时的 model 与调用时的 model | 让两者保持一致,不能只改调用参数 |
| 成本没有下降 | 是否真的重复使用、文档是否足够长、usage metadata | 把固定内容前置,区分缓存输入与新问题 |
| 文档已更新但回答仍旧 | 应用保存的文档版本与 cache.name | 新建新版本缓存,灰度切换引用名称 |
缓存的过期可以用创建时的 ttl,也可以使用绝对的 expireTime。长期运行的服务应在应用侧保存“源文档版本 → cache.name”的映射,在到期前预热新缓存;不要等第一个用户请求失败后再同步上传大文件。确认不再使用的资源则调用删除接口释放管理负担。
# 续期或删除前,先从配置中心取出真实 cache_name,避免误操作其他文档版本。 cache = client.caches.get(name=cache_name) print(cache.name, cache.model, cache.expire_time) # 文档版本废弃后删除对应资源;删除动作应放在发布确认之后。 client.caches.delete(name=cache.name)
落地前的最小检查清单
- 长文档和固定规则确实会被多次查询,短文档不要为了“使用缓存”强行接入。
- 创建和调用使用同一个模型,应用持久化 cache.name、源文档版本和过期时间。
- 把新问题放在请求内容中,定期读取 usage metadata,不把一次成功调用当成命中率证明。
- 文档变更先创建新缓存,再切换流量;旧缓存到期或确认无引用后再删除。
相关问题
显式缓存能不能跨模型复用?
不能把它当成跨模型资源。缓存创建时已经绑定模型,调用时应保持同一模型;需要换模型时重新创建对应缓存。
每次提问都要重新上传长文档吗?
不需要。上传和创建缓存是准备阶段,后续请求使用 cache.name 引用固定上下文,只传新的问题和必要的临时参数。
为什么用了缓存仍然要关注 TTL?
缓存是有生命周期的资源,不是永久知识库。TTL 到期后引用可能失效,文档更新也可能让旧缓存产生过时回答,因此必须把过期和版本切换纳入应用逻辑。
以上示例围绕 Gemini API 的显式 context caching 展开,实际可用的模型、输入限制和计费规则应以官方文档与当前项目配置为准。
Gemini API structured output怎样约束返回 JSON Schema
- 上一篇
- Gemini API structured output怎样约束返回 JSON Schema
- 下一篇
- MCP 多轮往返请求怎样让工具调用继续执行
-
- 科技周边 · 人工智能 | 8分钟前 | 向量数据库 · RAG 向量检索 LlamaIndex metadata filters
- LlamaIndex metadata filters怎样按元数据筛选检索节点
- 157浏览 收藏
-
- 科技周边 · 人工智能 | 10分钟前 |
- MLflow prompt registry怎样给提示词版本做回滚管理
- 234浏览 收藏
-
- 科技周边 · 人工智能 | 10分钟前 |
- LangChain structured output怎样把工具结果映射到数据模型
- 135浏览 收藏
-
- 科技周边 · 人工智能 | 13分钟前 |
- Ollama embeddings怎样为本地文档生成向量
- 230浏览 收藏
-
- 科技周边 · 人工智能 | 16分钟前 |
- Transformers Trainer怎样保留自定义字段传入模型
- 344浏览 收藏
-
- 科技周边 · 人工智能 | 17分钟前 |
- vLLM prefix caching怎样减少重复提示词延迟
- 312浏览 收藏
-
- 科技周边 · 人工智能 | 48分钟前 |
- MCP 多轮往返请求怎样让工具调用继续执行
- 458浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | python · 人工智能 · gemini · 结构化输出 · Pydantic JSON Schema Gemini API google-genai structured output
- Gemini API structured output怎样约束返回 JSON Schema
- 136浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | python · 异步任务 · gemini · 批处理 · JSONL Batch API Gemini API 离线生成 google-genai
- Gemini API Batch 怎样处理大量离线生成请求
- 486浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | enum 工具调用 Gemini API Function Calling FunctionDeclaration
- Gemini API 怎样为工具参数提供枚举约束
- 322浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | ai · 可观测性 · 链路追踪 OpenTelemetry AI代理 工具调用
- AI 代理怎样记录工具调用链路和失败原因
- 250浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- Ollama API 怎样流式读取模型响应
- 167浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 880次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 876次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 960次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 941次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 768次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

