SuperAPI AI 工具集

shopify-admin-agentic-metafields-setup

营销与增长

查看项目

更新于 10-15 10:44

技能介绍

用途

AI 智能体通过结构化属性来回答受限查询,例如“60 美元以下的防深蹲走光紧身裤”“桉树材质一脚蹬”“可机洗羊毛”。如果这些属性只存在于商品描述文本中(或根本不存在),智能体就无法进行筛选,商品会从结果集中掉出。本技能建立一套小而标准的智能体元字段定义(材质、关键特性、护理、合身度、规格),并从现有商品信号中推断并填充到整个商品目录,使智能体能够将商品与需求匹配。它修复了商品列表元字段、变体元数据和结构化尺码规格等问题。

前置条件

  • 已认证的 Shopify CLI 会话(shopify auth login --store <domain>)
  • 所需 API 权限范围:read_products、write_products、read_metaobject_definitions、write_metaobject_definitions(用于定义)

参数

所有技能都接受以下通用参数:

参数 类型 必填 默认值 说明
store string 是 — 店铺域名(例如 mystore.myshopify.com)
format string 否 human 输出格式:human(默认)或 json
dry_run bool 否 false 预览变更而不实际执行

技能专属参数:

参数 类型 必填 默认值 说明
namespace string 否 agentic 要创建/填充的元字段命名空间
keys string 否 material,features,care,fit,specs 需确保存在的元字段键的逗号列表
collection_id string 否 — 将填充范围限制到某个集合 GID
tag string 否 — 将填充范围限制到某个商品标签
populate_from string 否 tags,options,description 用于推断值的来源(不得超出这些来源进行编造)

安全性

⚠️ 第 2 步(metafieldDefinitionCreate)和第 4 步(metafieldsSet)会写入店铺架构和商品数据。添加定义成本低,但如果命名空间错误会弄乱后台;从推断写入的值可能出错。请运行 dry_run: true,审查建议的定义和值预览,只填充高置信度推断出的值——其余留空供人工填写。

工作流步骤

  1. OPERATION: metafieldDefinitions — 查询

    • 输入:ownerType: PRODUCT, namespace: <namespace>
    • 预期输出:哪些目标键已有定义(跳过这些)。
  2. OPERATION: metafieldDefinitionCreate — 变更

    • 输入:每个缺失的键一条:{ namespace, key, name, ownerType: PRODUCT, type: "single_line_text_field" | "list.single_line_text_field" }
    • 预期输出:已创建的定义;收集 userErrors(例如已被占用)。
  3. OPERATION: products — 查询

    • 输入:first: 250,可选 filter;字段 tags、options、descriptionHtml、existing metafields(namespace);分页。
    • 预期输出:商品 + 用于推断属性值的信号。
  4. OPERATION: metafieldsSet — 变更

    • 输入:批量 { ownerId, namespace, key, value, type },针对高置信度推断且当前为空的值。
    • 预期输出:设置元字段;收集 userErrors。

GraphQL 操作

# metafieldDefinitions:query — validated against api_version 2025-01
query AgenticMetafieldDefs($namespace: String!) {
  metafieldDefinitions(first: 50, ownerType: PRODUCT, namespace: $namespace) {
    edges { node { id namespace key name type { name } } }
  }
}

# metafieldDefinitionCreate:mutation — validated against api_version 2025-01
mutation AgenticMetafieldDefCreate($definition: MetafieldDefinitionInput!) {
  metafieldDefinitionCreate(definition: $definition) {
    createdDefinition { id namespace key }
    userErrors { field message code }
  }
}

# products:query — validated against api_version 2025-01
query AgenticMetafieldProducts($first: Int!, $after: String, $query: String, $namespace: String!) {
  products(first: $first, after: $after, query: $query) {
    edges {
      node {
        id
        title
        tags
        options { name values }
        descriptionHtml
        metafields(first: 20, namespace: $namespace) {
          edges { node { key value } }
        }
      }
    }
    pageInfo { hasNextPage endCursor }
  }
}

# metafieldsSet:mutation — validated against api_version 2025-01
mutation AgenticMetafieldsSet($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields { id namespace key }
    userErrors { field message code }
  }
}

会话跟踪

Claude 必须在每个阶段输出以下内容。这是强制性的。

开始时输出:

╔══════════════════════════════════════════════╗
║  SKILL: <skill name>                         ║
║  Store: <store domain>                       ║
║  Started: <YYYY-MM-DD HH:MM UTC>             ║
╚══════════════════════════════════════════════╝

每一步之后输出:

[N/TOTAL] <QUERY|MUTATION>  <OperationName>
          → Params: <brief summary of key inputs>
          → Result: <count or outcome>

如果 dry_run: true,则在每个变更步骤前加 [DRY RUN] 前缀,并且不执行它。

完成时输出:

对于 format: human(默认):

══════════════════════════════════════════════
OUTCOME SUMMARY
  <Metric label>:   <value>
  Errors:           0
  Output:           <filename or "none">
══════════════════════════════════════════════

对于 format: json,输出:

{
  "skill": "<skill-slug>",
  "store": "<domain>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": false,
  "steps": [
    {
      "step": 1,
      "operation": "<OperationName>",
      "type": "query",
      "params_summary": "<string>",
      "result_summary": "<string>",
      "skipped": false
    }
  ],
  "outcome": {
    "metric_key": 0,
    "errors": 0,
    "output_file": null
  }
}

输出格式

  • human:已创建的定义 + 已填充值的 CSV(商品、键、值、来源)。
  • json:{ definitions_created, metafields_set, products_touched, errors, output_file }。

错误处理

错误 原因 恢复方式
THROTTLED API 速率限制 等待 2 秒,最多重试 3 次
TAKEN on definition 键已在别处定义 复用现有定义,继续填充
userErrors on set 类型不匹配(例如列表 vs 单值) 将值强制转换为定义的类型,重试一次,否则跳过

最佳实践

  • 保持命名空间小而标准(agentic),键集合紧凑——智能体和店面筛选器都能从一致性中受益。
  • 只写入能从真实信号中高置信度推断的值;错误的“material: leather”会误导每一个智能体。低置信度字段留空。
  • 对多值属性(特性、材质)使用 list.single_line_text_field,以便筛选器作为 OR 集合工作。
  • 随后使用 shopify-admin-agentic-description-enrichment,使描述文本与结构化数据保持一致。