xAI API 新增 safety_identifier:多用户应用怎么避免一个用户连累整个 API Key
xAI 开发者 release notes 在 2026 年 9 月新增了一个可选请求字段 safety_identifier。你的应用把每个终端用户的不透明标识放进请求,xAI 在处理违反使用政策的请求时,就能把它归到具体的终端用户,而不是整个 API Key。如果你做的是 SaaS、机器人或团队内部工具,多个用户共用一个 Key,官方文档建议为每个用户单独设置这个字段。
时间口径:以下内容基于 xAI 官方文档截至 2026 年 10 月 17 日的页面。release notes 的条目列在 9 月标题下,页面未给出具体日期,请以官方页面为准。
safety_identifier 到底是什么?
按 xAI release notes 的说法,它是“由你的应用分配的、代表终端用户的不透明标识”,请求字段可选。目的是让违规归因落到具体用户,一个用户的滥用不再牵连整个账号。
官方 Security FAQ 补充了几点:
- 标识应当稳定,同一个用户每次请求都用同一个值,并且由你的应用分配,终端用户不能自己指定。
- 如果请求违反使用政策,xAI 可以把它归到这个标识,并在联系你时引用它。
- 建议发送内部用户 ID 或其他不透明值的哈希。不要发送邮箱、手机号、昵称。页面说明该字段的格式不做校验,并提到长度上限为 96 个字符。
- 如果你让很多终端用户共用一个 API Key,应为每个用户设置它,让滥用报告落到用户而不是 Key 上。
哪些接口支持?旧的 user 字段还能用吗?
两篇官方文档列出的支持范围:Chat Completions、Responses API(FAQ 提到包含流式和 WebSocket 模式)、延迟补全(deferred chat completions)、Batch API,以及 gRPC 的 GetCompletionsRequest。
原有的 user 字段仍然被接受,但 FAQ 写明 safety_identifier 是今后文档推荐的字段。如果两个字段同时传会怎样,文档没有说明,所以别依赖这种行为:新代码只传 safety_identifier,旧代码迁移时替换掉 user。
不传会怎样?
文档没有写不传的后果,也没有说 xAI 会因为没传而拒绝请求。能确定的只是它的设计意图:没有标识时,违规请求只能归到 Key 这一层。所以对多用户应用,补上它的成本很低,收益是出问题时影响范围可以收窄。是否真的能避免 Key 被限制,取决于 xAI 的处理,官方没有做这个承诺。
标识该怎么生成?
原则是稳定、不可逆、不含个人信息。一个常见做法是对内部用户 ID 做带密钥的哈希(HMAC),这样别人无法从标识反推出你的用户 ID。下面是示例,不是官方代码:
import hmac, hashlib, os
SECRET = os.environ["SAFETY_ID_SECRET"].encode()
def safety_id(internal_user_id: str) -> str:
return hmac.new(SECRET, internal_user_id.encode(), hashlib.sha256).hexdigest()
注意:
- 密钥不要随意轮换,换了以后同一用户的标识会变,归因就断了。
- 用内部 ID,不要用邮箱。用户改邮箱不应该改变标识。
- 机器人场景里,一个群或一个频道不等于一个用户,尽量落到真实的终端用户。
请求里怎么写?
字段放在请求体里。下面以 Responses 接口为例,模型名用占位符,按你在官方模型页看到的名称填写:
curl https://api.x.ai/v1/responses \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<model>",
"input": "你好",
"safety_identifier": "a1b2c3d4e5f6..."
}'
如果你用 OpenAI 兼容的 SDK,SDK 的类型定义里可能还没有这个字段,可以通过它的“额外请求体参数”传入(OpenAI Python SDK 里是 extra_body),具体以所用 SDK 版本为准:
client.chat.completions.create(
model="<model>",
messages=[{"role": "user", "content": "你好"}],
extra_body={"safety_identifier": safety_id(user.id)},
)
Batch 和 gRPC 的字段位置请以官方 API 文档为准,这里不展开。
上线前的检查表
- 所有调用 xAI 的代码路径都传了字段:聊天、批处理、后台任务、定时任务都算。
- 值是哈希或随机 ID,没有邮箱、手机号、昵称。
- 同一用户每次请求值一致,不同用户值不同。
- 日志里记录“请求 ID、标识、时间”,但不要把用户的原始内容长期明文存放。出了问题时,你能用标识定位到是哪个用户。
- 前置内容审核:标识只负责归因,不会替你拦截违规内容。入口处的审核、频率限制和异常用户封禁,仍然是你自己的责任。
- 在服务条款里写明:违规使用可能导致你限制该用户的访问。
怎么跟踪 xAI 文档后续的改动?
这类字段的语义以后可能补充细节。可以看 cdnping 的 官网动态,它监控各家官方更新日志与价格页的增删;调用本身的健康状况看 xAI API 状态。更多思路见 大模型 API 价格变了怎么第一时间知道。
如果你正在比较直连官方、云厂商托管或经由网关接入,可以读 AI API 接入方式怎么选。通过中间层转发请求时,上游看到的是中间层的 Key,终端用户归因更要自己做好,评估方法见 api中转站怎么选。出现报错时,怎么看 OpenAI 状态页和 Claude 状态页 里的方法同样适用于判断是不是上游事件。