水滴信用科创能力评估报告(STI 报告)
概述
基于水滴信用 MCP sti / data_query / data_risk 工具集,使用 scripts/generate_html.py 变量驱动生成器输出含仪表盘(SVG gauge)、雷达图(SVG radar)、行业排名等可视化的标准化 STI 评估报告。
MCP 依赖与配置
前置检查
执行本技能前,须确认以下水滴信用 MCP 服务均已配置:
| MCP 服务 | 功能 | STI 报告关键工具 |
|----------|------|---------------|
| shuidi_sti | 科创评估核心 | evaluate_sti_capability、get_sti_invest_score、get_sti_output_score、get_sti_quality_score、get_sti_influence_score、get_sti_develop_score、search_patent、search_software_copyright、search_trademark、search_standard、search_honor |
| shuidi_data | 企业工商与经营数据 | get_company_info、get_company_introduction、get_company_partner、get_company_investment、get_company_employee、get_company_controller、search_tax_credit、get_taxpayer_info、search_company_risk、get_company_honor、get_company_cert、search_funding_record |
| shuidi_risk | 司法风险(可选) | search_lawsuit、_punishment 等——用于风险维度补充 |
检查方法:调用 mcp_sti_evaluate_sti_capability 确认返回 status_code: 1。若失败须提示用户配置 MCP。
MCP 配置方法
{
"mcpServers": {
"shuidi_data": {
"url": "https://data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
},
"shuidi_risk": {
"url": "https://risk.data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
},
"shuidi_qc": {
"url": "https://qc.data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
},
"shuidi_sti": {
"url": "https://sti.data.shuidi.cn/mcp?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
},
"shuidi_bid": {
"url": "https://bid.data.shuidi.cn/mcp/?pname=${SHUIDI_MCP_PNAME}&pkey=${SHUIDI_MCP_PKEY}"
}
}
}
获取凭证:访问 水滴信用开放平台 申请 SHUIDI_MCP_PNAME 和 SHUIDI_MCP_PKEY。注入环境变量:
export SHUIDI_MCP_PNAME="your_project_name"
export SHUIDI_MCP_PKEY="your_project_key"
配置路径:~/.hermes/profiles/<profile>/mcp.json 或 ~/.hermes/config.yaml 的 mcp 字段。
依赖缺失处理
STI 报告对 MCP 依赖分级:
- 核心(缺一不可):
shuidi_sti、shuidi_data——缺失任一将导致科创评分和工商数据空白,报告无法生成 - 可选:
shuidi_risk——缺失时风险维度标注「数据不可获取」,不影响核心报告生成
四轮执行模式
第一轮:数据采集(4 批并行)
首批(核心):mcp_sti_evaluate_sti_capability、mcp_data_query_get_company_info、mcp_data_query_get_company_introduction
次批(股权人员):mcp_data_query_get_company_partner、_investment、_employee、_controller
第三批(风险/资质/融资):mcp_data_query_search_tax_credit、get_taxpayer_info、search_company_risk、get_company_honor、get_company_cert、mcp_sti_search_honor、mcp_data_query_search_funding_record
第四批(STI 分项):mcp_sti_get_sti_invest_score、_output_score、_quality_score、_influence_score、_develop_score、mcp_sti_search_patent、_software_copyright、_trademark、_standard
详细工具覆盖与字段映射见 references/mcp-tools-directory.md、references/data-population-guide.md。
第二轮:报告生成(变量驱动)
🔴 使用 scripts/generate_html.py 变量驱动生成器,禁止复制旧模板后 sed 替换。
- 将 MCP 查询结果填入脚本的数据字典区(
COMPANY/STI/RANKINGS/SHAREHOLDERS/CONTROLLER/INVESTMENTS/MANAGEMENT/TAX/RISK/HONORS/CERTS/FUNDING/ 五维度STI_*) - 运行生成器:
python3 scripts/generate_html.py <output_dir> - PDF:
WHTML(filename='report.html').write_pdf('report.pdf', font_config=FontConfiguration())
第三轮:验证
强制执行(详见 references/pitfalls.md):
# div 嵌套验证
python3 scripts/verify_nesting.py <output_dir>/report.html
# 表格闭合验证
grep -c '</table>' report.html # 必须 = grep -c '<table' 数
# 仪表盘 SVG 验证
grep 'stroke-dashoffset' gauge_*.svg # 必须 = 314.15
grep 'transform="rotate' gauge_*.svg # 必须为空
pymupdf 检查关键页面:确保评级表在 1.3 节内、第二章无表格泄漏。
报告结构
| 页码 | 章节 |
|------|------|
| 1 | 封面 — 深色渐变底,白色文字,「水滴信用」标识 |
| 2 | 目录 — target-counter 自动页码,虚线点引 |
| 3-6 | 一、综合评述 — 1.1 科创等级(仪表盘 + 雷达图)+ 1.2 评级指标分析 + 1.3 评级体系说明 + AI 深度解读 |
| 7-10 | 二、企业概况 — 工商信息/股东/投资/人员/纳税/风险/荣誉 + AI 深度解读 |
| 11-12 | 三、企业竞争力 — 经营/品牌/创新 + AI 深度解读 |
| 13-17 | 四、科技创新能力评估 — 五维度(投入/产出/质量/影响/成长)+ AI 深度解读 |
| 18 | 数据来源与免责声明 |
样式规范
| 要素 | 规格 |
|------|------|
| 配色 | 背景 #F7F4ED;标题线 #D4A574 2px;表头 #2C3E50 白字;AI 框 #F0F7FF + #4A90D9 左边框 |
| 封面 | linear-gradient(160deg, #2C3E50, #1a2a38, #243342) |
| 页眉 | running header(公司名左 / 水滴信用右),@top-center 同宽 180mm |
| 分页 | .page { page-break-before: always };表格/AI 框 page-break-inside: avoid |
| 封面/目录 | @page cover / @page toc 禁用页眉页脚 |
SVG 图表关键公式
仪表盘(Gauge)
- 弧线公式:
dasharray = math.pi * 100 * score / 100(非180/360减半——已验证正确值为π×100×s/100) - 弧线起始点:
stroke-dashoffset = 314.15(π×100),定位 9 点钟 = 左红起点 - 禁止 rotate:objectBoundingBox 渐变随旋转翻转;用 dashoffset 替代
- 指针公式:
rotation = -90 + score * 1.8(覆盖 180° 弧)
雷达图(Radar)
viewBox="-30 -25 460 450",标签因子 1.10,防截断- 无外框矩形(五边形顶点直接连目标分值点)
- 满分基准线用浅色虚线
等级徽章
width: 55px(非 40px),避免 AAA 被裁切- 9 级评级表:AAA(95-100) / AA(85-94) / A(75-84) / BBB(65-74) / BB(60-64) / B(50-59) / CCC(40-49) / CC(30-39) / C(0-29)
- A 行不设背景高亮
关键陷阱
| # | 陷阱 | 关键修复 |
|---|------|---------|
| 1 | f-string 内 <style> 花括号未转义 → NameError | {→{{,}→}},全量 ~70 处 |
| 2 | 仪表盘弧线公式错误 | dasharray = π×100×s/100(非 180/360) |
| 3 | 仪表盘用 rotate | 禁止;用 dashoffset=314.15 定位起点 |
| 4 | 雷达图标签截断 | viewBox="-30 -25 460 450" |
| 5 | WeasyPrint 页面右偏 | .page 不设 width(或只用 180mm + box-sizing) |
| 6 | .page div 嵌套 → 章节错位 | 每章 .page 显式关闭,verify_nesting.py 验证 |
| 7 | 章间双重分页 → 空白页 | 移除 break-after,仅靠 .page break-before: page |
| 8 | 评级表缺 </table> → 泄漏到下一章 | 显式闭合,grep 验证 |
| 9 | 删 AI 框时误删 </table> | 删除相邻代码块前检查闭合完整性 |
| 10 | build_html() 变量残留 | 返回前 html.replace('{C["name"]}', C["name"]) 防御安全网 |
| 11 | 等级徽章 AAA 裁切 | width: 55px |
| 12 | A 行意外高亮 | 评级表 A 行不设背景色 |
详细诊断与修复见 references/pitfalls.md。
验证清单
- [ ] 4 批 MCP 调用全部完成,数据填入数据字典
- [ ] f-string CSS 花括号全量转义
- [ ] 仪表盘:dashoffset=314.15,无 rotate,指针公式
-90+s*1.8 - [ ] 雷达图:viewBox 正确,无外框矩形
- [ ] 等级徽章 width=55px
- [ ]
</table>数 =<table数 - [ ]
.pagediv 零嵌套(verify_nesting.py通过) - [ ] 章间无
break-after残留 - [ ]
build_html()返回前变量残留替换安全网 - [ ] PDF > 200KB(字体嵌入正常),< 700KB
- [ ] pymupdf 确认评级表在 1.3 节内,Ch2 无表格泄漏
微信扫一扫