AI 与 LLMLLM 应用

带缓存的 LLM 网关

将您的 OpenAI 或 Anthropic SDK 指向一个 URL,重复的请求就由 HotKV 作答,不必再次付费。无需修改代码。

需要修改的代码行数
1
静态二进制文件
~6 MB
开源
Apache-2.0
步骤 1 / 5
启动网关

在服务商前面放一个二进制文件或容器。调用方自己的 API 密钥会被转发,因此网关本身不需要密钥。

示例会话playing
# 启动网关
$ hotkv-gateway --upstream https://api.openai.com --semantic --embedding-model text-embedding-3-small
(gateway listening on 127.0.0.1:8080, cache in HotKV)

使用真实 HotKV 命令和示例回复的动画演示。点击任意步骤即可跳转。 命令和回复保持英文,与您在 HotKV 中输入和看到的完全一致。

问题所在

大部分 LLM 流量都在重复。同样的系统提示词和问题来自不同的用户、重试和测试运行,一遍又一遍,每一次都要计费。在每个服务、您用到的每种语言里各自加一层缓存,既费时又容易出错。

HotKV 如何解决

hotkv-gateway 位于您的应用和 LLM API 之间。改一下 SDK 的 base URL,相同的请求就由 HotKV 返回,流式响应会以流的形式重放,换了说法的问题可以按语义作答,同时在途的相同请求共享一次上游调用。如果 HotKV 变慢或宕机,请求会直接发往服务商。

逐步演示

逐条命令,看看发生了什么

  1. 01

    启动网关

    在服务商前面放一个二进制文件或容器。调用方自己的 API 密钥会被转发,因此网关本身不需要密钥。

    hotkv-gateway --upstream https://api.openai.com --semantic --embedding-model text-embedding-3-small
  2. 02

    首次请求,未命中

    还没有任何缓存。请求发往上游一次,完成的 200 响应被存储下来。

    curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @question.json | grep -i x-hotkv-cache
  3. 03

    相同请求,命中

    完全相同的请求,即使键的顺序不同,也由 HotKV 作答,根本不会到达服务商。

    curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @question.json | grep -i x-hotkv-cache
  4. 04

    换个说法的问题

    开启语义缓存后,措辞不同的单轮问题可以用相似问题的答案来回答。

    curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @rephrased.json | grep -i x-hotkv-cache
  5. 05

    一波相同的请求

    第一个请求还在途中时,又来了三个相同的请求。它们共享一次上游调用。

    for i in 1 2 3; do curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -d @new.json & done
适用场景

真实场景

评测与 CI 运行

测试套件和提示词评测每次运行都发送相同的请求。放在网关后面,只有改动过的提示词才会产生费用。

多语言平台

Python 后端、Node.js worker 和 Go 服务只需改一个 base URL 就能共用同一个缓存,无需为每种语言引入库。

自托管模型

放在 vLLM 或 Ollama 前面时,网关节省的是 GPU 时间而不是 API 费用,因为重复的提示词根本不会到达模型服务器。

内置功能

您将获得

精确缓存与语义缓存

相同的 chat、completion 和 embeddings 请求都会被缓存,单轮聊天问题还可以按语义匹配(--semantic)。

流式重放

流式响应会被捕获并以流的形式重放,客户端的行为与之前完全一致。

默认安全

每个 API 密钥都有自己的缓存。错误和被过滤的答案从不存储,请求还可以通过一个请求头跳过缓存。

从不碍事

如果 HotKV 变慢或不可用,请求会直接发往服务商。网关还会在 /_hotkv/metrics 上报告各项数据。

您代码中唯一的改动

python
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8080/v1")   # the only change

# For Anthropic: start the gateway with --upstream https://api.anthropic.com
import anthropic
client = anthropic.Anthropic(base_url="http://localhost:8080")

常见问题

网关需要 HotKV 许可证吗?

不需要。它可以在任何 HotKV 服务器上运行。如果许可证包含提示词缓存,条目会存放在 PCACHE 命名空间中,HotKV 还会统计节省的 token。语义缓存始终需要许可证。

两位客户会看到彼此的答案吗?

不会。缓存键包含调用方的凭据,因此每个 API 密钥都有自己的缓存,除非您在网关中只保留一个上游密钥,或用 --scope global 启动它。

它支持哪些服务商?

OpenAI、Azure OpenAI、OpenRouter、vLLM、Ollama、LiteLLM 以及其他任何兼容 OpenAI API 的服务,另外 Anthropic 的 Messages API 支持精确缓存。

相关用例

在您自己的工作负载上试试

HotKV 兼容 Redis 协议,您可以把现有客户端指向它,运行这些相同的命令。