Claude 使用手册
独立第三方资料站 · 非 Anthropic / Claude 官方网站查阅条件,核对证据
任务实践

微服务 AI 网关设计:Claude 路由、租户隔离与成本归因

把模型接入收敛为可审计网关,明确身份、请求策略、缓存范围、预算预留与故障切换边界。

网关统一机制,业务保留语义

当客服、报告和研发应用共用模型时,网关可以统一凭据、预算、模型适配和观测。业务系统仍应决定“能否退款”“可以读哪些文档”等权限,网关不能从用户提示词推断授权。先定义请求契约:认证主体、任务类型、内容、策略版本、请求 ID;租户身份从可信认证结果取得,不直接信任客户端 tenant_id。

四层处理链

接入层验证身份、输入大小与速率;策略层检查该租户允许的任务、模型和最大输出;适配层将规范化消息转换成供应商格式;结算层记录真实 usage、费用估计和最终状态。模型路由应由经过评测的配置决定,不能只按文本字数推断任务难度。

例如公开 FAQ 可以进入较轻量候选,复杂工单分析进入另一个已验收模型。质量不合格时只按明确规则升级;包含敏感资料的请求不能为了可用性悄悄转给新供应商。不同模型工具和内容块可能不兼容,切换需要重新验证。

缓存键必须体现隔离边界

应用答案缓存不同于供应商的提示缓存。个性化订单、账户数据及强时效结果通常不适合跨请求共享。以下示例只为已确认可缓存的请求生成键,加入租户、权限版本、模型、模板和知识版本;实际还需 TTL、删除和加密策略。散列只能减少直接暴露,不能把敏感内容变成匿名数据。

python · 示例
import hashlib, json

def cache_key(tenant, authz_version, model, prompt_version, kb_version, payload):
    material = {"tenant":tenant, "authz":authz_version,
                "model":model, "prompt":prompt_version,
                "kb":kb_version, "payload":payload}
    encoded = json.dumps(material, sort_keys=True, ensure_ascii=False,
                         separators=(",", ":")).encode()
    return "answer:" + hashlib.sha256(encoded).hexdigest()

p = {"question":"公开运费政策", "max_tokens":300}
a = cache_key("tenant-a", "v1", "MODEL_ID", "p1", "k1", p)
b = cache_key("tenant-b", "v1", "MODEL_ID", "p1", "k1", p)
assert a != b
assert a != cache_key("tenant-a", "v2", "MODEL_ID", "p1", "k1", p)
离线缓存隔离测试;不是完整缓存服务或匿名化方案。

预算要先预留,结果再结算

采用原子状态转换:received→reserved→running→succeeded/failed/unknown→settled。按最大合理费用预留余额;结果到达后以实际 usage 结算并释放差额。遇到超时但结果不明时,保留待核对记录,不能既退还全部额度又无限重发。

业务幂等键防止同一任务被重复入库,但不要据此假定上游 API 会去重计费。缓存写入、缓存读取、输出、批处理和工具费用分项归因;保存模型与计价版本,才能解释账单偏差。不要把 token 总数乘一个统一价格。

熔断、降级与可观测性

按供应商、模型或受影响资源分别记录暂时性失败;认证错误和错误请求应直接修复,不能拿来驱动全局熔断。熔断打开后选择排队、返回可追溯旧结果、转人工或暂时不可用;半开时用有限探测恢复流量。授权之外的数据目的地不列入备用清单。

观测最少包括租户归因、请求 ID、策略版本、队列等待、首片段与总耗时、状态、重试及费用。正文日志默认关闭。验收要覆盖跨租户缓存、权限撤销、并发超额、重复任务、半途断流、供应商持续故障和恢复后突发流量;只有演练通过才逐步放量。

参考来源

资料核对日期:2026-10-04。涉及产品与账户条件时,请以当前官方说明为准。