AI搜索MCP:理论、实践与最佳案例解析

本文介绍了如何通过 MCP 协议让 LLM 高效调用外部工具,并结合实际场景展示了 AI 搜索 MCP 的应用和价值,如文件解析、向量检索和 Elasticsearch 智能检索等。

原文标题:从理论到应用:AI搜索MCP的最佳实践案例解析

原文作者:阿里云开发者

冷月清谈:

本文深入探讨了如何使用 MCP 协议赋能大语言模型(LLM)以高效调用外部工具,并通过具体案例展示了 MCP 在实际 AI 应用中的价值。文章首先指出了 LLM 在缺乏外部信息时无法回答特定问题(如“今天天气如何”)的局限性,进而引出让 LLM 学会使用工具的需求。MCP 旨在解决 Agent 与 Tools 之间的耦合问题,统一不同 Tools 的调用协议,并促进 Tools 的共享。文章详细介绍了 MCP 的架构,包括 MCP Hosts、MCP Clients 和 MCP Servers 等角色,并提供了使用 FastMCP 快速搭建 Demo 的示例,最后通过文件解析与总结、向量检索及排序、Elasticsearch 智能检索三个场景,展示了 AI 搜索如何利用 MCP 赋能LLM,并提供了详细的前置准备和配置步骤,以及各个场景的业务价值。

怜星夜思:

1、MCP 协议在实际应用中,除了文中提到的三个场景(文件解析、向量检索、ES检索),还能应用于哪些其他类型的 AI 搜索或 AI 增强型应用?例如,在金融、医疗、教育等领域,MCP 可能发挥什么作用?
2、文章中提到 MCP 能够统一不同 Tools 的调用协议,降低集成成本。那么,在推广 MCP 协议的过程中,最大的挑战可能是什么?如何解决这些挑战?
3、文章提到了 Agent + FunctionCall 的模式,以及 MCP 模式。这两种模式在实际应用中有什么区别?在什么情况下应该选择哪种模式?

原文内容

阿里妹导读


本文深入探讨了如何通过 MCP 协议让大语言模型(LLM)高效调用外部工具,并结合多个实际场景展示了 MCP 在 AI 应用中的价值和未来潜力。

背景

那些LLM不知道的事

开篇先尝试直接问LLM一个问题,“今天天气如何”。

然而,并未能从LLM获得期望回答。原因也很简单,今天是哪天?天气是哪里的天气?这些问题对于LLM来说统统不得而知。

因此,我们很自然地想到,是不是能让LLM自己学会用工具,哪里不会点哪里呢?

当LLM学会用工具

  • “让LLM自己学会用工具,来解答用户问题。”

上面这句话中,出现了三个角色,“用户”、“工具”、“LLM”,以及隐藏的第四个角色——将这一切粘合起来的“主控程序”。

关于四者的交互流程,我从百炼找了张图,供以参考:

MCP干嘛来了

  • 没有MCP,我要怎么做

按着Agent+FunctionCall的模式,我设计了工具schema,走通了LLM的服务调用,终于让LLM学会了用工具。但随着工具越来越多、工具调用与LLM耦合得越来越深,不管是维护还是迭代,都会消耗大量的精力。

那么,问题来了:

  • 能不能实现Agent与Tools的解耦?
  • 能不能能统一不同Tools的调用协议,让模型快速接入?
  • 能不能实现Tools的共享?

- 有了MCP,我会怎么做

现在有了MCP,一切都好起来了:

  • Agent和Tools,我可以分开维护了。
  • 再多的Tools,我用"list_tools"+"call_tool"就解决了。
  • 我可以分享自己的Tools,也可以快速接入别人的Tools了。

近距离看看MCP

MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.

MCP架构中的角色主要有以下几种:

  • MCP Hosts: 相当于上文提到的“主控程序”,比如Claude Desktop、IDE等。
  • MCP Clients: 服务调用的客户端,通常会被集成到Host中执行list_tools、call_tool等操作。
  • MCP Servers: 服务调用的服务端,通常在此定义tools、prompts、resources等。
  • Local Data Sources: 本地数据。
  • Remote Services: 远端服务。

ps:写了个mcp demo,就想让LLM告诉我,今天天气到底如何?

mcp = FastMCP("Demo")

@mcp.tool(
    name=“get_current_time”,
    description=“获取当前时间”,
)
def get_current_time():
    “”"
       获取当前时间并进行格式化展示
       :return:
    “”"
    now = datetime.datetime.now()
    formatted_time = now.strftime(“%Y-%m-%d %H:%M:%S”)
    return formatted_time

@mcp.tool(
    name=“get_location”,
    description=“获取当前地点”,
)
def get_location():
    “”"
       获取当前地点
       :return:
    “”"
    try:
        response = requests.get(“http://ip-api.com/json/”)
        data = response.json()

        if data[“status”] == “success”:
            location_info = {
                “country”: data.get(“country”, “”),
                “region”: data.get(“regionName”, “”),
                “city”: data.get(“city”, “”)
            }
            return json.dumps(location_info, ensure_ascii=False)
        else:
            return json.dumps({“error”: “无法获取地理位置”}, ensure_ascii=False)
    except Exception as e:
        return json.dumps({“error”: str(e)}, ensure_ascii=False)


AI搜索怎么玩MCP

场景一:文件解析与总结

1. 前置准备
1.1 注册 AI搜索平台[1],获取 api-key[2]
1.2 vscode + cline

1.3 cline配置llm接口

API Provider选择 OpenAI Compatible

Base URL设为

https://dashscope.aliyuncs.com/compatible-mode/v1

1.4 安装uv,管理python环境

curl -LsSf https://astral.sh/uv/install.sh | sh 或者 pip install uv

2. cline配置mcp server
2.1 下载 alibabacloud-opensearch-mcp-server[3]
2.2 配置mcp server
{
  "mcpServers": {
    "aisearch-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/aisearch-mcp-server",
        "run",
        "aisearch-mcp-server"
      ],
      "env": {
        "AISEARCH_API_KEY": "<AISEARCH_API_KEY>",
        "AISEARCH_ENDPOINT": "<AISEARCH_ENDPOINT>"
      }
    }
  }
}
3. 任务演示

此处为语雀视频卡片,点击链接查看:aisearch_mcp_demo.mp4

4. 业务价值
  • 降低接入成本,提升用户体验:支持用户通过标准化方式快速集成AI搜索平台的服务,降低了开发门槛和接入成本,同时提升了用户体验。
  • 提高系统灵活性:用户可根据业务需求灵活配置AI服务,适应多样化的业务需求。
  • 支持自然语言交互与智能化操作:用户可通过简单的自然语言指令进行智能化任务编排,完成复杂的任务执行。
  • 促进创新和业务增长:可通过MCP的标准化集成,进行快速试错与迭代,加速产品上线周期。

场景二:向量检索及排序

1. 前置准备

(新增)开通 opensearch向量检索版[4],构建一张向量表

(其他)同场景一

2. cline配置mcp server
2.1 下载 alibabacloud-opensearch-mcp-server
2.2 配置mcp server
{
  "mcpServers": {
    "aisearch-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/aisearch-mcp-server",
        "run",
        "aisearch-mcp-server"
      ],
      "env": {
        "AISEARCH_API_KEY": "<AISEARCH_API_KEY>",
        "AISEARCH_ENDPOINT": "<AISEARCH_ENDPOINT>"
      }
    },
    "opensearch-vector-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/opensearch-vector-mcp-server",
        "run",
        "opensearch-vector-mcp-server"
      ],
      "env": {
        "OPENSEARCH_VECTOR_ENDPOINT": "http://ha-cn-***.public.ha.aliyuncs.com",
        "OPENSEARCH_VECTOR_USERNAME": "<username>",
        "OPENSEARCH_VECTOR_PASSWORD": "<password>",
        "OPENSEARCH_VECTOR_INSTANCE_ID": "ha-cn-***",
        "OPENSEARCH_VECTOR_INDEX_NAME": "<Optional: index in vector table>",
        "AISEARCH_API_KEY": "<Optional: AISEARCH_API_KEY for embedding>",
        "AISEARCH_ENDPOINT": "<Optional: AISEARCH_ENDPOINT for embedding>"
      }
    }
  }
}
3. 任务演示

4. 业务价值

  • 扩展AI应用场景:增强Agent向量检索能力,支持动态扩展和无缝集成。
  • 优化用户体验:提供更精准的向量搜索服务,降低使用成本。

场景三:Elasticsearch智能检索

1. 前置准备

(新增)开通 Elasticsearch[5],创建一份索引并写入测试数据

(其他)同场景一

2. cline配置mcp server
2.1 参考 elasticsearch-mcp-server[6]
2.2 配置mcp server
{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@elastic/mcp-server-elasticsearch"
      ],
      "env": {
        "ES_URL": "http://es-cn-***.public.elasticsearch.aliyuncs.com:9200",
        "ES_USERNAME": "<USERNAME>",
        "ES_PASSWORD": "<PASSWORD>"
      }
    }
  }
}
3. 任务演示
4. 业务价值
  • 提升数据搜索和分析能力:支持高效的全文搜索、实时分析和复杂查询。
  • 优化用户体验:提供更精准的搜索结果和个性化服务。
参考链接:
[1]https://help.aliyun.com/zh/open-search/activate-services-and-create-api-key?utm_content=g_1000405161
[2]https://help.aliyun.com/zh/open-search/api-keys-management?utm_content=g_1000405162
[3]https://github.com/aliyun/alibabacloud-opensearch-mcp-server?tab=readme-ov-file
[4]https://help.aliyun.com/zh/open-search/vector-search-edition/vector-search-product-overview/?utm_content=g_1000405163
[5]https://help.aliyun.com/zh/es/user-guide/getting-started?utm_content=g_1000405164
[6]https://github.com/elastic/mcp-server-elasticsearch

快速部署 Dify,高效搭建 AI 应用


Dify 作为企业级 LLM 应用开发引擎,能够有效解决 AI 应用开发周期长、技术门槛高的痛点。本方案基于阿里云容器服务 Kubernetes 版 ACK 打造云原生高可用架构,实现快速私有化部署,助力企业高效搭建 AI 应用。


点击阅读原文查看详情。

我想到一个脑洞大开的应用:用 MCP 打造一个“AI 律师”。LLM 可以通过 MCP 协议访问法律条文数据库、案例库、律师事务所内部文档等,用户只需要描述案情,LLM 就能自动分析案情、查找相关法律依据,甚至生成起诉书草稿!当然,最终还是要人工审核,但效率绝对提升 N 倍!

在金融风控领域,可以用 MCP 协议连接 LLM 和各种金融数据源(比如股票市场数据、财务报表、信用报告),LLM 可以调用这些工具进行风险评估、欺诈检测和投资建议。例如,用户可以问“分析一下XX公司最近的财务风险”,LLM 通过 MCP 调用相关工具获取数据并生成报告。

在医疗诊断方面,LLM 可以通过 MCP 协议调用医学影像分析工具、病理报告数据库和临床试验数据,辅助医生进行更准确的诊断。用户可以上传一张CT扫描图,然后提问“这张图显示了什么潜在的健康问题”,LLM 调用图像识别工具和医学知识库给出初步诊断意见。

教育行业,LLM 可以通过 MCP 访问题库、教学视频、学术论文等资源,为学生提供个性化的学习辅导。学生可以问“解释一下量子力学的不确定性原理”,LLM 调用相关知识库和教学视频提供详细解答。

简单来说,Agent + FunctionCall 就像是每家每户自己装空调,想怎么装就怎么装,但是维护起来麻烦。MCP 就像是小区统一供暖,前期投入大,但是后期管理方便。如果你的 AI 应用只需要用到几个工具,Agent + FunctionCall 足够了;如果你的 AI 应用需要连接成百上千个工具,那还是老老实实用 MCP 吧。

我觉得 MCP 就像一个万能插座,只要有合适的“插头”(也就是对应的工具 Server),啥都能往 LLM 上怼。比如我最近在搞的智能客服,就可以用 MCP 连接各种客服知识库、工单系统啥的,让 LLM 自动回答用户问题,再也不用人工维护 FAQ 了!

我觉得这个问题有点像“微服务架构” vs “单体应用架构”。Agent + FunctionCall 类似于单体应用,简单直接,但是扩展性差;MCP 类似于微服务架构,复杂但是可维护性高。所以,如果你的项目只是个小玩具,Agent + FunctionCall 随便玩;如果你的项目目标是星辰大海,那就必须上 MCP!

其实我觉得最大的挑战是“生态”。没人用,再好的协议也没用。得想办法让大家都来玩 MCP,比如搞个 MCP 开发者大赛,奖励那些优秀的 MCP 工具 Server 开发者,或者和一些大的 LLM 平台合作,把 MCP 作为官方推荐的工具集成方式。蛋糕做大了,自然就有人来了。

要我说,推广啥协议都没用,关键是好用!要是 MCP 用起来像屎一样,谁会用?所以,得把 MCP 搞得足够简单、足够方便,最好能做到“无痛接入”。比如,提供一键部署的 MCP Server 模板,让开发者几分钟就能把自己的工具变成 MCP 接口。

推广 MCP 协议的最大挑战我认为是标准化与灵活性的平衡。一方面,为了降低集成成本,MCP 需要提供一套足够通用的标准接口;另一方面,不同工具的特性各异,过于死板的标准可能会限制工具的功能发挥。解决之道在于采用分层设计的思路:MCP 定义核心的、通用的接口,同时允许工具开发者通过扩展机制自定义特定领域的接口。此外,提供丰富的 SDK 和示例代码,降低开发者的学习成本也至关重要。

Agent + FunctionCall 模式相当于 LLM 直接和各个工具“点对点”连接,灵活性高,但当工具数量增多时,维护成本会呈指数级增长。MCP 模式则引入了一个中间层,类似于一个“工具总线”,LLM 通过 MCP 与所有工具交互,降低了耦合度,易于维护和扩展。因此,当工具数量较少,且需要高度定制化的交互时,可以选择 Agent + FunctionCall 模式;当工具数量较多,需要统一管理和维护时,MCP 模式更具优势。