mcpField
S
searching-media

searching-media

github.com/forcedotcom创意与媒体1.1k3.6k 次安装1 天前更新
代码仓库

关于 searching-media

用于从已配置来源查找和获取现有图像及媒体的路由技能。它要求用户先选择搜索来源,再选择结果;不负责生成或编辑媒体。

主要功能

  1. 01将搜索路由到可用媒体来源
  2. 02按关键词和分类词搜索
  3. 03支持 Data 360 混合搜索
  4. 04要求用户选择来源和结果
  5. 05处理用户提供的网址或路径

适用场景

  1. 01为应用查找现有图像
  2. 02在已连接的媒体库中搜索视觉素材
  3. 03定位特定照片或图形

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/forcedotcom/sf-skills --skill searching-media

安装后在 Claude Code 中输入/searching-media确认已加载。

详细介绍

媒体搜索

用于搜索和检索现有图像与媒体的通用路由技能。

范围

此技能用于搜索现有媒体,而非创建新媒体。

用户希望执行以下操作时,请使用此技能:

  • 在 Salesforce CMS、Data Cloud 中搜索图像
  • 查找可用于其应用的现有视觉素材
  • 从已连接的来源检索媒体
  • 浏览项目可用的图像
  • 查找特定照片或图形

用户希望执行以下操作时,请勿使用此技能:

  • 使用 AI 生成新图像(请使用图像生成工具)
  • 从零开始创建图形或设计
  • 编辑或修改现有图像
  • 构建自定义视觉内容或示意图

搜索前须知

重要:这是一项路由技能,而非直接搜索技能。

用户请求查找图像时:

你必须首先使用 ask_followup_question 工具,向用户提供搜索来源选项。

  1. 使用 ask_followup_question 提供可用搜索来源选项
  2. 从工具响应中接收用户的选择
  3. 然后根据用户的选择调用相应的搜索工具

错误做法示例:

  • ❌ 用户选择来源前调用任何工具(MCP 工具、读取文件、检查描述符等)
  • ❌ “检查有哪些 MCP 工具可用”——不要通过工具调用探查或发现工具
  • ❌ 立即调用 search_electronic_media 或 search_media_cms_channels
  • ❌ 读取 MCP 工具描述符或架构来了解可用内容
  • ❌ 不询问用户就决定使用哪个搜索来源

正确做法示例:

  • ✅ 仅以文本回复——列出带编号的搜索来源
  • ✅ 询问:“你想使用哪个选项?”
  • ✅ 等待用户回复其选择
  • ✅ 然后(仅在此之后)调用用户选择的工具

触发此技能时,你的第一条回复必须是仅包含文本、用于展示搜索来源的消息。不得调用工具。没有例外。

工作流概览

用户必须选择搜索来源。你不能跳过此步骤。

复制此清单并跟踪进度:

Media Search Progress:
- [ ] Step 1: Check your own tool list for available search tools (no tool calls — just inspect what's in your context)
- [ ] Step 2: Present only the available options to the user as a numbered list (plain text, no tool calls)
- [ ] Step 3: Wait for the user to reply with their selection
- [ ] Step 4: Execute the selected search method (this is the first tool call)
- [ ] Step 5: Present all results to user for selection
- [ ] Step 6: Apply selected image to code

如果在第 4 步之前调用了任何工具,就说明你没有正确遵循此技能。

展示搜索来源(首次回复)

不要调用任何工具、读取任何 MCP 描述符,也不要发出任何外部请求来确定可用工具。

你已在上下文中加载了所需工具。查看你当前可用的工具名称——这是自省,不是工具调用。

第 1 步:检查自己的工具列表(不调用工具)

查看上下文中已有的工具,并检查是否包含以下名称:

  • search_media_cms_channels → 如果存在,请加入**“使用关键词搜索”**
  • search_electronic_media → 如果存在,请加入**“使用 Data 360 混合搜索”**
  • 始终将**“其他”**作为最后一个选项

第 2 步:构建回复

仅包含你实际拥有对应工具的来源,并按顺序编号。

I can help you find that image. Where would you like to search?

[NUMBER]. [SEARCH SOURCE NAME] — [Brief description]
...
[NUMBER]. Other — Provide your own URL or path

Which option would you like to use?

第 3 步:停止并等待

展示列表后,立即停止。不要调用任何工具。不要继续操作。等待用户回复其选择。

示例

两个工具均可用:

I can help you find that image. Where would you like to search?

1. Search using Data 360 hybrid search — Semantic search across Salesforce CMS and connected DAMs
2. Search using keywords — Search Salesforce CMS by keywords and taxonomies
3. Other — Provide your own URL or path

Which option would you like to use?

仅 search_media_cms_channels 可用:

I can help you find that image. Where would you like to search?

1. Search using keywords — Search Salesforce CMS by keywords and taxonomies
2. Other — Provide your own URL or path

Which option would you like to use?

仅 search_electronic_media 可用:

I can help you find that image. Where would you like to search?

1. Search using Data 360 hybrid search — Semantic search across Salesforce CMS and connected DAMs
2. Other — Provide your own URL or path

Which option would you like to use?

两个工具均不可用:

No automated media search sources are currently configured. Please provide a direct URL or asset library path.

请等待用户选择后再继续。

执行所选搜索方法

⚠️ 仅当用户明确选择了编号列表中的一个选项时,才可进入此步骤。

如果你尚未展示选项,请先返回“展示搜索来源”部分。

用户选择选项后,执行下方相应的搜索方法。

使用关键词搜索

工具: search_media_cms_channels

流程:

  1. 分析查询 — 理解用户搜索的内容(主题、属性、领域)

  2. 提取关键词 — 提取可能出现在图像元数据中的具体名词

    • 使用特定领域的同义词
    • 最多 10 个词
    • 示例:
      • “豪华公寓” → apartment, villa, penthouse, residence, condo
      • “公司徽标” → logo, emblem, corporate logo
      • “明亮的房间” → (如果没有具体名词,则留空)
  3. 提取分类标签 — 描述性质、风格、氛围和类别

    • 仅使用形容词和属性
    • 示例:
      • “带河景的豪华公寓” → Luxury, Premium, Waterfront, Riverside, Panoramic
      • “明亮宽敞的房间” → Bright, Spacious, Open, Airy, Light
      • “汽车” → (如果没有描述性词语,则留空)
  4. 确定区域设置 — 使用 en_US、es_MX、fr_FR 格式(默认值:en_US)

  5. 构建 JSON 载荷 — 构造以下精确结构:

{
  "inputs": [{
    "searchKeyword": "keyword1 OR keyword2 OR keyword3",
    "taxonomyExpression": "{\"OR\": [\"Taxonomy1\", \"Taxonomy2\"]}",
    "searchLanguage": "en_US",
    "channelIds": "",
    "channelType": "PublicUnauthenticated",
    "contentTypeFqn": "sfdc_cms__image",
    "pageOffset": 0,
    "searchLimit": 5
  }]
}

字段规则:

  • searchKeyword:使用 OR(空格-OR-空格)连接关键词。没有关键词时使用空字符串。
  • taxonomyExpression:将 JSON 对象 {"OR": ["term1", "term2"]} 转换为字符串。没有分类标签时使用 "{}"。
  • searchLanguage:使用带下划线的区域设置(例如 en_US)
  • channelIds:始终为空字符串
  • channelType:始终为 "PublicUnauthenticated"
  • contentTypeFqn:始终为 "sfdc_cms__image"
  • pageOffset:从 0 开始分页,每次递增 searchLimit
  • searchLimit:默认值为 5,根据用户请求调整

示例:

查询:“带河景的豪华公寓”

{
  "inputs": [{
    "searchKeyword": "apartment OR villa OR penthouse OR residence",
    "taxonomyExpression": "{\"OR\": [\"Luxury\", \"Premium\", \"Waterfront\", \"Riverside\"]}",
    "searchLanguage": "en_US",
    "channelIds": "",
    "channelType": "PublicUnauthenticated",
    "contentTypeFqn": "sfdc_cms__image",
    "pageOffset": 0,
    "searchLimit": 5
  }]
}

查询:“明亮宽敞的房间”(没有具体名词)

{
  "inputs": [{
    "searchKeyword": "",
    "taxonomyExpression": "{\"OR\": [\"Bright\", \"Spacious\", \"Open\", \"Airy\"]}",
    "searchLanguage": "en_US",
    "channelIds": "",
    "channelType": "PublicUnauthenticated",
    "contentTypeFqn": "sfdc_cms__image",
    "pageOffset": 0,
    "searchLimit": 5
  }]
}

查询:“汽车图片”(没有描述性词语)

{
  "inputs": [{
    "searchKeyword": "car OR automobile OR vehicle OR auto",
    "taxonomyExpression": "{}",
    "searchLanguage": "en_US",
    "channelIds": "",
    "channelType": "PublicUnauthenticated",
    "contentTypeFqn": "sfdc_cms__image",
    "pageOffset": 0,
    "searchLimit": 5
  }]
}
  1. 使用精确的 JSON 载荷调用工具
使用 Data 360 混合搜索

工具: search_electronic_media

流程:

  1. 使用用户的查询原文 — 无需提取关键词或进行转换
  2. 调用 search_electronic_media
  3. 将查询传递给工具的 searchQuery 参数

示例:

  • 用户查询:“带自然光的现代豪华公寓”
  • 工具调用:search_electronic_media(searchQuery="modern luxury apartment with natural lighting")
其他(用户提供的 URL)

请用户提供:

  • 图像的直接 URL
  • 资源库路径
  • 要检查的具体系统或位置

显示搜索结果

你必须使用 ask_followup_question 工具,将搜索结果作为选项呈现。

  1. 解析工具响应 — 提取所有图像结果(标题和来源)
  2. 使用 ask_followup_question 将所有结果作为可选项呈现。仅显示图像标题 — 不要显示 URL。
  3. 接收用户的选择 — 从工具响应中获取
  4. 然后应用所选图像
I found 4 images. Which one would you like to use?

1. Luxury Apartment Exterior
   Source: Salesforce CMS

2. Modern High-Rise Building
   Source: Salesforce CMS

3. Waterfront Residence
   Source: Salesforce CMS

4. Premium Condominium
   Source: Salesforce CMS

绝不要自动选择图像。 始终等待用户选择。

应用所选图像

用户选择后:

  1. 确认所选图像及其名称和 URL
  2. 使用工具返回的完整 URL,包括所有查询参数。CMS 和 DAM URL 依赖查询参数进行身份验证、调整大小和 CDN 路由 — 删除这些参数会导致图像无法使用。例如,像 https://cms.example.com/media/img.jpg?oid=00D&refid=0EM&v=2 这样的 URL 必须完整使用。
  3. 将 URL 应用到用户的代码/组件中
  4. 显示所做的更改(文件路径和行号)

错误处理

错误响应
工具不可用“[来源名称]工具不可用。你想尝试其他来源吗?”
工具返回错误显示错误消息,并提供使用不同词语重试或选择其他来源的选项
未找到结果“未找到结果。请尝试使用更宽泛的关键词、删除描述性词语,或改用其他来源。”
用户选择无效重新显示选项并再次询问

绝不要悄无声息地失败。 始终告知用户并提供替代方案。

搜索行为说明

使用关键词搜索:

  • 关键词和分类体系均不为空 → 返回匹配关键词或(关键词 + 分类体系)的结果
  • 关键词为空 → 仅按分类体系搜索
  • 分类体系为空 → 仅按关键词搜索
  • 使用 pageOffset 进行分页(每次递增 searchLimit)

使用 Data 360 混合搜索:

  • 处理自然语言查询
  • 按语义相似度匹配
  • 搜索多个已连接系统中的内容

核心原则

  1. 首次响应始终仅包含文本 — 展示搜索来源,不调用任何工具
  2. 仅展示已配置的来源 — 检查自己的工具列表(通过内省,而非调用工具),仅展示你拥有相应工具的来源
  3. 等待用户选择 — 绝不自动选择来源或图片
  4. 展示所有结果 — 让用户选择最合适的结果
  5. 应用前先确认 — 修改代码前核实选择
  6. 妥善处理错误 — 提供清晰的反馈和替代方案

评论

支持 Markdown