You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

7.1 KiB

工作经历 AI:第三方处理告知与本次同意

2026-10-26 A7 新候选:真实模式改为 mode=deepseek + real-enabled=true 显式开启,不再要求 dev;新增 Redis 调用额度与并发门禁(429/Retry-After=60、Redis 故障503)。告知升级 work-experience-external-processing-v2,developmentOnly=false。下文旧版本/仅开发环境及旧验收记录属于历史,当前规则和上线边界以 正式环境配置说明 为准;本批尚未部署,不代表合规审核完成。

日期:2026-10-26。面向前后端联调人员;本批为后端候选,不是已部署接口,不改前端,不开放生产。

1. 告知接口与版本规则

新增 GET /api/v1/profile/me/work-experience-optimization/notice,使用学生 Access Token。未登录/Refresh Token 401,企业和管理员 403;接口只读、不调用模型,功能关闭时也可读取。

data 返回:

字段 含义
version 当前告知版本;本候选为 work-experience-external-processing-v2
title、message 应完整展示的标题和说明,不应由前端截断或删改关键内容
provider、purpose、dataFields DeepSeek、生成优化建议、可能外发的 position / description / targetPosition
mode off / stub / deepseek
enabled 当前功能是否启用;false 时不能据此启用按钮
developmentOnly 当前为 false,已取消开发 profile 限制;不等于完成生产合规审查

告知说明包含:真实模式会向第三方 DeepSeek 发送本次输入,模拟或本地规则直接处理不会外发;不得填写联系方式、证件、凭据、商业秘密或他人个人信息;结果可能不准确,须核对后手动采用;不自动保存或覆盖简历;拒绝不影响手动编辑和保存;同意仅针对本次优化。

第三方留存、训练用途等政策尚待核实并纳入正式告知。本候选不承诺第三方零留存、不用于训练,也不等于完成法律或运营合规审查。

优化仍为 POST /api/v1/profile/me/work-experience-optimization,示例:

{
  "position": "开发实习生",
  "description": "在导师指导下协助修改订单接口参数校验。",
  "targetPosition": "后端开发",
  "externalProcessingConsent": true,
  "consentNoticeVersion": "work-experience-external-processing-v2"
}

示例版本仅说明当前契约;实际请求必须使用本次已展示的 GET 返回版本,不要永久硬编码。版本不是 promptVersion,两者不可混用。externalProcessingConsent 只接受原生 JSON 布尔 true;false、null、缺失、字符串 "true"、数字或对象均拒绝。版本缺失、空白、旧版本或大小写不符也拒绝,HTTP 400,且不调用模型或走本地信息不足捷径。

这是不兼容的请求变更:旧客户端只有布尔同意而未带版本的请求不能继续调用。前后端须协调部署,未接入前不要开启功能。优化响应字段和 revision 保存流程不变,API 静态/运行时契约更新为 213 paths / 261 operations。

2. 前端展示及同意/拒绝流程

  1. 用户点击 AI 优化后读取告知接口,检查 enabled 和 developmentOnly;读取失败则保留原文,不外呼优化接口。
  2. 完整展示 title/message、第三方名称、用途与发送字段。仅在 developmentOnly=true 时显示开发联调限制;false 不得当作合规审核通过标志。
  3. 不默认勾选、不将注册或保存简历与同意绑定;提供“同意并优化”和“暂不使用”。关闭/拒绝不发送 POST,也不清空、修改原文。
  4. 用户本次明确确认后,提交当前输入、原生 true 和本次已展示的 version。不要把本地缓存的“曾同意”自动用于后续优化,不自动提交或自动重试。
  5. 收到 400 时检查输入和版本;版本已变化则重新获取、展示并让用户再次确认,不静默替换版本后重发。429 读取 Retry-After,不能自动重试或承诺倒计时后必定可用;503/504 等失败保留原文,展示错误后由用户决定是否重试。
  6. OPTIMIZED 展示对比并由用户手动采用;NEED_MORE_INFO 展示补充问题,不显示“优化成功”,不启用采用/覆盖。原文已改变或用户已切账号时丢弃旧响应。
  7. 采用只回填编辑框;真正保存继续使用已有带 revision 的简历接口。

3. 日志保护与验证边界

后端 AI 链路不记录输入字段、Key、完整模型输出或上游正文。请求/响应/模型建议对象的 toString 已脱敏,正常 JSON 业务返回不受影响;模块异常只返回固定安全文案,不记录未知异常正文、cause 或堆栈。

AI 请求使用服务端生成的 requestId,不回显调用方提供的请求 ID 文本;日志路径归一化,非常规 HTTP 方法归为 OTHER。保留的请求元数据包括规范化路径、方法、状态、耗时、服务端 requestId 及既有网络地址信息,不包含请求/响应正文或查询参数。前端排障使用后端返回的 requestId,不要将正文或 Key 放进 URL、跟踪头、埋点或 console。

在 AI 请求范围内抑制 Spring Web/HTTP/Security、Hibernate 及 AI 模块的正文/异常诊断日志;其他接口仍沿用现有日志行为。JDK HTTP 诊断开关可能打印 Authorization/正文,创建 DeepSeek 客户端时发现非空且非 none 的 jdk.httpclient.HttpClient.log 将失败关闭;不得在启动后动态开启该诊断。

该保护针对本工程应用日志,不能替代对反向代理、网关、APM、系统转储或第三方平台的独立审计;不声称任意日志组件或未来新增 logger 都已被全面验证。合成验收资料另存测试证据,不是允许生产记录真实正文。simulated=false 仍只是模式标记,不能当成外呼/计费凭证。

后端只校验客户端提交的同意声明与版本,不能证明前端真的展示、用户阅读或点击;本批不新增永久同意记录或数据库迁移,也不把技术门禁当作完整知情同意审计证据。正式政策、供应商处理约定、前端交互及生产部署仍待独立确认。

4. 联调清单

  • 告知可在关闭模式下读取;匿名、企业、管理员、Refresh Token 和禁用账号不能绕过权限。
  • 明确 true+当前版本可继续;其他类型、拒绝、遗漏或旧版本必须 400 且零模型调用;对“暂无相关经历”同样校验同意,不能走捷径绕过。
  • 拒绝/关闭/超时/切账号/输入变化不丢原文,不自动重试,不自动保存。
  • 用合成原文、Key 标记和完整响应标记覆盖成功、校验、畸形 JSON、未知异常,检查应用日志中均不存在;TRACE 测试也必须保留安全元数据而不是关闭所有日志取巧。
  • A5 定向173项及A6独立全量3848项均是历史基线结果,不能替代本次A7配置、门禁与告知v2的验证。A7结果以对应新基线验收报告为准。
  • 本批未调用真实模型,未提交、推送或发布;前端真机、服务器实际配置与真实连通不能由后端离线测试代替。