treg Idempotent-Key 多租户隔离原理:你的请求为何不会拿到别人的结果
treg Idempotent-Key 多租户隔离原理你的请求为何不会拿到别人的结果【免费下载链接】tregOpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn项目地址: https://gitcode.com/GitHub_Trending/treg/tregtreg 是一个面向 Agent 的工具版 OpenRouter——它把成百上千家第三方数据 API 统一成一个调用入口按团队租户计费。Agent 天然爱重试而 treg 的 Idempotency-Key 幂等键机制保证重试免费、结果不变、且绝不会把 A 团队的数据回放给 B 团队。本文讲清楚这套多租户隔离是怎么做到的。为什么 Agent 场景特别需要幂等键先说清楚问题Agent 的重试远比人类频繁而其中一种重试最贵——treg 调用上游供应商供应商成功且已扣费响应在回传途中丢失网络抖动、客户端超时Agent 发起重试treg 又调用了一次供应商又扣了一次费。从账本上看这是两笔各自成功的调用。更棘手的是仅仅记住这个 key 已扣费、跳过第二次收费是不够的——第二次上游调用照样发生钱照样付给供应商只是把成本从用户转嫁到了平台。所以真正的幂等必须做到第二次请求根本不出去直接回放第一次的应答。这套设计在 docs/IDEMPOTENT-CALLS-PLAN.md 中有完整推演。只存成功且已计费的响应窗口 24 小时实现规则非常克制源码见 idempotency.py只有带 key 才生效不传Idempotency-Key的请求行为与从前逐字节一致服务端绝不替你想 key只存已计费的成功响应失败本来就是免费的没必要保护存储因此有界24 小时窗口重试发生在秒级一天足够宽裕过期行直接消失。核心隔离key 按调用者作用域而不是全局唯一这是整篇文章的重点也是你的请求不会拿到别人的结果的根本保证。IdempotentCall表上的唯一约束是(membership_id, key)复合键而不是 key 单独唯一定义在 models.pyuq_idem_caller_key → UNIQUE (membership_id, key)这里的membership是 treg 的统一调用者身份一个人类成员的 token、一个 Agent token、一个 OAuth 授权最终都解析为同一个 Membership。于是只有一条规则覆盖所有情形这个 key 归发它的人所有。为什么这个设计如此重要key 是客户端自己起的。两个团队迟早都会起出retry-1这样的名字。如果只按 key 隔离先到的那个团队的响应体就会被回放给后到的团队——这是该功能里唯一会造成数据泄露而不只是多扣钱的失败模式为什么不是按团队隔离因为同一个团队里两个写得懒的 Agent 都会抢着用retry-1。按团队隔离会让第二个 Agent 收到莫名其妙的拒绝按调用者隔离它们压根碰不到彼此。作用域越小越安全Stripe 也是按 API key 划分的同理。再进一步转售场景的标签分区还有一个更隐蔽的跨租户漏洞一个转售型开发者会把所有用户都挂在自己的一个 token 下调用 treg。此时两个不同用户的请求都带着同一个调用者身份如果都用retry-1作 key第二个用户就会拿到第一个用户的缓存结果——跨租户泄露在下一层重新出现。解法在 _scoped_idempotency_key把调用者声明的主标签primary tag折叠进存储的 key 里相当于给每个终端用户切出一个独立命名空间且不需要任何数据库迁移如果调用还带强制的 pinpin 也会并入命名空间改 pin 绝不可能暴露旧缓存。多租户边界细节可参见 docs/context/architecture/multi-tenancy.md。三道防线拿错结果会被大声拒绝即便有了隔离还有两种误用会被当场拦下而不是静默返回错误数据情况行为说明同一个 key 用于不同的请求返回422请求指纹方法路径querybody 的哈希不匹配时拒绝避免把旧答案塞给新问题同一个 key 的请求还在飞返回409第一次调用尚未完成告知稍后再试阻止第二次重复扣费并发重试同时到达数据库裁决先写入pending占位行输者靠唯一约束插入失败而等待赢家绝不发起第二次上游调用占位行即锁两个重试同时到达、同时查不到缓存时谁先插入(membership_id, key)谁赢另一个只能等——读后写的竞态窗口由数据库唯一约束关闭这与账本ledger.reserve的条件更新是同一套思路。回放响应如何被识别回放不是静默的。命中的重试会带上明确的响应头详见 docs/context/interface/api.mdX-Treg-Idempotent-Replay: true—— 告诉调用者这是回放的X-Treg-Cost-Micro: 0—— 回放不再产生新费用客户端的本地计费合计保持真实X-Treg-Original-Cost-Micro: 原费用—— 原始调用花了多少一并给出。通过 MCP 协议调用时同样是可选的idempotency_key参数回放结果带replayed: true。小结treg 的幂等机制可以浓缩为四句话只存付费成功的答案24 小时过期——重试免费但绝不变成通用缓存唯一约束落在 (调用者, key) 上——key 撞车是常态跨租户回放才是事故转售场景再按标签分区一层——共享 token 下每个终端用户各有独立命名空间指纹不符报 422、在途冲突报 409、并发靠占位行唯一约束——错误大声暴露数据永不串户。对普通用户来说这意味着放心让 Agent 重试账单不会重复结果不会串门。【免费下载链接】tregOpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn项目地址: https://gitcode.com/GitHub_Trending/treg/treg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

智能家居方案怎么选?从需求梳理到落地调试的实战指南

智能家居方案怎么选?从需求梳理到落地调试的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 18:58:49 阅读更多 →
Vue3 + Element Plus 后台管理系统首页布局实战

Vue3 + Element Plus 后台管理系统首页布局实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 18:58:13 阅读更多 →
供应链管理的范式革新:三十年了,为什么经营指标没改变、根本方案没有、核心人才依然断层?

供应链管理的范式革新:三十年了,为什么经营指标没改变、根本方案没有、核心人才依然断层?

三十年,所有东西都换了,唯独五高没换过去三十年,制造业换了多少东西? 从MRP到DDMRP,从数字孪生到AI Agent,从APICS到Kinaxis,从控制塔到韧性供应链。每一代都来了,每一代都走了。每一…

2026/10/1 18:59:29 阅读更多 →

最新新闻

Python3数据类型转换避坑指南:字符串拼接、Decimal精度与pandas批量转换实战

Python3数据类型转换避坑指南:字符串拼接、Decimal精度与pandas批量转换实战

先讲一个我实际踩过的坑。某次项目里从数据库读出一批订单金额,代码里直接用total fee计算合计数,结果数据全部变成了字符串拼接,比如"199" "1" "1991",不是 200。查了半天才发现,数…

2026/10/1 19:03:58 阅读更多 →
WorkBuddy接入自定义MCP连接器:SSE长连接实战与排查指南

WorkBuddy接入自定义MCP连接器:SSE长连接实战与排查指南

1. 为什么要在 WorkBuddy 里接一个自定义 MCP 连接器WorkBuddy 这类 AI 工作台用久了,你会发现一个很现实的问题:内置能力再全,也覆盖不了你手头那些"私有工具链"。比如团队内部的设计素材库、自研的图片生成服务、某个只在公司内网…

2026/10/1 19:03:58 阅读更多 →
[光学原理与应用-651]:低频电磁波走电路介质,超高频电磁波走光学介质,所谓光电差异,只是频率跨越了多个数量级、换了一套传输介质,底层物理体系完全统一。

[光学原理与应用-651]:低频电磁波走电路介质,超高频电磁波走光学介质,所谓光电差异,只是频率跨越了多个数量级、换了一套传输介质,底层物理体系完全统一。

详解:低频电磁波走电路介质,超高频电磁波走光学介质核心观点:电信号与光信号都属于电磁波。二者之间的光电差异,本质并不是两套完全不一样的物理,主要是频率跨越十几个数量级,传输与调控介质发生切换&#…

2026/10/1 19:03:58 阅读更多 →
杭州前端工程师如何度过职业发展的瓶颈期?

杭州前端工程师如何度过职业发展的瓶颈期?

对于大多数Web前端工程师来说, 职业瓶颈这个问题几乎是每个人都会碰到的。但是每个人具体的情况不一样, 所以这个瓶颈会出现在不同的工作时期和具体的时间点上。针对这种情况, 比较推荐的处理办法就是主动离开自己那个习惯的区域, 打破原有的思考方式, 并且从提高自身的业务水平…

2026/10/1 19:03:58 阅读更多 →
Agent记忆系统实战:从存储选型到混合检索与安全防护

Agent记忆系统实战:从存储选型到混合检索与安全防护

做Agent开发的人,几乎都会在某个阶段被同一个问题卡住:系统越做越像一个“对话接口”,而不是一个有记忆、能成长的个体。用户上一轮刚说过“我现在搬到上海了”,下一轮问“我上次说的地址你记得吗”,Agent只能沉默——…

2026/10/1 19:03:58 阅读更多 →
Agent上生产:系统接入才是拦路虎,MCP与适配层实战复盘

Agent上生产:系统接入才是拦路虎,MCP与适配层实战复盘

这个项目上线那天,我们在会议室里等第一个真实工单。演示环境里模型表现得像个十年老员工,能总结、能推断、能把完整执行计划列得清清楚楚。但生产环境里,它要做的第一件事,是把 OA 里一张审批单读进来,再对着 ERP 里的…

2026/10/1 19:02:58 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →