LiblibAI API的Timestamp必须是本地服务器生成的13位整数毫秒时间戳,有效期5分钟且不可复用。需用int(time.time()*1000)生成、立即使用、作为无引号纯数字参数传入URL。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

LiblibAI API要求每次请求都携带一个精确到毫秒的时间戳参数Timestamp,它不是随便填个当前时间就行,而是必须满足服务端300秒(5分钟)有效期校验,且必须是整数格式的毫秒值,错一位就会返回403重放攻击错误。
获取合法Timestamp的正确方式
第一步:调用系统当前时间并乘以1000 → 转为整数 → 去掉小数部分。
Python中直接写 int(time.time() * 1000),不要用 round() 或 floor(),更不能手动拼接字符串如"1726817280000"——这会因本地时钟偏差导致签名失效。
第二步:生成后立即使用,不可缓存超过2秒。
因为服务端校验逻辑是 abs(server_time_ms - timestamp) > 300000 即拒绝,若你在生成timestamp后3秒才发请求,哪怕本地时间准,也大概率超时。这一步必须嵌入请求发起前的最后一刻执行。
第三步:作为查询参数传入URL,值不加引号、不带单位、不补零。
例如正确写法是 &Timestamp=1726817284567,错误写法包括 &Timestamp="1726817284567"、&Timestamp=1726817284567ms、&Timestamp=1726817284.567。
常见错误与规避方法
方法一:用系统time.time()但未转整数
这会导致Timestamp变成浮点数,比如1726817284.567,服务端解析失败直接返回400,错误提示里不会明说,只会报“invalid signature”。
方法二:前端JavaScript生成后传给后端再发请求
【绝对禁止】 前端时间不可信,浏览器时钟可能快5分钟或慢8分钟,且跨域请求无法保证毫秒级同步。必须由发起HTTP请求的服务器本地生成Timestamp。
方法三:复用上一次请求的Timestamp
哪怕只隔1秒,重复使用同一timestamp会触发风控拦截,返回403并标记该AccessKey为可疑——因为LiblibAI强制要求每次请求SignatureNonce和Timestamp双唯一。
验证Timestamp是否有效的实操检查
① 抓包查看发出的URL,确认Timestamp参数值是13位纯数字;
② 用在线时间戳转换工具(如epochconverter.com)粘贴该值,看是否落在当前时间±5分钟内;
③ 对比你代码中生成timestamp那行的执行时间与抓包时间差,必须<1.5秒;
④ 如果用curl测试,别写死timestamp,改用 $(date +%s%3N)(Linux/macOS)或PowerShell中 [int64]::Parse((Get-Date).ToUniversalTime().ToString("yyyyMMddHHmmssfff")) 动态注入。


















