将代理连接到 Elasticsearch 使用模型上下文协议

作者:来自 Elastic Jedr Blaszyk 及 Joe McElroy

让我们使用 Model Context Protocol 服务器 与 你的 数据 在 Elasticsearch 中聊天。

如果与你的数据交互像与同事聊天一样轻松,会怎样?想象一下,你只需简单地问:“显示上个月所有超过 $500 的订单” 或 “哪些产品获得最多的 5 星评价?”就能立即获得准确答案,无需查询。

模型上下文协议(Model Context Protocol - MCP)让这一切成为可能。它无缝连接对话式 AI 与你的数据库和外部 API,将复杂请求转换为自然对话。现代 LLM 在理解语言方面表现出色,但当它们与现实世界系统集成时,其真正潜力才能得到释放。MCP 架起了它们之间的桥梁,使数据交互更直观、更高效。

在本篇文章中,我们将探讨:

  • MCP 架构 —— 它如何在底层运行

  • 连接 Elasticsearch 的 MCP 服务器的优势

  • 构建基于 Elasticsearch 的 MCP 服务器

令人兴奋的时代来了!MCP 与你的 Elastic 技术栈集成,使你与信息的交互方式焕然一新,让复杂查询像日常对话一样直观。

模型上下文协议

模型上下文协议(MCP)由 Anthropic 开发,是一种开放标准,通过安全的双向通道将 AI 模型连接到外部数据源。它解决了 AI 的一大限制:在保持对话上下文的同时,实现对外部系统的实时访问。

MCP 架构

模型上下文协议的架构由两个关键组件组成:

  • MCP 客户端 – 代表用户请求信息或执行任务的 AI 助手和聊天机器人。

  • MCP 服务器 – 负责检索相关信息或执行请求操作(例如调用外部 API)的数据存储库、搜索引擎和 API。

MCP 服务器向客户端提供两项主要功能:

  • 资源(Resources) - 结构化数据、文档和内容,可用于 LLM 交互的上下文。这使得 AI 助手能够访问数据库、搜索索引或其他来源的相关信息。

  • 工具(Tools) - 可执行函数,使 LLM 能够与外部系统交互、执行计算或采取现实世界的操作。这些工具扩展了 AI 的能力,不仅限于文本生成,还可以触发工作流、调用 API 或动态操作数据。

  • 提示(Prompts) - 可复用的提示模板和工作流,用于标准化和共享常见的 LLM 交互。

  • 采样(Sampling) - 通过客户端请求 LLM 补全,以实现复杂的自主智能行为,同时保持安全性和隐私性。

MCP 服务器 + Elasticsearch

传统的检索增强生成(RAG)系统根据用户查询检索文档,而 MCP 更进一步:它使 AI 代理能够实时动态构建和执行任务。用户可以使用自然语言提问,例如:

  • “显示上个月所有超过 $500 的订单。”

  • “哪些产品获得最多的 5 星评价?”

并立即获得精准答案,无需编写任何查询语句。

MCP 通过以下方式实现这一目标:

  • 动态工具选择 – 代理根据用户意图智能选择 MCP 服务器提供的合适工具。“更智能” 的 LLM 能够基于上下文选择合适的工具和参数。

  • 双向通信 – 代理与数据源流畅交互,按需优化查询(例如,先查找索引映射,再构造 Elasticsearch 查询)。

  • 多工具编排 – 工作流可同时利用多个 MCP 服务器的工具。

  • 持久上下文 – 代理记住先前的交互,在对话中保持连续性。

连接到 Elasticsearch 的 MCP 服务器解锁了强大的实时检索架构。AI 代理可以按需探索、查询和分析 Elasticsearch 数据,使你的数据可通过简单的聊天界面进行搜索。

MCP 不仅限于数据检索,还能执行操作。它与其他工具集成,以触发工作流、自动化流程,并将洞察结果输入分析系统。通过将搜索与执行分离,MCP 使 AI 驱动的应用程序更加灵活、始终保持最新,并无缝集成到自主智能工作流中。

动手实践:通过 MCP 服务器与 Elasticsearch 数据聊天

要通过 MCP 服务器与 Elasticsearch 交互,我们至少需要具备以下功能:

  • 检索索引

  • 获取映射

  • 使用 Elasticsearch 的查询 DSL 执行搜索

我们的服务器是用 TypeScript 编写的,并且我们将使用官方的 MCP TypeScript SDK。为了设置,我们建议安装 Claude 桌面应用程序(免费版即可),因为它包括内置的 MCP 客户端。我们的 MCP 服务器本质上通过 MCP 工具暴露了官方的 JavaScript Elasticsearch 客户端。

让我们首先定义 Elasticsearch 客户端和 MCP 服务器:

 const esClient = new Client({node: url,auth: {apiKey: apiKey,},});const server = new McpServer({name: "elasticsearch-mcp-server",version: "0.1.0",});

我们将使用以下 MCP 服务器工具与 Elasticsearch 交互:

  • 列出索引(list_indices):此工具检索所有可用的 Elasticsearch 索引,提供如索引名称、健康状态和文档计数等详细信息。

  • 获取映射(get_mappings):此工具获取指定 Elasticsearch 索引的字段映射,帮助用户了解存储文档的结构和数据类型。

  • 搜索(search):此工具使用提供的查询 DSL 执行 Elasticsearch 搜索。它会自动启用文本字段的高亮显示,方便识别相关的搜索结果。

完整的 Elasticsearch MCP 服务器实现可以在 elastic/mcp-server-elasticsearch 仓库中找到。

与你的索引对话

让我们探索如何设置 Elasticsearch MCP 服务器,以便你可以用自然语言提问关于数据的问题,例如:“查找上个月所有超过 $500 的订单。”

配置 Claude 桌面应用程序

  1. 打开 Claude 桌面应用程序

  2. 转到 设置 > 开发者 > MCP 服务器(Settings > Developer > MCP Servers

  3. 点击 “Edit Config” 并将以下配置添加到你的 claude_desktop_config.json

{"mcpServers": {"Elasticsearch MCP Server": {"command": "npx","args": ["-y","@elastic/mcp-server-elasticsearch"],"env": {"ES_URL": "","ES_API_KEY": ""}}}
}

注意:此设置使用了由 Elastic 发布的 @elastic/mcp-server-elasticsearch npm 包。如果你想在本地开发,可以在这里找到更多关于启动 Elasticsearch MCP 服务器的详细信息。

填充你的 Elasticsearch 索引

  • 你可以使用我们的示例数据填充 "orders" 索引用于本次演示
  • 这将允许你尝试像 “Find all orders over $500 from last month” 这样的查询

开始使用

  1. 打开 Claude 桌面应用程序中的新对话

  2. MCP 服务器将自动连接

  3. 开始提问关于你 Elasticsearch 数据的问题!

查看这个演示,看看使用自然语言查询 Elasticsearch 数据有多简单:

MCP server 展示

它是如何工作的?

当被问到 “Find all orders over $500 from last month”时,LLM 会识别出意图是用指定的约束条件搜索 Elasticsearch 索引。为了执行有效的搜索,代理会这样操作:

  1. 确定索引名称:orders

  2. 理解 orders 索引的映射

  3. 构建与索引映射兼容的查询 DSL,并最终执行搜索请求

这种交互可以表示为:

结论

模型上下文协议(MCP)增强了你与 Elasticsearch 数据的交互方式,使你能够进行自然语言对话,而不是复杂的查询。通过将 AI 能力与你的数据连接,MCP 创建了一个更加直观和高效的工作流,并在整个交互过程中保持上下文。

Elasticsearch MCP 服务器作为一个公开的 npm 包(@elastic/mcp-server-elasticsearch)提供,便于开发者进行集成。只需少量设置,你的团队就可以开始通过简单的对话探索数据、触发工作流并获得洞察。

准备好亲自体验了吗?今天就尝试 Elasticsearch MCP 服务器,开始与你的数据对话吧。

想获得 Elastic 认证吗?查看下一期 Elasticsearch 工程师培训的时间!

Elasticsearch 拥有众多新功能,帮助你为特定用例构建最佳搜索解决方案。深入了解我们的示例笔记本,开始免费的云试用,或立即在本地机器上尝试 Elastic。

原文:Connect Agents to Elasticsearch with Model Context Protocol - Elasticsearch Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 组件 - 动态组件

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 组件 - 动态组件 目录 动态组件 选项卡页面示例 更简单写法 增加输入框 弥补措施 总结 动态组件 选项卡页面示例 功能:选项卡功能,设置导航点击哪个显示相应页面。 设置三个全局组件&#…

Telnet协议详解:本质与操作逻辑

一、Telnet的本质 1. 协议定位 Telnet是一种基于TCP的明文远程终端控制协议,属于应用层协议。其核心功能是通过网络模拟物理终端,实现对远程主机的命令行控制。 2. 核心特性 网络虚拟终端(NVT):建立统一的字符编码标…

Android 使用CameraX实现预览、拍照、录制视频(Java版)

Android 官方关于相机的介绍如下: https://developer.android.google.cn/media/camera/get-started-with-camera?hlzh_cn 一、开始使用 Android 相机 Android相机一般包含前置摄像头和后置摄像头,使用相机可以开发一系列激动人心的应用,例…

面向对象

一、Scala包 1、基本语法 package 包名 2、Scala 包的三大作用(和 Java 一样) (1)区分相同名字的类 (2)当类很多时,可以很好的管理类 (3)控制访问范围 二、包说明 1、说明…

MySQL多表联查

一、数据库表结构 假设我们有两个表:users 和 orders,users 表存储用户信息,orders 表存储订单信息,一个用户可以有多个订单,通过 user_id 关联两个表。 users 表 字段名数据类型描述user_idINT用户 ID,…

如何迁移AxureCloud到新服务器?

前言 常有朋友遇到在更换服务器时或者本地AxureCloud迁移到服务器上时,如何正确迁移AxureCloud,让原有的原型可以正常访问呢? 事前准备 Navicat:用于迁移数据库。 AxureCloud:和原安装版本一致。 MySQL&#xff1…

CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例

csgo-market/ ├── pom.xml (or build.gradle) └── src/└── main/├── java/│ └── com/│ └── yourcompany/│ └── csgomarket/│ ├── CsgomarketApplication.java # Spring Boot 启动类│ ├── conf…

mac Python多版本第三方库的安装路径

终端查看python版本是 3.12,但是pycharm使用的python版本是 3.9 终端正常安装包以后,pycharm都可以正常使用,但是将 pycharm的python换成 3.12 版本,之前安装的库都没有了 通过终端查看安装库的位置,确实是安装到py…

Java常用异步方式总结

使用建议 完整代码见https://gitee.com/pinetree-cpu/parent-demon 提供了postMan调试json文件于security-demo/src/main/resources/test_file/java-async.postman_collection.json 可导入postMan中进行调试 Java异步方式以及使用场景 继承Thread类 新建三个类继承Thread&…

【VUE3】Pinia

目录 0前言 1 手动添加Pinia 2 创建与使用仓库(Setup Store 组合式) 2.1 创建仓库 2.2 使用仓库数据 2.3 解构响应式数据 3 持久化插件 0前言 官网:Pinia | The intuitive store for Vue.js 1 手动添加Pinia 上手之后,可…

JVM 每个区域分别存储什么数据?

JVM(Java Virtual Machine)的运行时数据区(Runtime Data Areas)被划分为几个不同的区域,每个区域都有其特定的用途和存储的数据类型。以下是 JVM 各个区域存储数据的详细说明: 1. 程序计数器 (Program Cou…

C++中shared_ptr 是线程安全的吗?

在 C 中,shared_ptr 的线程安全性和实现原理可以通过以下方式通俗理解: 1. shared_ptr 是线程安全的吗? 答案:部分安全,需分场景! 安全的操作: 引用计数的增减:多个线程同时复制或销…

什么是 CSSD?

文章目录 一、什么是 CSSD?CSSD 的职责 二、CSSD 是如何工作的?三、CSSD 为什么会重启节点?情况一:网络和存储都断联(失联)情况二:收到其他节点对自己的踢出通知(外部 fencing&#…

arm64平台下linux访问寄存器

通用寄存器 示例:读取寄存器值 // 用户态程序或内核代码中均可使用 unsigned long reg_value; asm volatile ("mov %0, x10" // 将X10的值保存到reg_value变量: "r" (reg_value) ); printk("X10 0x%lx\n", reg_value);示例&…

超级好用的小软件,连接电脑和手机。

将手机变成电脑摄像头的高效工具Iriun Webcam是一款多平台软件,能够将手机摄像头变成电脑的摄像头,通过简单的设置即可实现视频会议、直播、录制等功能。它支持Windows、Mac和Linux系统,同时兼容iOS和Android手机,操作简单&#x…

Mysql MIC高可用集群搭建

1、介绍 MySQL InnoDB Cluster(MIC)是基于 MySQL Group Replication(MGR)的高可用性解决方案,结合 MySQL Shell 和 MySQL Router,提供自动故障转移和读写分离功能,非常适合生产环境 2、部署 …

PERL开发环境搭建>>Windows,Linux,Mac OS

特点 简单 快速 perl解释器直接对源代码程序解释执行,是一个解释性的语言, 不需要编译器和链接器来运行代码>>速度快 灵活 借鉴了C/C, Basic, Pascal, awk, sed等多种语言, 定位于实用性语言,既具备了脚本语言的所有功能,也添加了高级语言功能 开源.免费 没有&qu…

ubuntu改用户权限

在 Linux 系统中,赋予普通用户 sudo 权限可以让他们执行一些需要 root 权限的命令,而不需要频繁切换到 root 用户。以下是具体步骤: 创建用户(useradd和adduser两种方式) 首先,需要创建一个新的用户。可以使用 adduser 或 usera…

蓝桥杯 web 学海无涯(axios、ecahrts)版本二

答案: // TODO: 待补充代码// 初始化图表的数据,设置周视图的初始数据 option.series[0].data [180, 274, 253, 324, 277, 240, 332, 378, 101]; // 周数据(每周的总学习时长) option.xAxis.data ["2月第1周", "…

Java 大视界 -- Java 大数据在智慧文旅虚拟场景构建与沉浸式体验增强中的技术支撑(168)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…