返回 Skill 列表
extension
分类: 其它无需 API Key

腾讯健康-组学平台-组学任务分析

omics-task-skill

person作者: u_f8acb4d5hubenterprise

腾讯健康-组学平台-组学任务分析

前置规则(触发本 Skill 时必须遵守)

  1. 调用前必须查阅 ./references/omics-api-reference.md 获取参数定义,禁止凭记忆猜测
  2. 所有命令通过 ./scripts/tccli_runner.sh 执行,禁止自行拼接 tccli 命令
  3. 仅允许 omics 产品 API,禁止调用 cvm/cos/iam 等其他产品
  4. 缺少必选参数时禁止执行、禁止编造 ID,必须先调用上游 API 获取或向用户追问
  5. 所有相对路径以 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)时不允许重跑,需提示用户等待任务结束或先终止任务。

处理流程:

  1. 优先调用 RetryRuns — 使用 ProjectId + RunGroupId 发起重跑
  2. RetryRuns 失败时降级为 RunApplication — 可能是环境不可用或其他原因导致失败,此时:
    • 调用 DescribeRunGroups 查询该任务批次,获取对应的 ApplicationIdProjectId
    • 调用 GetRunStatus 尝试获取原任务的运行参数 Input
      • 取到 Input → 通过 encode_input.sh 编码为 InputBase64,直接复用
      • 取不到 Input → 调用 DescribeInputTemplates(ApplicationId) 查询最新模板列表,向用户展示并追问选择,调用 GetInputTemplateFile 获取 Content 后通过 encode_input.sh 编码
    • 补全 RunApplication 所需的其他参数(EnvironmentId 等)
    • 按照 RunApplication 的完整流程重新运行该应用,实现重跑

第 2 步:参数整理与确认

读取 ./references/omics-api-reference.md 中对应 API 章节,整理所需入参:

  1. 检查上下文 — 当前会话中是否已有可复用的参数(如之前获取的 ProjectId、ApplicationId 等),避免重复追问
  2. 按依赖链补全 — 缺少必选入参时,先调用上游 API 获取(依赖关系见 omics-api-reference.md
  3. 引导用户提供 — 关键入参无法自动获取时,引导用户提供:
    • 每轮最多追问 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. 【第 1 步】识别意图 → RunApplication(可能需组合多个 API)
  2. 【第 2 步】DescribeProjects → 若多个项目,追问选择
  3. 【第 2 步】DescribeApplications → 若多个应用,追问选择
  4. 【第 2 步】DescribeInputTemplates → 追问模板 → GetInputTemplateFile → encode_input.sh 编码
  5. 【第 2 步】DescribeEnvironments → 若多个环境,追问选择
  6. 【第 3 步】查阅 omics-api-reference.md → tccli_runner.sh 执行 RunApplication
  7. 【第 4 步】回复执行结果
  8. 【第 5 步】提示:"任务已投递!批次 ID: run-xxx。你可以随时问我查看进度。"

场景 2:用户说"帮我导入 scBERT 并运行"

  1. 【第 1 步】识别意图 → ImportCommonApplication + RunApplication
  2. 【第 2 步】DescribePublicApplications → 匹配 scBERT,获取 UUID
  3. 【第 2 步】DescribeProjects → 若多个项目,追问选择
  4. 【第 3 步】执行 ImportCommonApplication → 获取 ApplicationId
  5. 【第 2 步】DescribeEnvironments → 若多个环境,追问选择
  6. 【第 3 步】执行 RunApplication
  7. 【第 5 步】提示:"scBERT 已导入并投递运行!批次 ID: run-xxx。你可以随时问我查看进度。"

场景 3:用户说"重跑 run-xxx"

  1. 【第 1 步】识别意图 → 重跑任务(任务已结束即可,不限终态)
  2. 【第 2 步】用户提供 RunGroupId → 若未提供 ProjectId,追问
  3. 【第 3 步】执行 RetryRuns(ProjectId, RunGroupId)
  4. 【第 4 步】若成功 → 【第 5 步】提示:"已发起重跑!新批次 ID: run-yyy。你可以随时问我查看进度。"
  5. 【第 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. 【第 1 步】识别意图 → DescribeRunGroups
  2. 【第 2 步】检查上下文是否有 ProjectId
  3. 【第 3 步】执行 DescribeRunGroups
  4. 【第 4 步】回复:"最近 5 个任务:✅ 完成 3 | ❌ 失败 1 | 🔄 运行中 1。失败的是 run-xxx,需要重试吗?"

场景 5:用户说"下载 run-xxx 的日志"

  1. 【第 1 步】识别意图 → GetRunMetadataFile(需先 DescribeRuns 获取 RunUuid)
  2. 【第 2 步】DescribeRuns 获取批次下的 RunUuid
  3. 【第 3 步】执行 GetRunMetadataFile
  4. 【第 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 输入编码 |