肺炎医疗影像AI辅助诊断模型调用Skill。基于肺炎AI模型接口,支持异步提交胸部CT DICOM压缩包进行分析,查询/轮询获取肺炎检测结果。
> 特别说明:以下模型能力均仅限中国大陆地区科研用途售卖和使用,不得直接用于临床检测与诊疗等目的。
采用 HMAC-SHA256 签名算法,计算公式如下:
signature = HMAC-SHA256(token, appId + timestamp)
| 参数 | 说明 | 备注 |
|---|---|---|
| ------ | ------ | ------ |
appId | 合作方 ID | 由系统分配 |
token | 密钥 | 由系统分配,需妥善保管 |
timestamp | 时间戳 | 当前时间的秒级时间戳 |
signature | 签名 | 根据上述公式计算得出 |
| Header 字段 | 必填 | 说明 |
|---|---|---|
| ------------- | ------ | ------ |
appId | 是 | 合作方 ID |
timestamp | 是 | 秒级时间戳,服务器允许一定误差 |
signature | 是 | 根据 2.1 计算出的签名 |
用户首次使用时需提供 appId 和 token,如缺失则主动询问:
请提供以下参数以使用肺炎AI诊断接口:
1. appId(合作方ID)
2. token(密钥)
> 安全提示:token 不得出现在前端、日志或客户端代码中,仅在服务端参与签名计算。
https://pacs.qq.com/openapi/pneumoniaSubmitPOSTmultipart/form-data通过 multipart/form-data 表单提交:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ------ | ------ | ------ | ------ |
studyId | string | 是 | 检查 ID,唯一标识一次检查 |
dicomFile | file | 是 | DICOM 文件压缩包(ZIP 格式),最大 300MB |
studyDate | string | 否 | 检查时间的秒级时间戳(为空时使用服务器当前时间) |
needReport | string | 否 | 是否需要输出报告:0 不需要(默认),1 需要 |
patientId | string | 否 | 患者 ID |
patientName | string | 否 | 患者姓名(用于报告) |
patientGender | string | 否 | 患者性别:0 未知,1 男,2 女 |
patientAge | string | 否 | 患者年龄(整数) |
studyName | string | 否 | 检查项目(如"胸部CT"),为空时使用 DICOM 中的 StudyDescription |
| 字段 | 类型 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
head | object | 通用响应头。code=0 表示提交成功,head.taskId 为后续查询所用(格式:{studyId}_{毫秒时间戳}) |
head.code | int | 业务状态码:0 成功,非 0 失败(详见 3.4) |
head.message | string | 状态描述 |
head.resourceRemaining | int | 剩余可用配额次数 |
head.requestId | string | 请求唯一标识(格式:req_{appId}_{纳秒时间戳}) |
head.taskId | string | 任务 ID(格式:{studyId}_{毫秒时间戳}) |
head.studyInstanceUID | string | 从 DICOM 文件中读取的 Study UID |
head.seriesInstanceUID | string | 从 DICOM 文件中读取的 Series UID |
使用 Bash 工具执行脚本 @scripts/pneumonia_submit.py:
python3 {SKILL_DIR}/scripts/pneumonia_submit.py \
--app_id "{appId}" \
--token "{token}" \
--study_id "{studyId}" \
--dicom_file "{zip文件绝对路径}" \
[--study_date "{检查时间戳}"] \
[--need_report "1"] \
[--patient_id "{患者ID}"] \
[--patient_name "{患者姓名}"] \
[--patient_gender "{1或2}"] \
[--patient_age "{年龄}"] \
[--study_name "{检查项目}"]
> {SKILL_DIR} 为本Skill的安装目录,执行时替换为实际路径。
https://pacs.qq.com/openapi/pneumoniaQueryPOSTapplication/json| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ------ | ------ | ------ | ------ |
taskId | string | 是 | 提交时返回的 head.taskId(支持多个 taskId 以英文分号 ; 分隔) |
studyId | string | 否 | 检查唯一标识(可选) |
needReport | string | 否 | 是否需要报告:0 不需要,1 需要 |
| 字段 | 类型 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
head | object | 通用响应头 |
studyId | string | 任务标识(与 taskId 一致) |
status | string | AI 分析状态(见下表) |
pneumoniaSign | string | AI 肺炎表征结果(仅处理完成时返回,格式:肺炎表征 : XX.X%) |
pneumoniaAnalysis | string | AI 肺炎分析结果,格式化的病灶详情文本(仅处理完成时返回) |
reportUrl | string | AI 分析 PDF 报告 URL(仅 needReport=1 且处理完成时返回) |
status 状态值| status | 含义 | 说明 |
|---|---|---|
| -------- | ------ | ------ |
| 待处理 | 任务已接收,尚未开始处理 | 请稍后重试查询 |
| 处理中 | AI 正在分析中 | 请稍后重试查询 |
| 处理完成 | 分析成功,已返回结果 | 读取 pneumoniaSign 和 pneumoniaAnalysis |
| 处理失败 | 分析失败或 taskId 无效 | 不计费,head.message 为 "taskId无效或任务不存在" |
使用 Bash 工具执行脚本 @scripts/pneumonia_query.py:
python3 {SKILL_DIR}/scripts/pneumonia_query.py \
--app_id "{appId}" \
--token "{token}" \
--task_id "{taskId}" \
[--need_report "1"]
提交成功后自动轮询查询接口,直到任务完成或失败。
使用 Bash 工具执行脚本 @scripts/pneumonia_poll.py:
python3 {SKILL_DIR}/scripts/pneumonia_poll.py \
--app_id "{appId}" \
--token "{token}" \
--task_id "{taskId}" \
[--need_report "1"] \
[--initial_wait 30] \
[--interval 10] \
[--max_attempts 300]
参数说明:
| 参数 | 默认值 | 说明 |
|---|---|---|
| ------ | -------- | ------ |
--initial_wait | 30 | 首次查询前等待秒数 |
--interval | 10 | 轮询间隔秒数 |
--max_attempts | 300 | 最大轮询次数 |
head.code)| code | 枚举名 | 含义 | 处理方式 |
|---|---|---|---|
| ------ | -------- | ------ | ---------- |
0 | SUCCESS | 成功 | 正常展示结果 |
1 | PARAM_ERROR | 参数错误(如 studyId 为空、dicomFile 缺失、multipart 解析失败) | 检查请求参数是否完整 |
10001 | DB_ERROR | 数据库错误 | 稍后重试或联系服务方 |
10002 | QUOTA_INSUFFICIENT | 剩余配额不足或资源已过期 | 提醒用户续费 |
10003 | INVALID_TOKEN | Token 失效或签名错误 | 检查 appId/token/时间戳是否正确 |
10004 | INVALID_SIGNATURE | 签名验证失败或资源配置未找到 | 检查 appId/token/时间戳是否正确 |
10005 | CUSTOMER_CLOSED | 客户状态已关闭 | 联系服务方 |
90001 | DATA_FORMAT_ERROR | 数据格式错误(如 ZIP 解压失败、无有效 DICOM 文件、未找到有效图像) | 检查ZIP包和DICOM文件格式 |
90002 | AI_INFERENCE_ERROR | AI 引擎调用失败(上传失败、taskId 无效或任务不存在) | 检查taskId是否有效 |
将分析结果结构化展示给用户:
pneumoniaSign 值(如 "肺炎表征 : 97.5%")needReport=1,提供 PDF 报告 URLpneumoniaAnalysis 格式说明:
第一部分:全肺感染比例摘要
占全肺6.2%; 左肺 肺炎占3.1%; 右肺 肺炎占9.3%
若无感染则为:该患者无肺炎感染
第二部分:病灶详情列表
共3处肺炎感染:
(1)右肺上叶【99 / 182】,体积77657mm³,占右肺体积6.6%,平均CT值-603HU
(2)右肺下叶【157 / 210】,体积49177mm³,占右肺体积4.2%,平均CT值-511HU
(3)右肺中叶【181 / 206】,体积4668mm³,占右肺体积0.4%,平均CT值-495HU
各字段含义:
占全肺X.X%:全肺感染体积占比左肺 肺炎占X.X%:左肺感染体积占比右肺 肺炎占X.X%:右肺感染体积占比(N):病灶序号[位置]:病灶所在肺叶(左肺上叶/左肺下叶/右肺上叶/右肺中叶/右肺下叶)【起始层 / 结束层】:病灶在 CT 序列中的层号范围体积Xmm³:病灶体积占[左/右]肺体积X.X%:病灶占对应侧肺的体积比平均CT值XHU:病灶区域的平均 CT 值token 不得出现在前端、日志或客户端代码中;仅在服务端参与签名。__MACOSX、隐藏文件等)。resourceRemaining,及时续费。配额在 AI 分析完成后由后台异步扣减,提交时的 resourceRemaining 值可能略有延迟。taskId 格式为 {studyId}_{毫秒时间戳},查询时需使用完整 taskId。当前提供的试用凭证:
| 项目 | 值 |
|---|---|
| ------ | ------ |
| APP-ID | 100002 |
| APP-TOKEN | ca27d176-d317-475f-8d1f-9cb54032a905 |
| 有效期 | 至 2026.6.24 |
如需 sample 肺炎CT数据:可查询访问公开数据集,建议CT层厚<2mm。
如需长期使用,请联系 miying@tencent.com 或访问腾讯健康官网。
遇到问题时请提供以下信息:
appId、requestId、taskIdhead.code 是否为 0,且 head.taskId 非空status 字段是否为"处理完成"或"处理失败"pneumoniaSign 和 pneumoniaAnalysis 非空共 3 个版本