【免费下载链接】GoModelAI gateway / AI control plane / AI proxy written in Go. Unified OpenAI-compatible and Anthropic-compatible API for OpenAI, Anthropic, Gemini, Groq, xAI, Ollama, vLLM and more. A LiteLLM alternative with observability, guardrails, streaming, cost tracking, intelligent routing, sticky sessions, failover, real-time logs and usage tracking. Prod ready.项目地址https://gitcode.com/gh_mirrors/go/GoModel点击查看免费下载GoModel 是一个用 Go 编写的 AI 网关AI Gateway为 OpenAI、Anthropic、Gemini、Groq、Ollama、vLLM 等提供商提供统一的 OpenAI 兼容与 Anthropic 兼容 API。它内置的会话保持Session Keeping机制可以自动识别客户端会话并把同一会话的所有请求固定到同一个推理目标——这正是让提供商Prompt 缓存Prompt Cache保持温热、降低延迟与成本的关键能力全程零配置即可生效。为什么 Prompt 缓存需要会话保持使用 Claude、Gemini 等模型时提供商普遍提供 Prompt 缓存如果连续两次请求的输入前缀完全相同第二次请求可以按缓存价计费通常便宜 50%~90%且首 token 延迟显著降低。问题在于如果你的 AI 网关在多个上游目标之间做轮询负载均衡同一会话的相邻请求可能被发往不同的部署实例或 API Key前缀匹配立刻失效缓存反复变冷。GoModel 的解法就是会话保持先识别出哪些请求属于同一个会话再把会话钉在同一个目标上。相关实现可以在 internal/session/detect.go 和粘性路由的 internal/virtualmodels/sticky.go 中找到完整文档见 docs/features/session-keeping.mdx。会话识别原理三级信号第一个匹配者生效GoModel 按以下优先级为每个请求解析会话 ID无需客户端做任何改造优先级信号来源说明1️⃣会话请求头内置注册表已覆盖主流工具X-Session-IdOpenCode、Kilo Code、X-Claude-Code-Session-IdClaude Code、Session-IdCodex CLI、X-Litellm-Session-IdLiteLLM 约定等2️⃣请求体字段如 Anthropic 的metadata.user_id自动提取 Claude Code 的会话 UUID、session_idOpenRouter 约定、prompt_cache_keyZed 等客户端3️⃣内容自动检测无任何显式信号时用模型 system 上下文 tools 首个用户轮之前的消息做哈希生成稳定的auto-…会话 ID第三级是最巧妙的部分Agent 类工具Aider、Cline、Continue 等每轮都会原样重放对话前缀因此即使客户端不带任何会话标识同一对话的所有请求也必然哈希出相同的会话 ID——internal/session/detect.go 中的contentSessionID正是基于对话开场前缀这一稳定锚点实现的。 所有客户端提供的会话 ID 都会按user path 作用域隔离哈希为scoped-…形式防止不同租户复用同一 ID 造成会话碰撞。粘性负载均衡把会话固定在同一个模型目标上当带会话的请求命中一个配置了多个目标的虚拟模型时第一个请求按策略round_robin或cost选定目标后续请求全部固定sticky到该目标Prompt 缓存保持温热模型行为在对话中途也保持一致若被固定的目标不可用或饱和策略会重新选择会话在新目标上重新固定——会话永远不会被粘在死目标上。几个值得了解的边界行为会话固定默认开启闲置 6 小时后过期固定表是单实例内存态类似限流计数器重启或换副本后下次请求会自动重新固定无状态依赖若某个目标只是变慢而非失败会话不会被挪走——挪走就丢掉了这个固定机制要保护的 Prompt 缓存。粘性 API Key 选择多 Key 提供商的缓存亲和当一个提供商配置了多把 API Key 时会话保持会确保同一检测到的会话始终使用同一把 Key从而保留提供商侧的 Prompt 缓存亲和性。这个选择是确定性的基于 Key 集合的顺序派生而非存储的因此跨副本、跨重启都能选出同一把 Key。如需关闭可在提供商配置中设置session_sticky_keys: false见 config/providers.go或通过仪表盘上的Session-sticky API keys复选框操作没有检测到会话的请求仍保持轮询。按会话的用量与成本一次对话花了多少钱会话 ID 会写入每条审计记录和用量记录字段session_id由此带来两个实用视图线程化审计日志审计日志页默认按会话分组每个会话折叠为一个线程最新请求 计数徽标展开可查看该会话的全部历史请求GET /admin/audit/sessions可直接查询线程列表会话级用量分析用量页提供Usage by Recent Session表格逐会话展示请求数、输入/输出 token 与成本也可用GET /admin/usage/sessions以 API 方式获取同一报表。快速配置自定义会话识别多数情况零配置会话保持的开关全部默认开启开箱即用。只有少数场景需要调整环境变量或config.yaml均可定义见 config/session.go# 会话识别总开关默认 true SESSION_KEEPING_ENABLEDtrue # 无显式信号时的内容自动检测默认 true SESSION_AUTO_DETECTtrue # 追加自定义会话请求头与内置规则合并 SESSION_HEADER_1X-My-Session虚拟模型的会话固定可逐条关闭适合只要严格轮询、不要缓存亲和的场景virtual_models: - source: smart strategy: round_robin session_affinity: false # 默认 true⚠️ 安全提示携带凭证的请求头Authorization、API Key 头等会被拒绝作为会话来源——因为会话 ID 会以明文持久化在审计和用量记录中。小结能力默认状态核心收益会话识别请求头/请求体/内容检测✅ 开启零改造识别 Claude Code、Codex、OpenCode 等客户端会话粘性负载均衡✅ 开启多目标虚拟模型下 Prompt 缓存保持温热粘性 API Key✅ 开启多 Key 提供商的缓存亲和跨副本确定一致线程化审计 会话级成本✅ 开启一次对话的 token 与花费一目了然GoModel 把会话当作网关的一等公民从路由到可观测性全链路复用同一个会话 ID。对运行 Agent 工作负载的团队来说这意味着更少的缓存失效、更稳的对话行为以及能精确到单次对话的成本账单——而这些都不需要修改任何客户端代码。赞分享【免费下载链接】GoModelAI gateway / AI control plane / AI proxy written in Go. Unified OpenAI-compatible and Anthropic-compatible API for OpenAI, Anthropic, Gemini, Groq, xAI, Ollama, vLLM and more. A LiteLLM alternative with observability, guardrails, streaming, cost tracking, intelligent routing, sticky sessions, failover, real-time logs and usage tracking. Prod ready.项目地址https://gitcode.com/gh_mirrors/go/GoModel点击查看免费下载相关推荐kgateway会话持久性粘性会话与状态保持机制终极指南kgateway会话持久性粘性会话与状态保持机制终极指南 在现代微服务架构中 会话持久性 是确保用户体验一致性的关键技术。kgateway作为云原生API网API网关云原生微服务终极电商LLM客服优化指南GPTCache会话缓存与上下文保持策略终极电商LLM客服优化指南GPTCache会话缓存与上下文保持策略 在电商行业中LLM客服系统正成为提升用户体验的关键工具。然而高并发查询带来的延迟和成本AI 应用大模型eShopOnWeb会话管理分布式缓存与状态保持eShopOnWeb会话管理分布式缓存与状态保持 会话管理架构概述 eShopOnWeb作为典型的ASP.NET Core电子商务应用其会话管理系统采用C后端电商示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考