DeepSeek API上下文硬盘缓存

2025-02-21 47
DeepSeek

类型:人工智能

简介:一款基于深度学习和自然语言处理技术的产品,人气赶超ChatGPT。

DeepSeek API上下文硬盘缓存技术是默认开启的,用户无需额外修改代码即可直接使用。每次请求都会触发硬盘缓存的构建。如果后续请求与之前的请求存在相同的前缀部分,那么重复的内容会直接从缓存中提取,这部分会被计入“缓存命中”。

注意:只有两个请求之间存在重复的前缀部分,才会触发“缓存命中”。以下通过几个实例来帮助理解。

一、DeepSeek长文本问答

1、第一次请求

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
messages: [
{"role": "system", "content": "你是一位资深的财报分析师..."}
{"role": "user", "content": "<财报内容>\n\n请总结一下这份财报的关键信息。"}
]
messages: [ {"role": "system", "content": "你是一位资深的财报分析师..."} {"role": "user", "content": "<财报内容>\n\n请总结一下这份财报的关键信息。"} ]
messages: [
{"role": "system", "content": "你是一位资深的财报分析师..."}
{"role": "user", "content": "<财报内容>\n\n请总结一下这份财报的关键信息。"}
]

2、第二次请求

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
messages: [
{"role": "system", "content": "你是一位资深的财报分析师..."}
{"role": "user", "content": "<财报内容>\n\n请分析一下这份财报的盈利情况。"}
]
messages: [ {"role": "system", "content": "你是一位资深的财报分析师..."} {"role": "user", "content": "<财报内容>\n\n请分析一下这份财报的盈利情况。"} ]
messages: [
{"role": "system", "content": "你是一位资深的财报分析师..."}
{"role": "user", "content": "<财报内容>\n\n请分析一下这份财报的盈利情况。"}
]

在这个例子中,两次请求的前缀部分相同:system 消息和 user 消息中的 <财报内容>。因此,在第二次请求时,这部分前缀将被缓存命中。

二、DeepSeek多轮对话

1、第一次请求

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
messages: [
{"role": "system", "content": "你是一位乐于助人的助手"},
{"role": "user", "content": "中国的首都是哪里?"}
]
messages: [ {"role": "system", "content": "你是一位乐于助人的助手"}, {"role": "user", "content": "中国的首都是哪里?"} ]
messages: [
{"role": "system", "content": "你是一位乐于助人的助手"},
{"role": "user", "content": "中国的首都是哪里?"}
]

2、第二次请求

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
messages: [
{"role": "system", "content": "你是一位乐于助人的助手"},
{"role": "user", "content": "中国的首都是哪里?"},
{"role": "assistant", "content": "中国的首都是北京。"},
{"role": "user", "content": "美国的首都是哪里?"}
]
messages: [ {"role": "system", "content": "你是一位乐于助人的助手"}, {"role": "user", "content": "中国的首都是哪里?"}, {"role": "assistant", "content": "中国的首都是北京。"}, {"role": "user", "content": "美国的首都是哪里?"} ]
messages: [
{"role": "system", "content": "你是一位乐于助人的助手"},
{"role": "user", "content": "中国的首都是哪里?"},
{"role": "assistant", "content": "中国的首都是北京。"},
{"role": "user", "content": "美国的首都是哪里?"}
]

在此例中,第二次请求中前两部分(system 消息和第一次 user 消息)与第一次请求相同,因此这些内容将被缓存命中。

三、Few-shot学习

Few-shot 学习通常会提供一些示例,以帮助模型理解特定的模式,从而提升输出效果。由于这些示例通常具有相同的上下文前缀,因此借助硬盘缓存技术,Few-shot 的费用也会大幅降低。

1、第一次请求

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
messages: [
{"role": "system", "content": "你是一位历史学专家,用户将提供一系列问题,你的回答应当简明扼要,并以`Answer:`开头"},
{"role": "user", "content": "请问秦始皇统一六国是在哪一年?"},
{"role": "assistant", "content": "Answer:公元前221年"},
{"role": "user", "content": "请问汉朝的建立者是谁?"},
{"role": "assistant", "content": "Answer:刘邦"},
{"role": "user", "content": "请问唐朝最后一任皇帝是谁"},
{"role": "assistant", "content": "Answer:李柷"},
{"role": "user", "content": "请问明朝的开国皇帝是谁?"},
{"role": "assistant", "content": "Answer:朱元璋"},
{"role": "user", "content": "请问清朝的开国皇帝是谁?"}
]
messages: [ {"role": "system", "content": "你是一位历史学专家,用户将提供一系列问题,你的回答应当简明扼要,并以`Answer:`开头"}, {"role": "user", "content": "请问秦始皇统一六国是在哪一年?"}, {"role": "assistant", "content": "Answer:公元前221年"}, {"role": "user", "content": "请问汉朝的建立者是谁?"}, {"role": "assistant", "content": "Answer:刘邦"}, {"role": "user", "content": "请问唐朝最后一任皇帝是谁"}, {"role": "assistant", "content": "Answer:李柷"}, {"role": "user", "content": "请问明朝的开国皇帝是谁?"}, {"role": "assistant", "content": "Answer:朱元璋"}, {"role": "user", "content": "请问清朝的开国皇帝是谁?"} ]
messages: [ 
{"role": "system", "content": "你是一位历史学专家,用户将提供一系列问题,你的回答应当简明扼要,并以`Answer:`开头"},
{"role": "user", "content": "请问秦始皇统一六国是在哪一年?"},
{"role": "assistant", "content": "Answer:公元前221年"},
{"role": "user", "content": "请问汉朝的建立者是谁?"},
{"role": "assistant", "content": "Answer:刘邦"},
{"role": "user", "content": "请问唐朝最后一任皇帝是谁"},
{"role": "assistant", "content": "Answer:李柷"},
{"role": "user", "content": "请问明朝的开国皇帝是谁?"},
{"role": "assistant", "content": "Answer:朱元璋"},
{"role": "user", "content": "请问清朝的开国皇帝是谁?"}
]

2、第二次请求

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
messages: [
{"role": "system", "content": "你是一位历史学专家,用户将提供一系列问题,你的回答应当简明扼要,并以`Answer:`开头"},
{"role": "user", "content": "请问秦始皇统一六国是在哪一年?"},
{"role": "assistant", "content": "Answer:公元前221年"},
{"role": "user", "content": "请问汉朝的建立者是谁?"},
{"role": "assistant", "content": "Answer:刘邦"},
{"role": "user", "content": "请问唐朝最后一任皇帝是谁"},
{"role": "assistant", "content": "Answer:李柷"},
{"role": "user", "content": "请问明朝的开国皇帝是谁?"},
{"role": "assistant", "content": "Answer:朱元璋"},
{"role": "user", "content": "请问商朝是什么时候灭亡的"}
]
messages: [ {"role": "system", "content": "你是一位历史学专家,用户将提供一系列问题,你的回答应当简明扼要,并以`Answer:`开头"}, {"role": "user", "content": "请问秦始皇统一六国是在哪一年?"}, {"role": "assistant", "content": "Answer:公元前221年"}, {"role": "user", "content": "请问汉朝的建立者是谁?"}, {"role": "assistant", "content": "Answer:刘邦"}, {"role": "user", "content": "请问唐朝最后一任皇帝是谁"}, {"role": "assistant", "content": "Answer:李柷"}, {"role": "user", "content": "请问明朝的开国皇帝是谁?"}, {"role": "assistant", "content": "Answer:朱元璋"}, {"role": "user", "content": "请问商朝是什么时候灭亡的"} ]
messages: [
{"role": "system", "content": "你是一位历史学专家,用户将提供一系列问题,你的回答应当简明扼要,并以`Answer:`开头"},
{"role": "user", "content": "请问秦始皇统一六国是在哪一年?"},
{"role": "assistant", "content": "Answer:公元前221年"},
{"role": "user", "content": "请问汉朝的建立者是谁?"},
{"role": "assistant", "content": "Answer:刘邦"},
{"role": "user", "content": "请问唐朝最后一任皇帝是谁"},
{"role": "assistant", "content": "Answer:李柷"},
{"role": "user", "content": "请问明朝的开国皇帝是谁?"},
{"role": "assistant", "content": "Answer:朱元璋"},
{"role": "user", "content": "请问商朝是什么时候灭亡的"}
]

在这个例子中,第二次请求与第一次请求大部分内容重复,只有最后一个问题不同。因此,第二次请求可以复用第一次请求中的前 4 轮对话,这部分将被缓存命中。

四、查看缓存命中情况

在 DeepSeek API 的返回中,usage 字段会增加两个额外的字段,用于反映缓存命中的情况:

p1、rompt_cache_hit_tokens:本次请求中,缓存命中的 tokens 数量(0.1 元 / 百万 tokens)。

2、prompt_cache_miss_tokens:本次请求中,缓存未命中的 tokens 数量(1 元 / 百万 tokens)。

五、硬盘缓存与输出的随机性

硬盘缓存仅匹配用户输入的前缀部分,而输出仍然通过计算推理得出,因此输出结果仍然会受到 temperature 等参数的影响,保持一定的随机性。使用硬盘缓存的输出效果与不使用缓存时是一样的。

六、其他说明

1、缓存系统以 64 tokens 为一个存储单元,少于 64 tokens 的内容不会被缓存。

2、缓存系统是“尽力而为”,不能保证每次都100%命中缓存。

3、缓存构建时间一般为秒级,且会在缓存不再使用后自动清空,清空的时间通常为几个小时到几天不等。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。