写点什么

写好的 Skill 如何让整个团队复用?Snowflake CoCo 打通共享与治理流程 | 技术实践

  • 2026-11-01
    北京
  • 本文字数:4907 字

    阅读完需:约 16 分钟

AI摘要

Snowflake 推出 Cortex Extension 原生 SQL 对象,将本地 SKILL.md 技能升级为账户级可共享、可治理、支持版本控制的标准化资产。该功能处于预览阶段,依托 SQL 接口实现技能发布、发现、认证与复用闭环。

支持技能版本管理与权限分级认证;通过 SQL 原生接口完成全生命周期操作;技能以可链接、可浏览的目录形式实现跨团队复用。

适合数据工程师、AI 平台工程师、企业级 Snowflake 管理员阅读。

2026 年,智能体将在企业级应用中取得哪些实质性突破?点击下载《2026 年 AI 与数据发展预测》白皮书,获悉专家一手前瞻,抢先拥抱新的工作方式!

如果你使用过 CoCo(Snowflake 的智能体 AI 助手,原名 Cortex Code),那么你可能已经创建过一两个 SKILL.md 文件。这类文件就像一份可复用的操作指南,能够教会智能体如何完成特定且可重复的任务,例如核对 Snowflake 成本报告,或生成每周高管业务指标摘要。然而,一直以来,维护这些技能并将其分享给更广泛的团队都相当繁琐。如今,这一情况终于有了改变。

Snowflake 最近通过推出技能与插件共享功能,填补了这一空白。这项目前处于预览阶段的功能,可以将本地技能转化为账户范围内可共享、可治理、支持版本管理的对象,其底层依托一种名为 Cortex Extension(Cortex 扩展)的原生 SQL 对象。用户可以通过链接分享技能,浏览其他人共享的技能目录;如果拥有管理员权限,还可以对优质技能进行认证,使其显示可信认证标识。

本文将介绍技能的完整生命周期:如何编写、共享、发现和认证技能,并展示每一步背后实际执行的 SQL 代码。这样,你不仅可以了解整个过程的运作机制,还可以根据需要自行编写脚本实现这些操作。

什么是技能(Skill)和插件(Plugin)

技能是一份采用 Markdown 格式编写的操作指南,即 SKILL.md 文件。文件开头包含简短的元数据说明,例如名称、描述以及触发 CoCo 加载该技能的条件,正文则逐步指导智能体完成特定工作流程。创建技能不需要编写代码,但技能可以引用需要 CoCo 执行的脚本。

CoCo 内置了大量技能,涵盖数据治理审计、动态表故障排查、成本分析,以及 Cortex Agent 配置等场景。这些技能由 Snowflake 编写和维护,随产品进行版本管理,并自动提供给所有用户。

本文真正关注的是用户自行创建的技能。这些技能只有在用户编写后才会存在。与内置技能不同,它们需要一种有效的分发机制。

那么,什么样的任务适合封装为用户自定义技能?可以参考以下几个判断标准:

  • 你已经重复执行过两次以上。 例如,诊断计算资源消耗突然增长的原因、排查停滞的动态表数据处理管道,或核对月度资源消耗报告。只要某项任务具有足够的重复性,甚至已经让你在脑海中形成了一套固定处理流程,就值得考虑将其封装为技能;

  • 执行过程需要判断,而不只是运行一条查询。 如果任务完全可以通过固定的 SQL 查询完成,那么保存的工作表或视图就足以胜任。技能真正发挥价值的场景,是工作流程中存在条件分支,例如“如果出现 X,就继续检查 Y;如果 Y 没有问题,再检查 Z”。这类流程通常需要你向新员工解释具体的判断逻辑;

  • 它能够沉淀团队内部的隐性知识。 例如,团队采用的命名规范、哪个仪表板才是权威数据来源,或记录在便签上的业务规则。这些知识目前可能只存在于某个人的脑海中,或者散落在一段日后难以查找的 Slack 对话里。

插件是新版“技能与插件目录”(Skills & Plugins Catalog)支持的另一种对象类型。

插件本质上是一个目录,其中包含隐藏的 .cortex-plugin/plugin.json 清单文件。它可以将多个技能与其他 CoCo 扩展能力(包括钩子(Hooks)、MCP 服务器和自定义智能体)打包成一个支持版本管理、可安装的独立单元。

如果你的目标不只是教会智能体执行某一项工作流程,而是希望封装一套更完整的能力,就可以考虑创建插件。例如,将多个相关技能与生命周期自动化能力(如 Hooks),或通过 MCP 服务器提供的外部工具和数据连接整合在一起。

理解其运行机制:三个层次

在开始具体操作之前,我们需要先区分三个容易混淆的概念:

  • 本地技能(Local Skill): 本质上只是一个包含 SKILL.md 文件的文件夹。它可以存放在任意指定位置,例如项目目录、用户主目录或 Snowflake 工作区;

  • Cortex 扩展(Cortex Extension): 共享技能时在 Snowflake 中创建的对象。每个共享技能或插件对应一个扩展对象,支持版本管理、基于角色的访问控制(RBAC)权限授予,以及可发现性设置;

  • 认证(Certification): 由管理员针对扩展对象的特定版本授予的可信认证标识,表示“这是经过认可的版本”。认证与共享并不是一回事。共享可以由用户自行完成,而认证属于治理流程。

下文介绍的所有操作,都可以归入这三个层次之一。

第一步:编写技能

假设你已经花费不少精力解决了一个复杂问题。在这个过程中,你使用的是 Snowsight 中的 CoCo,整个探索和交流过程都保存在 CoCo 聊天记录中。为了让 CoCo 下次只需少量指令就能重复执行相同的步骤,你可以直接通过自然语言要求它创建一个技能,也可以点击“创建技能”(Create Skill)按钮。

CoCo 随后会调用技能创建工作流程,并生成相应的 SKILL.md 文件。

技能的存储位置决定了它的作用范围:

  • 在 Snowsight 中: CoCo 会直接将技能写入 Snowflake 工作区,路径为 .snowflake/cortex/skills//SKILL.md。

  • 在 CoCo Desktop 或 CoCo CLI 中: 将技能存放在项目根目录下的 .cortex/skills//(类似于 .git),意味着该技能仅适用于当前项目;将其存放在 $HOME/.snowflake/cortex/skills//,则可以让本机上的所有项目使用该技能。

无论存放在哪里,此时的技能都完全处于本地状态。对于 Snowflake 而言,它还不是任何形式的数据库对象,只是 CoCo 从本地磁盘或工作区暂存区域读取的一个文件。

第二步:共享技能(创建 Cortex 扩展)

过去,要让其他人使用自己创建的技能,通常需要采用各种变通方法。

现在,你只需向 CoCo 发出“共享这个技能”(share this skill)的指令,系统就会执行以下操作:

1. 为共享技能创建存储位置

CoCo 首先会在你的个人数据库中查找或创建用于存放共享技能的位置。

每位用户都有一个隐式创建的 USER$ 数据库。首次共享技能时,CoCo 会在其中创建一个 SKILL_SHARING Schema,并向 PUBLIC 角色授予使用权限,使其他用户能够访问该对象。

CREATE SCHEMA IF NOT EXISTS "USER$DARIA"."SKILL_SHARING"  COMMENT = $$Skill catalog schema auto-created by system$$;GRANT USAGE ON DATABASE "USER$DARIA" TO ROLE PUBLIC;GRANT USAGE ON SCHEMA "USER$DARIA"."SKILL_SHARING" TO ROLE PUBLIC;
复制代码

2. 暂存技能文件并创建 Cortex 扩展

接下来,CoCo 会暂存技能文件并创建 Cortex 扩展。

具体来说,系统会创建一个临时 Stage,将 SKILL.md 文件上传到其中,然后直接基于该 Stage 创建扩展对象。

扩展对象的名称来自 SKILL.md 文件头部元数据中的 name 字段。例如,warehouse-cost-triage 会被转换为 WAREHOUSE_COST_TRIAGE。

扩展创建完成后,临时 Stage 会立即被清理。

CREATE OR REPLACE TEMPORARY STAGE  "USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467";PUT file:///workspace/.snowflake/cortex/skills/warehouse-cost-triage/SKILL.md  @"USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467"/skills/warehouse-cost-triage/  AUTO_COMPRESS = FALSE OVERWRITE = TRUE;CREATE CORTEX EXTENSION "USER$DARIA"."SKILL_SHARING"."WAREHOUSE_COST_TRIAGE"  FROM @"USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467"  VERSION V1  COMMENT = 'Diagnose a spike in warehouse credit spend...';DROP STAGE IF EXISTS  "USER$DARIA"."SKILL_SHARING"."COCO_SYNC_1788898908467";
复制代码

之后,如果你再次共享该技能(即提交更新后的 SKILL.md 文件),CoCo 会重新执行共享流程,上传新文件并自动递增版本号,依次生成 VERSION$2、VERSION$3 等版本。

3. 授予读取权限,使其他用户能够安装

GRANT READ ON CORTEX EXTENSION  "USER$DARIA"."SKILL_SHARING"."WAREHOUSE_COST_TRIAGE"  TO ROLE "PUBLIC";
复制代码

将 READ 权限授予 PUBLIC 角色,意味着账户中的所有用户都可以安装该技能。

扩展对象的 DISCOVERABLE 属性默认设置为 TRUE,因此,用户浏览技能目录时也能看到它。

如果你希望采用“仅通过共享链接访问”的方式,即允许其他用户安装,但不希望技能出现在可浏览的目录中,可以显式设置 DISCOVERABLE = FALSE。

第三步:发现技能

完成共享后,其他用户可以通过两种方式发现技能。

方式一:获取并分享链接

使用 DESCRIBE CORTEX EXTENSION 命令,可以获取一个 snow://skill_catalog/... 格式的 URI,随后将其分享给团队成员。

snow://skill_catalog/USER$DARIA.SKILL_SHARING.WAREHOUSE_COST_TRIAGE
复制代码

方式二:浏览技能目录

在 Snowsight 中,进入“AI 与机器学习”(AI & ML)→“技能与插件”(Skills & Plugins)。

点击技能旁边的“使用”(USE)按钮,就可以将该技能添加到当前聊天会话中并执行。

在 CoCo Desktop 中,也可以通过共享链接安装技能。具体路径为:

“设置”(Settings)→“+”菜单→“从技能目录添加”(Add from Skills Catalog)。

第四步:认证技能

认证可以将一个“团队成员上传的技能”升级为“获得官方认可的版本”。

通过认证的技能,会在技能目录中的各个展示位置显示绿色认证标识。

认证技能需要具备 ACCOUNTADMIN 权限。

在 Snowsight 中,进入“AI 与机器学习”(AI & ML)→“技能与插件”(Skills and Plugins),选择目标技能,然后点击“添加认证”(Add certification)。

同一页面还提供其他治理操作,例如基于角色的访问控制(RBAC)、所有权转移和删除。这些操作在底层均由 ALTER CORTEX EXTENSION 相关命令支持。

管理员对共享技能进行认证时,系统会执行两项操作。

1. 将技能纳入集中治理

Snowflake 会将 Cortex 扩展从创建者的个人数据库复制到一个专门用于集中治理的数据库中。首次执行任何治理操作时,系统会提示管理员选择目标数据库。原作者保存在 SKILL_SHARING Schema 中的扩展对象不会受到影响,因为这一过程是复制,而不是移动。

CREATE CORTEX EXTENSION governed_db.governed_schema.WAREHOUSE_COST_TRIAGE  FROM 'snow://skill_catalog/USER$DARIA.SKILL_SHARING.WAREHOUSE_COST_TRIAGE';GRANT READ ON CORTEX EXTENSION governed_db.governed_schema.WAREHOUSE_COST_TRIAGE  TO ROLE PUBLIC;
复制代码

2. 针对特定版本进行认证

管理员会将指定版本标记为已认证:

ALTER CORTEX EXTENSION governed_db.governed_schema.WAREHOUSE_COST_TRIAGE VERSION VERSION$1 SET TAG SNOWFLAKE.CORE.CERTIFICATION_STATUS = 'CERTIFIED';
复制代码

认证针对的是特定版本,而不是整个扩展对象。如果一个 snow://skill_catalog/... 链接没有指定版本号,那么只要存在已认证版本,该链接就会解析到最新的已认证版本。只有当不存在任何已认证版本时,才会回退到最新版本。这意味着,即使原作者继续提交 VERSION$2 和 VERSION$3,使用者也不会受到影响。已认证的链接仍然指向 VERSION$1,直到管理员完成新版本的审核和认证。

这才是此次功能更新带来的真正变化。认证不再只是一次性的标签,而是一个持续进行的版本管理决策:由管理员独立判断哪个版本可以用于生产环境,而不受原作者当前迭代进度的影响。

如果你计划在团队中推广这项功能,还有几点值得注意:

  • 提前创建集中治理数据库。 最好事先确定用于存放已认证技能的数据库,而不是等到第一次执行认证操作时,才临时选择存储位置;

  • 目前尚不支持安全扫描。 该功能仍处于预览阶段,暂时无法对共享技能和插件进行内容安全扫描。因此,认证意味着对作者及其提交内容的信任,并不代表系统已经自动完成内容安全检查。管理员仍需认真审核准备认证的技能。

从更宏观的角度来看,这一领域的发展速度值得关注。一年前,我们当中可能还很少有人知道什么是 Skill。如今,它已经成为 Snowflake 中一种支持治理、版本管理、基于角色的访问控制(RBAC),并拥有独立认证流程的对象。随着越来越多的日常工作交由智能体执行,围绕智能体构建的工具体系——包括技能、插件以及承载它们的目录——正在逐渐成为真正的基础设施,而不再只是提升使用便利性的辅助功能。对这一层基础设施的治理,应当像生产系统的访问控制一样,被视为一项基础性工作,而不是等到出现问题后才考虑的补充措施。

原文地址:https://medium.com/snowflake/sharing-and-governing-skills-in-snowflake-coco-f45a2d57462d

点击链接立即报名注册:https://www.snowflake.com/events/snowflake-ascent-china/更多 Snowflake 精彩活动请关注专区