腾讯健康-组学平台-组学任务分析
前置规则(触发本 Skill 时必须遵守)
- 调用前必须查阅
./references/omics-api-reference.md获取参数定义,禁止凭记忆猜测 - 所有命令通过
./scripts/tccli_runner.sh执行,禁止自行拼接 tccli 命令 - 仅允许 omics 产品 API,禁止调用 cvm/cos/iam 等其他产品
- 缺少必选参数时禁止执行、禁止编造 ID,必须先调用上游 API 获取或向用户追问
- 所有相对路径以 SKILL.md 所在目录为基准
调用流程
用户通过会话通道以自然语言提出需求,按以下 5 步处理:
第 1 步:意图识别
根据用户输入,匹配下方映射表,确定需要调用哪些云 API。可能涉及多个 API 的组合调用。
| 用户说 | API | 说明 | | ----------------------------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------- | | "跑一个 WGS 分析" / "投递 RNA-seq" / "运行 app-xxx" / "提交批量分析" / "跑 Nextflow 流程" | RunApplication | 投递任务 | | "任务跑完了吗" / "查看 run-xxx 状态" / "最近任务进度" / "有没有失败的" | DescribeRunGroups | 任务批次列表/状态 | | "批次里的子任务" / "run-xxx 下有哪些任务" | DescribeRuns | 子任务列表 | | "查看任务详情" / "这个任务具体信息" | GetRunStatus | 单个任务详情 | | "查看作业步骤" / "作业树是什么样" | GetRunCalls | 作业层级(递归调用,见 API 参考) | | "下载日志" / "查看报告" / "获取结果" / "拿 nextflow.log" | GetRunMetadataFile | 日志/报告下载 | | "重试失败任务" / "重跑 run-xxx" / "重新运行这批" / "重跑成功的任务" | RetryRuns,失败时降级为 RunApplication | 重跑(见下方特殊处理) | | "终止任务" / "取消 run-xxx" / "停掉分析" | TerminateRunGroup | 终止 | | "我有哪些项目" / "查看项目列表" | DescribeProjects | 项目列表 | | "项目里有哪些应用" / "有哪些 WDL 应用" / "可用的分析流程" / "项目应用列表" | DescribeApplications | 查询项目内已导入的应用 | | "应用有哪些版本" / "查看 app-xxx 版本" | DescribeApplicationVersions | 仅限项目应用 | | "有哪些公共应用" / "公共流程" / "可以导入哪些应用" / "某分类的公共应用" / "公共应用列表" | DescribePublicApplications | 查询平台公共应用列表 | | "查看子应用" / "这个应用下有哪些子应用" / "app-xxx 的子应用" | DescribePublicApplications | 传 ParentAppId 查子应用 | | "导入公共应用到项目" / "把 scBERT 加到项目" / "从公共应用导入" | ImportCommonApplication | 将公共应用导入到项目中 | | "有哪些运行环境" / "查看可用环境" | DescribeEnvironments | 环境列表 | | "应用有哪些参数模板" / "查看输入模板" | DescribeInputTemplates | 参数模板列表 | | "查看模板内容" / "模板里填了什么" | GetInputTemplateFile | 模板内容 | | "导入样本表格" / "上传 CSV 到项目" | ImportTableFile | 导入表格 | | "查看项目表格" / "有哪些表格" | DescribeTables | 表格列表 | | "查看表格数据" / "表格里有哪些行" | DescribeTablesRows | 表格行数据 |
重跑任务特殊处理:
用户可以重跑任意已结束的任务(终态为 Succeeded、Failed 或 Aborted 均可)。仅当任务批次仍在运行中(Pending/Running)时不允许重跑,需提示用户等待任务结束或先终止任务。
处理流程:
- 优先调用 RetryRuns — 使用 ProjectId + RunGroupId 发起重跑
- RetryRuns 失败时降级为 RunApplication — 可能是环境不可用或其他原因导致失败,此时:
- 调用
DescribeRunGroups查询该任务批次,获取对应的ApplicationId和ProjectId - 调用
GetRunStatus尝试获取原任务的运行参数Input:- 取到 Input → 通过
encode_input.sh编码为 InputBase64,直接复用 - 取不到 Input → 调用
DescribeInputTemplates(ApplicationId)查询最新模板列表,向用户展示并追问选择,调用GetInputTemplateFile获取 Content 后通过encode_input.sh编码
- 取到 Input → 通过
- 补全 RunApplication 所需的其他参数(EnvironmentId 等)
- 按照 RunApplication 的完整流程重新运行该应用,实现重跑
- 调用
第 2 步:参数整理与确认
读取 ./references/omics-api-reference.md 中对应 API 章节,整理所需入参:
- 检查上下文 — 当前会话中是否已有可复用的参数(如之前获取的 ProjectId、ApplicationId 等),避免重复追问
- 按依赖链补全 — 缺少必选入参时,先调用上游 API 获取(依赖关系见
omics-api-reference.md) - 引导用户提供 — 关键入参无法自动获取时,引导用户提供:
- 每轮最多追问 1 个问题,避免一次问太多
- 能自动获取的信息不追问(如只有 1 个项目时直接使用)
- 列出选项时附带 ID 和名称,方便用户选择
- 示例:"查到 3 个项目,请选择:① WGS 项目(prj-xxx) ② RNA 项目(prj-yyy) ③ 测试项目(prj-zzz)"
第 3 步:拼接命令并执行
参数齐全后,通过 tccli_runner.sh 拼接并执行 tccli 命令:
bash ./scripts/tccli_runner.sh <API名称> <region> [--参数名 值 ...]
脚本内置白名单校验、地域校验、必选参数校验、响应解析。缺参时脚本拒绝执行并输出提示。
第 4 步:结果返回
- 执行成功 → 用中文向用户总结执行结果
- 执行失败 → 查阅
./references/error-handling.md,按错误码向用户说明原因和建议
第 5 步:特殊结果处理
仅针对 RunApplication 和 RetryRuns 调用成功后,提示用户可以随时主动询问任务状态:
✅ 任务已投递!批次 ID: run-xxx
⏱️ 组学分析通常需要 30 分钟到数小时。你可以随时对我说:
• "查看 run-xxx 状态" — 查询最新进度
• "run-xxx 跑完了吗" — 快速检查是否完成
• "下载 run-xxx 日志" — 获取执行日志
禁止提示定时查询、自动跟踪等功能。仅引导用户主动问询。
典型会话场景
场景 1:用户说"帮我跑一个 WGS 分析"
- 【第 1 步】识别意图 → RunApplication(可能需组合多个 API)
- 【第 2 步】DescribeProjects → 若多个项目,追问选择
- 【第 2 步】DescribeApplications → 若多个应用,追问选择
- 【第 2 步】DescribeInputTemplates → 追问模板 → GetInputTemplateFile → encode_input.sh 编码
- 【第 2 步】DescribeEnvironments → 若多个环境,追问选择
- 【第 3 步】查阅 omics-api-reference.md → tccli_runner.sh 执行 RunApplication
- 【第 4 步】回复执行结果
- 【第 5 步】提示:"任务已投递!批次 ID: run-xxx。你可以随时问我查看进度。"
场景 2:用户说"帮我导入 scBERT 并运行"
- 【第 1 步】识别意图 → ImportCommonApplication + RunApplication
- 【第 2 步】DescribePublicApplications → 匹配 scBERT,获取 UUID
- 【第 2 步】DescribeProjects → 若多个项目,追问选择
- 【第 3 步】执行 ImportCommonApplication → 获取 ApplicationId
- 【第 2 步】DescribeEnvironments → 若多个环境,追问选择
- 【第 3 步】执行 RunApplication
- 【第 5 步】提示:"scBERT 已导入并投递运行!批次 ID: run-xxx。你可以随时问我查看进度。"
场景 3:用户说"重跑 run-xxx"
- 【第 1 步】识别意图 → 重跑任务(任务已结束即可,不限终态)
- 【第 2 步】用户提供 RunGroupId → 若未提供 ProjectId,追问
- 【第 3 步】执行 RetryRuns(ProjectId, RunGroupId)
- 【第 4 步】若成功 → 【第 5 步】提示:"已发起重跑!新批次 ID: run-yyy。你可以随时问我查看进度。"
- 【第 4 步】若失败 → 告知用户 RetryRuns 失败原因,尝试降级方案:
- 【第 2 步】调用 DescribeRunGroups 获取该批次的 ApplicationId 和 ProjectId
- 【第 2 步】调用 GetRunStatus 尝试获取原任务 Input
- 取到 →
encode_input.sh编码为 InputBase64 - 取不到 → DescribeInputTemplates → 追问用户选择模板 → GetInputTemplateFile →
encode_input.sh编码
- 取到 →
- 【第 2 步】补全 RunApplication 所需的其他参数(EnvironmentId 等)
- 【第 3 步】执行 RunApplication
- 【第 5 步】提示:"已通过重新投递实现重跑!新批次 ID: run-zzz。你可以随时问我查看进度。"
场景 4:用户说"最近的任务跑完了吗"
- 【第 1 步】识别意图 → DescribeRunGroups
- 【第 2 步】检查上下文是否有 ProjectId
- 【第 3 步】执行 DescribeRunGroups
- 【第 4 步】回复:"最近 5 个任务:✅ 完成 3 | ❌ 失败 1 | 🔄 运行中 1。失败的是 run-xxx,需要重试吗?"
场景 5:用户说"下载 run-xxx 的日志"
- 【第 1 步】识别意图 → GetRunMetadataFile(需先 DescribeRuns 获取 RunUuid)
- 【第 2 步】DescribeRuns 获取批次下的 RunUuid
- 【第 3 步】执行 GetRunMetadataFile
- 【第 4 步】回复:"日志下载链接(1 分钟内有效):https://..."
Resources
| 文档/脚本 | 路径 | 说明 |
| ---------------- | ------------------------------------- | ----------------------- |
| API 参数参考 | ./references/omics-api-reference.md | 每次调用前必须查阅 |
| 错误处理指南 | ./references/error-handling.md | API 返回错误时 |
| 任务生命周期 | ./references/task-lifecycle.md | 需了解状态机时 |
| 命令执行器 | ./scripts/tccli_runner.sh | 所有 API 调用的入口 |
| 输入编码 | ./scripts/encode_input.sh | RunApplication 输入编码 |
Scan to join WeChat group