上传 docx, 9 大红线自动检查, 立即出评分 + 详细报告。
基础: dlbai.cn · 5 次免费/月 · 9.9 元/次起
X-API-Key# 上传 docx 标书, 拿到评分 + 报告 curl -X POST https://dlbai.cn/api/v1/bid/audit \ -H "X-API-Key: yxh_live_你的密钥" \ -F "docx=@你的标书.docx"
所有需鉴权接口必须在 HTTP Header 传:
X-API-Key: yxh_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
密钥前缀: yxh_live_ + 32 位 hex。请勿在 Git/前端代码暴露。
健康检查, 公开无需鉴权。
curl https://dlbai.cn/api/v1/bid/health
→ { "success": true, "status": "ok", "version": "v1" }
套餐列表, 公开无需鉴权。
curl https://dlbai.cn/api/v1/bid/plans
核心接口: 上传 docx 标书, 立即返回评分 + 9 大红线检查结果。
| Header | X-API-Key (必填) |
|---|---|
| Body | multipart/form-data, 字段名 docx, 最大 50MB |
| Query | detail=1 可选, 返回详细报告 (默认仅返回问题计数) |
{
"success": true,
"data": {
"score": 30,
"severity": 1,
"severity_label": "WARN",
"summary": { "p0_count": 0, "p1_count": 14, "p2_count": 0 },
"filename": "投标书.docx",
"duration_ms": 552,
"remaining_quota": 99,
"issues_count": {
"company_name": 0, "phone_leak": 0, "old_date": 0,
"placeholder": 13, "project_placeholder": 0,
"cert_unmarked": 0, "chapter_bloat": 41,
"heading_missing": 0, "table_missing": 0
}
}
}
在 data 内多出:
"report": { // 完整 9 大红线原始数据 "issues": { "company_name": [{ "text": "...", "para": 12, "pos": 42 }], "phone_leak": [...], // ... } }, "report_text": "评分: 30/100 (WARN)\nP0: 0 个\nP1: 14 个..."
查询当前 API Key 本月用量 + 配额 + 最近 10 次调用记录。
curl https://dlbai.cn/api/v1/bid/usage \
-H "X-API-Key: yxh_live_xxx"
每次审查会按这 9 类检查, 评分 = max(0, 100 - P0×20 - P1×5 - P2×1):
| 级别 | 类别 | 说明 |
|---|---|---|
| P0 致命 | 公司名误写 | 主体名错位: 出租方/责任主体/品牌名在文档各章节前后要一致, 避免合同/标书出现"两个公司" |
| 真实手机号 | 11 位 1[3-9]\d{9} 写进正文 → 必须改为 【联系电话-待补】 | |
| 旧日期未统一 | 贰零贰肆/贰零贰伍 等大写混用 | |
| P1 警告 | 占位符 【______】 | 法人/签字/盖章/身份证 必填, 至少 30+ 处 |
| 项目级占位 | 本项目/采购人/XX州市XX县区 必标橙 | |
| 章节冗余 | 第X章 段数 ≤ 26 (目录 13 + 正文 13), 超过即子节错升 | |
| Heading 样式 | 13 主章必须 Heading 1, 不许全部 (None) | |
| 表格缺失 | 业绩/区域/人员 配置表 ≥ 3 张 (不要 | 管道符伪表格) | |
| P2 提示 | 证书编号未标 [待核对] | 前缀 YNQJX-/YNWS-/XY-/YNSH-/JZ安许证字 后必标 |
所有响应都遵循:
{
"success": true | false,
"data": {...} | "error": "ERROR_CODE",
"message": "人类可读错误" // 仅 fail 时
}
| HTTP | error | 含义 |
|---|---|---|
| 400 | NO_FILE | 未上传 docx |
| 401 | MISSING_API_KEY | 缺 X-API-Key |
| 401 | INVALID_API_KEY | key 无效/已撤销 |
| 401 | API_KEY_EXPIRED | key 过期 |
| 429 | QUOTA_EXHAUSTED | 本月配额用完 |
| 429 | RATE_LIMIT | 请求过快 (限流) |
| 500 | AUDIT_ERROR | 审查失败 (文件损坏等) |
curl -X POST https://dlbai.cn/api/v1/bid/audit \ -H "X-API-Key: yxh_live_你的密钥" \ -F "docx=@投标书.docx" \ -F "detail=1" # 可选, 拿详细报告
import requests API_KEY = "yxh_live_你的密钥" url = "https://dlbai.cn/api/v1/bid/audit" with open("投标书.docx", "rb") as f: r = requests.post( url, headers={"X-API-Key": API_KEY}, files={"docx": f}, params={"detail": "1"} ) data = r.json()["data"] print(f"评分: {data['score']}, 等级: {data['severity_label']}") print(f"问题: P0×{data['summary']['p0_count']}, P1×{data['summary']['p1_count']}") print(f"剩余配额: {data['remaining_quota']}")
const fs = require('fs'); const FormData = require('form-data'); const fetch = require('node-fetch'); (async () => { const form = new FormData(); form.append('docx', fs.createReadStream('投标书.docx')); const r = await fetch('https://dlbai.cn/api/v1/bid/audit', { method: 'POST', headers: { 'X-API-Key': 'yxh_live_你的密钥', ...form.getHeaders() }, body: form }); const j = await r.json(); console.log(j); })();
$ch = curl_init("https://dlbai.cn/api/v1/bid/audit"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, [ "docx" => new CURLFile("投标书.docx") ]); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "X-API-Key: yxh_live_你的密钥" ]); $resp = curl_exec($ch); curl_close($ch); $data = json_decode($resp, true); echo "评分: " . $data["data"]["score"];