mcpField
M
mongodb-search-and-ai

mongodb-search-and-ai

github.com/mongodb数据与数据库1925.9k 次安装1 周前更新
代码仓库

关于 mongodb-search-and-ai

mongodb-search-and-ai 是供 MongoDB 用户设计和排查 Atlas Search 与 AI 搜索工作流的技能。它引导用户检查架构和索引、选择词法、向量、自动嵌入或混合搜索,并在获批后实施。

主要功能

  1. 01检查架构、索引和集群版本
  2. 02按使用场景选择搜索方式
  3. 03参考索引与查询指南
  4. 04创建索引前征求批准
  5. 05验证聚合查询

适用场景

  1. 01为现有集合设计搜索
  2. 02比较词法、语义和混合搜索
  3. 03排查索引或查询问题
  4. 04通过示例数据学习搜索

安装

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

$npx skills add https://github.com/mongodb/agent-skills --skill mongodb-search-and-ai

安装后在 Claude Code 中输入/mongodb-search-and-ai确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
automated-embedding.md
hybrid-search.md
lexical-search-indexing.md
lexical-search-querying.md
quick-start.md
vector-search.md
scripts/
quickstart_complete.py

详细介绍

MongoDB 搜索与 AI 推荐技能

你正在帮助 MongoDB 用户实现、优化和排查 Atlas Search(词法搜索)、Vector Search(语义搜索)和 Hybrid Search(混合搜索)解决方案。

核心原则

  1. 先了解,再构建——验证使用场景,确保推荐合适的解决方案
  2. 始终先检查——提出建议前,检查现有索引和架构
  3. 执行前先说明——描述将创建哪些索引,并征得明确批准
  4. 处理只读场景——如果没有 create、update 或 delete 操作工具,你就处于只读模式;将索引 JSON 提供给用户,由用户自行创建
  5. 用通俗易懂的语言说明——描述技术概念,并将业务需求对应到用户易于理解的技术实现

工作流

0. 检查用户是否请求快速入门

references/quick-start.md 是一个引导式演示,将针对 sample_mflix 示例数据集构建语义搜索、关键词搜索和混合搜索。它是教学演示,不是为用户自己的数据构建搜索的方式。

只有在用户选择演示后,才能阅读 references/quick-start.md。 像“我刚接触搜索,帮我入门”这样的普通请求,也可能意味着“帮我把搜索添加到我的应用中”。请使用 AskUserQuestion:

“我可以通过两种方式帮助你——哪种更适合你?”

  • 使用示例数据进行引导式演示——我们会加载 Atlas 的示例电影数据集,并逐步在其中构建语义搜索、关键词搜索和混合搜索。最适合了解每种类型的工作方式。
  • 为我自己的数据构建搜索——告诉我你要搜索什么,我会为你的集合设计索引和查询。

以下提示应触发此选项,而不是直接回答问题:

  • “我刚接触 MongoDB,搜索是如何工作的?”,“帮我开始使用搜索”
  • “Atlas Search 和 Vector Search 有什么区别?”,“我应该使用哪种搜索类型?”
  • “我想试试向量搜索”,“给我展示语义搜索”,“自动嵌入是如何工作的?”
  • “我想试试关键词搜索”,“给我展示全文搜索”,“我想试试混合搜索”

仅在用户意图已经明确时跳过此选项:

  • 明确请求演示(“给我做一个引导式演示”,“带我用示例数据了解搜索”)——加载 references/quick-start.md,并从其中的步骤 0 开始。
  • 用户有自己的集合、数据或具体使用场景——使用下文的发现阶段,即使用户只提到一种搜索类型也一样。

如果用户提到了特定搜索类型,请在演示中沿用该类型:跳过演示中的类型选择问题,在完成前置步骤后直接进入对应路径。

此演示需要 Atlas 云集群——示例数据集通过 Atlas UI 加载,自动嵌入功能适用于所有 Atlas 层级,且无需管理密钥。如果某个步骤显示用户使用的是 Atlas Local 或自行管理的 MongoDB,则不在演示范围内,演示会引导用户返回此处。

否则,继续进行发现阶段。

1. 探索阶段

检查环境:

  • 使用 list-databases 和 list-collections 了解可用数据
  • 如果用户提到了某个集合,使用 collection-schema 检查字段结构
  • 使用 collection-indexes 查看现有索引
  • 使用 atlas-inspect-cluster 确定集群的 MongoDB 版本

了解使用场景: 如果用户的请求含糊不清:

  • 询问澄清问题,了解他们的需求
  • 根据架构推断可能涉及的集合和字段
  • 在继续之前确认理解是否正确

常见问题:

  • 用户想搜索什么?(产品、电影、文档等)
  • 哪些字段包含可搜索的内容?
  • 他们是按自由文本搜索,还是按与现有项目的相似度搜索(例如“给定电影 A,查找类似的电影”)?
  • 他们需要精确匹配、模糊匹配还是语义相似度?
  • 他们需要筛选条件吗(价格范围、类别、日期)?
  • 他们需要自动补全/即时搜索功能吗?
  • 他们已经生成了向量嵌入,还是希望 MongoDB 自动处理?
2. 确定搜索类型并查阅参考文件

将使用场景与以下搜索类型匹配,然后在推荐索引或查询之前查阅链接的参考文件。每个参考文件还会说明必须先确认的前提条件(集群层级、MongoDB 版本、部署类型、自动扩缩容)。

Atlas Search(词法/全文搜索): 适用于用户需要:

  • 通过关键词匹配并按相关性评分
  • 模糊匹配以容忍拼写错误
  • 自动补全/即时搜索
  • 带筛选条件的分面搜索
  • 特定语言的文本分析
  • 基于词元的搜索
  • 使用视图进行词法搜索

→ 查阅 references/lexical-search-indexing.md(索引)和 references/lexical-search-querying.md(查询)。

自动嵌入(语义搜索,无需编写嵌入代码): 适用于用户需要:

  • 无需编写嵌入代码的语义/向量搜索
  • 没有现有的向量处理流程或嵌入基础设施
  • 快速设置:MongoDB 使用 Voyage AI 模型自动生成和管理嵌入
  • 在 Atlas 中已存储文本数据,希望按含义搜索
  • 以最少的设置实现 RAG 或 AI Agent 记忆

→ 查阅 references/automated-embedding.md。

Vector Search(语义搜索,使用自有嵌入): 适用于用户需要:

  • 使用自己预先生成的嵌入进行语义相似度搜索
  • 使用 Voyage AI 未提供的特定嵌入模型
  • 图像、音频或多模态嵌入(自动嵌入仅支持文本)
  • 未配置 Voyage AI API 密钥的自托管 MongoDB
  • 使用视图进行向量搜索

→ 查阅 references/vector-search.md。

混合搜索: 适用于用户需要:

  • 组合多种搜索方式(例如向量搜索 + 词法搜索、多次文本搜索)
  • 类似“查找与‘史诗般的太空战斗’相似的动作电影”的查询(将关键词筛选与语义相似度结合)
  • 综合多个相关性标准的结果
  • 使用 $rankFusion(基于排名)或 $scoreFusion(基于评分)合并处理流程

→ 查阅 references/hybrid-search.md,以及包含各个处理阶段的词法搜索/向量搜索参考文件。

3. 执行与验证

创建索引:

  1. 用通俗语言说明索引配置
  2. 展示 JSON 结构
  3. 询问用户希望如何命名索引
  4. 明确征求批准:“要我创建此索引吗?”
  5. 获得批准后,使用 MCP 的 create-index 工具
  6. 在只读模式下,提供完整的索引 JSON,供用户通过 Atlas UI 创建

运行查询:

  1. 展示聚合管道
  2. 使用 MCP 的 aggregate 工具执行
  3. 清晰地呈现结果

优化现有查询:

  1. 请用户分享当前查询
  2. 对照相关参考文件中的查询模式和最佳实践
  3. 提出具体改进建议,并提供改进前后的示例
  4. 使用 aggregate 运行修改后的查询,以验证结果

应避免的反模式

绝不要为搜索场景推荐 $regex 或 $text。 两者都缺少搜索工作负载所需的相关性评分、模糊匹配和感知语言的分词。如果用户询问其中任何一种,请说明为什么 Atlas Search 更合适,并展示等效用法。

处理边缘情况

  • 找不到字段 — 使用 collection-schema 检查可用字段,然后向用户确认预期字段
  • 必需字段不存在 — 说明需要添加什么字段以及如何添加(例如,用于向量搜索的嵌入字段)
  • 查询失败或索引缺失 — 使用 collection-indexes 验证;如果索引不存在,必须先创建索引
  • 涉及多个集合 — 询问用户指的是哪个集合,除非上下文已明确说明

评论

支持 Markdown