代码示例
中文exp-2805未验证
cURL Python SDK 基础缓存示例 # 第一次请求 - 建立缓存 curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \ --header 'Authorization: Bearer YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "model": "glm-5.3", "messages": [ { "role": "system", "content": "你是一个专业的数据分析师,擅长解释数据趋势和提供业务洞察。" }, { "role": "user", "content": "如何分析用户留存率?" } ] }' 复用缓存示例 # 第二次请求 - 复用系统提示词缓存 curl --location 'https://open.bigmodel.cn/api/paas/v4/chat/completions' \ --header 'Authorization: Bearer YOUR_API_KEY' \ --header 'Content-Type: application/json' \ --data '{ "model": "glm-5.3", "messages": [ { "role": "system", "content": "你是一个专业的数据分析师,擅长解释数据趋势和提供业务洞察。" }, { "role": "user", "content": "什么是漏斗分析?" } ] }' 安装 SDK # 安装最新版本 pip install zai-sdk # 或指定版本 pip install zai-sdk== 0.2.3 验证安装 import zai print (zai. __version__ ) 基础对话示例 from zai import ZhipuAiClient # 初始化客户端 client = ZhipuAiClient( api_key = 'YOUR_API_KEY' ) # 第一次请求 - 建立缓存 response1 = client.chat.completions.create( model = "glm-5.3" , messages = [ { "role" : "system" , "content" : "你是一个专业的技术文档助手,擅长解释复杂的技术概念。请用简洁明了的语言回答用户问题,并提供实用的代码示例。" }, { "role" : "user" , "content" : "什么是 RESTful API?" } ] ) print ( "第一次请求结果:" ) print ( f "回复: { response1.choices[ 0 ].message.content } " ) print ( f "总 Token: { response1.usage.total_tokens } " ) print ( f "缓存 Token: { response1.usage.prompt_tokens_details.cached_tokens if hasattr (response1.usage, 'prompt_tokens_details' ) else 0 } " ) # 第二次请求 - 复用系统提示词缓存 response2 = client.chat.completions.create( model = "glm-5.3" , messages = [ { "role" : "system" , "content" : "你是一个专业的技术文档助手,擅长解释复杂的技术概念。请用简洁明了的语言回答用户问题,并提供实用的代码示例。" # 相同的系统提示词 }, { "role" : "user" , "content" : "GraphQL 和 RESTful API 有什么区别?" } ] ) print ( " \n 第二次请求结果:" ) print ( f "回复: { response2.choices[ 0 ].message.content } " ) print ( f "总 Token: { response2.usage.total_tokens } " ) print ( f "缓存 Token: { response2.usage.prompt_tokens_details.cached_tokens if hasattr (response2.usage, 'prompt_tokens_details' ) else 0 } " ) 长文档分析示例 from zai import ZhipuAiClient # 初始化客户端 client = ZhipuAiClient( api_key = 'YOUR_API_KEY' ) # 长文档内容(模拟) long_document = """ 这是一份详细的技术规范文档,包含了系统架构、API 设计、数据库结构等多个方面的内容。 文档内容非常长,包含了大量的技术细节和实现说明... [此处省略大量文档内容] """ # 第一次分析 - 建立文档缓存 response1 = client.chat.completions.create( model = "glm-5.3" , messages = [ { "role" : "system" , "content" : f "请基于以下技术文档回答用户问题: \n\n { long_document } " }, { "role" : "user" , "content" : "这个系统的主要架构是什么?" } ] ) print ( "第一次分析:" ) print ( f "总 Token: { response1.usage.total_tokens } " ) print ( f "缓存 Token: { response1.usage.prompt_tokens_details.cached_tokens if hasattr (response1.usage, 'prompt_tokens_details' ) else 0 } " ) # 第二次分析 - 复用文档缓存 response2 = client.chat.completions.create( model = "glm-5.3" , messages = [ { "role" : "system" , "content" : f "请基于以下技术文档回答用户问题: \n\n { long_document } " # 相同的文档内容 }, { "role" : "user" , "content" : "API 设计有哪些特点?" } ] ) print ( " \n 第二次分析:" ) print ( f "总 Token: { response2.usage.total_tokens } " ) print ( f "缓存 Token: { response2.usage.prompt_tokens_details.cached_tokens if hasattr (response2.usage, 'prompt_tokens_details' ) else 0 } " ) print ( f "缓存节省: { response2.usage.prompt_tokens_details.cached_tokens / response2.usage.total_tokens * 100 :.1f} %" ) 多轮对话缓存示例 from zai import ZhipuAiClient # 初始化客户端 client = ZhipuAiClient( api_key = 'YOUR_API_KEY' ) # 构建对话历史 conversation_history = [ { "role" : "system" , "content" : "你是一个 Python 编程助手,帮助用户解决编程问题。" }, { "role" : "user" , "content" : "如何创建一个简单的 Flask 应用?" }, { "role" : "assistant" , "content" : "创建 Flask 应用很简单,首先安装 Flask..." }, { "role" : "user" , "content" : "如何添加路由?" }, { "role" : "assistant" , "content" : "在 Flask 中添加路由使用 @app.route 装饰器..." }, ] # 继续对话 - 复用历史对话缓存 response = client.chat.completions.create( model = "glm-5.3" , messages = conversation_history + [ { "role" : "user" , "content" : "如何处理 POST 请求?" } ] ) print ( "对话回复:" ) print ( f "内容: { response.choices[ 0 ].message.content } " ) print ( f "总 Token: { response.usage.total_tokens } " ) print ( f "缓存 Token: { response.usage.prompt_tokens_details.cached_tokens if hasattr (response.usage, 'prompt_tokens_details' ) else 0 } " ) # 计算缓存效率 if hasattr (response.usage, 'prompt_tokens_details' ) and response.usage.prompt_tokens_details.cached_tokens: cache_ratio = response.usage.prompt_tokens_details.cached_tokens / response.usage.prompt_tokens * 100 print ( f "缓存命中率: { cache_ratio :.1f} %" ) 批量处理优化示例 from zai import ZhipuAiClient import time # 初始化客户端 client = ZhipuAiClient( api_key = 'YOUR_API_KEY' ) # 共同的系统提示词 system_prompt = """ 你是一个专业的代码审查助手。请分析提供的代码,从以下几个方面给出评价: 1. 代码质量和可读性 2. 性能优化建议 3. 安全性考虑 4. 最佳实践建议 请提供具体的改进建议。 """ # 要审查的代码片段列表 code_snippets = [ "def calculate_sum(numbers): return sum(numbers)" , "class User: def __init__(self, name): self.name = name" , "for i in range(len(items)): print(items[i])" , "if user_input == 'yes' or user_input == 'y': return True" ] results = [] total_cached_tokens = 0 for i, code in enumerate (code_snippets): start_time = time.time() response = client.chat.completions.create( model = "glm-5.3" , messages = [ { "role" : "system" , "content" : system_prompt}, { "role" : "user" , "content" : f "请审查以下代码: \n ```python \n { code } \n ```" } ] ) end_time = time.time() # 统计缓存效果 cached_tokens = 0 if hasattr (response.usage, 'prompt_tokens_details' ) and response.usage.prompt_tokens_details.cached_tokens: cached_tokens = response.usage.prompt_tokens_details.cached_tokens total_cached_tokens += cached_tokens results.append({ 'code' : code, 'review' : response.choices[ 0 ].message.content, 'total_tokens' : response.usage.total_tokens, 'cached_tokens' : cached_tokens, 'response_time' : end_time - start_time }) print ( f "代码片段 { i + 1 } 审查完成:" ) print ( f " 响应时间: { end_time - start_time :.2f} s" ) print ( f " 缓存 Token: { cached_tokens } " ) print ( f " 总 Token: { response.usage.total_tokens } " ) print () print ( f "批量处理完成,总缓存 Token: { total_cached_tokens } " )
响应包含上下文缓存的 Token 使用信息:
{ "usage" : { "prompt_tokens" : 1200 , "completion_tokens" : 300 , "total_tokens" : 1500 , "prompt_tokens_details" : { "cached_tokens" : 800 } } }
复制后粘贴到 AI 对话框发送,本次对话全程生效
出处:智谱 GLM 官方提示词教程 · docs.bigmodel.cn/cn/guide/capabilities/cache · 可信度 S · 标签:中文 / 提示词工程 / 长上下文 / 少样本 怎么用(对话型)复制后粘贴到对话框发送,本次对话全程生效。想长期用:支持自定义指令的产品(设置→个性化)可设为默认。