OpenAI Responses API 写作请求怎么设置 safety_identifier
如果 AI 写作平台需要区分不同用户或任务,建议在 Responses API 请求中单独设置 safety_identifier。它应是稳定的字符串标识,不要直接提交用户名或邮箱等可识别信息。
先理解 safety_identifier 的作用
safety_identifier 是 Responses API 创建请求中的可选字符串字段,用于帮助识别可能违反使用政策的应用用户。资料包显示,该标识应稳定、唯一对应用户,长度最多为 64 个字符,并建议对用户名或邮箱进行哈希处理,避免直接发送身份信息。
它不是文章标题、任务名称或审核结论,也不应把每次请求都随机生成。平台应先确定标识的归属范围,再把同一用户的写作请求保持一致。
准备
- 确定标识主体:通常是平台用户,而不是单次文章任务。
- 准备稳定的内部用户键,例如数据库中的用户 UUID。
- 决定脱敏方式,避免把用户名、邮箱或手机号原文提交给接口。
- 在自己的任务表中保存用户键、任务 ID、请求参数和返回的 response_id。
如果还需要把文章、批次和任务类型附加到响应对象,可以参考站内文章 OpenAI Responses API 写作任务怎么用 metadata 追踪,将 safety_identifier 与 metadata 分工处理。
分步操作
- 确定稳定输入。使用内部用户 UUID 或经过规范化处理的内部用户键,不要把显示昵称当作唯一依据,因为昵称可能修改或重复。
- 生成脱敏标识。在服务端使用带版本前缀的哈希值,例如
usr_v1_加上 SHA-256 结果的前若干位。截取长度时要保证最终字符串不超过 64 个字符。 - 在 Responses 请求中传参。Python SDK 中,
safety_identifier与model、input等参数处于同一层级。 - 同步内部审计记录。数据库保存原始内部用户键与脱敏标识的映射关系,但日志中不要重复输出用户原始身份信息。
- 处理响应关联。收到响应后保存 response_id、任务状态和最终正文,使后续审核能够从任务记录回溯到对应请求。
可复制模板
import hashlib
from openai import OpenAI
client = OpenAI()
internal_user_key = "user-uuid-from-your-database"
safety_identifier = "usr_v1_" + hashlib.sha256(
internal_user_key.encode("utf-8")
).hexdigest()[:24]
response = client.responses.create(
model="your-model-id",
instructions="请根据输入资料生成一篇待审核文章。资料不足时明确说明。",
input="主题:产品更新说明;受众:普通用户;输出:结构清晰的中文初稿。",
safety_identifier=safety_identifier,
metadata={
"task_type": "article_draft",
"audit_version": "v1"
}
)
print(response.id)模板中的模型 ID 需要替换为项目实际可用的模型。metadata 示例只是内部任务追踪字段;真正提交哪些键值,应根据自己的审计设计执行。
怎么组织用户标识脱敏
推荐把三类数据分开保存:第一类是内部用户键,只在自己的数据库中使用;第二类是 safety_identifier,用于请求中的稳定脱敏标识;第三类是任务 ID 和 response_id,用于定位某一次写作任务。这样既能保持同一用户的标识稳定,也不会把文章任务误当成用户身份。
不要使用每次随机生成的值,否则同一用户无法形成连续的安全标识;也不要直接把邮箱、手机号、真实姓名或带有这些信息的拼接字符串放入请求。哈希前应统一大小写、空白和格式,否则同一用户可能得到多个不同结果。
翻车怎么改
- 故障:同一用户出现多个 safety_identifier。
原因:使用了昵称、随机数,或哈希前的用户键格式不一致。
修正:固定内部用户 UUID,统一规范化规则,并保留哈希版本前缀。 - 故障:请求被参数校验拒绝。
原因:传入的值不是字符串,或脱敏后长度超过 64 个字符。
修正:在发送前执行类型检查和长度检查,超长时缩短摘要长度,不要把原始身份信息塞入字段。 - 故障:能看到安全标识,却找不到对应文章任务。
原因:只记录了 safety_identifier,没有保存任务 ID、response_id 或请求状态。
修正:在同一条内部记录中保存用户映射、任务 ID、response_id、状态和最终正文位置。
完成前检查
- 检查 title、input 或日志中没有误写用户名、邮箱、手机号等身份信息。
- 检查 safety_identifier 是字符串,且长度不超过 64 个字符。
- 检查同一内部用户在相同版本规则下能得到稳定标识。
- 检查任务表已保存 task_id、response_id、请求状态和最终内容位置。
- 检查文章只有在完成审核和发布验收后,才进入正式发布流程。
下一步
把这篇的方法练一遍
提示词和步骤可以带到创作里直接试做一版。