基于百炼部署Hologres MCP Server

本文介绍如何通过阿里云百炼部署Hologres MCP服务。

背景信息

在数据分析领域,大语言模型(LLM)具备强大的语言理解能力,NL2SQL等各类智能化工具也极大提升了数据分析人员的分析效率。但智能数据分析仍面临上下文记忆链路短、实时数据接入能力弱等问题。

为解决上述问题,我们构建了新的技术架构体系:

  • 模型上下文协议(Model Context Protocol,简称MCP):可以通过标准化接口架构,将AI模型的决策逻辑与外部资源解耦,形成“智能大脑+外接四肢”的协同模式。

  • Hologres:是高性能、低延时的实时数仓,通过Hologres+LLM+MCP可以搭建数据分析Agent,实现高性能、低成本的智能数据分析。

  • 百炼:是一站式大模型开发及应用构建平台,提供丰富的MCP广场。您可基于百炼部署MCP服务并创建各类智能体应用。

Hologres已集成至百炼官方MCP服务,详情请参见Github。您可在百炼中直接部署Hologres MCP Server,并进一步接入智能体应用,完成智能数据分析服务的快速搭建。

前提条件

使用限制

  • 仅支持在百炼中通过UVX安装方式(Stdio模式)部署Hologres MCP服务。

  • 仅支持通过公网访问Hologres实例。

操作步骤

开通MCP服务

  1. 使用阿里云账号登录百炼MCP广场,选择Hologres

  2. Hologres页面,单击右侧的立即开通,并在开通MCP服务对话框中配置以下参数。

    分类

    参数名

    描述

    云产品配置

    访问Hologres服务角色

    选择具有Hologres资源访问权限的角色。如果不存在这样的角色,可以通过以下任一方式进行授权添加:

    • (推荐)前往快速授权页面,为默认角色AliyunHologresForBailianRole进行确认授权,授予其访问Hologres资源的权限。

    • 也可使用自定义的RAM角色,但需为RAM角色授予函数计算的访问权限AliyunFCFullAccess。

    Hologres实例公网Host

    目前仅支持公网连接。

    您可前往Hologres控制台,单击目标实例ID,在实例详情页的网络信息区域,单击公网操作列的开关启用公网,然后获取公网Host。

    示例:hgpostcn-cn-xxxxxxxx-cn-shenzhen.hologres.aliyuncs.com

    Hologres实例端口

    Hologres实例对应的端口号,配置为80

    Hologres数据库名称

    Hologres实例的数据库名称。

    部署配置

    基础模式

    首次请求需要下载并安装,预计5~10秒连接到MCP服务,按请求次数和连接使用时长以0.000156元/秒计费,连接断开后自动释放实例不计费。

    适用场景:偶尔调用,对启动速度要求不高(首次调用会有一定启动延迟)的场景。

    极速模式

    适用于时延敏感场景,通过启动快照显著提高响应速度(冷启动≤5毫秒),按照部署时长以0.13元/时计费,直至您关闭MCP服务。

    部署地域

    选择部署地域。目前仅支持北京、上海、深圳、杭州、新加坡地域。

  3. 单击确认开通

角色授权

以默认RAM角色AliyunHologresForBailianRole为例,函数计算需要基于此角色访问Hologres实例。您需在Hologres数据库中将该角色创建为数据库用户,并授予相应数据权限,操作详情请参见授予RAM用户实例的开发权限。重点配置如下:

  1. 登录Hologres管理控制台,新增用户。

    image

  2. 为用户授予Developer权限。image

样例数据准备

TPCH 10GB数据集为例,您可参见一键导入公共数据集导入TPCH 10GB数据集。

创建智能体应用

  1. 前往百炼应用管理页面,单击右上角的新增应用,在智能体应用页签中单击立即创建image

  2. 配置智能体应用。详细操作请参见智能体应用

    配置项

    说明

    API配置

    模型选择配置为通义千问-Maximage

    提示词

    本文示例使用如下提示词:

    - 必须先获取MCP工具列表,然后再调用合适的工具回答问题
    - Hologres 兼容 PostgreSQL 语法
    - 可以使用SQL语句:SELECT hg_dump_script(schema_name.table_name) 获取表的DDL

    MCP服务

    将已开通的Hologres MCP服务添加到智能体。

    重要

    完成智能体应用的配置后,需等待MCP服务工具加载完成,方可进行文本对话。

    • 若您在开通MCP服务时,部署模式选择了基础模式(即弹性模式),则MCP工具加载会存在一定延迟,请耐心等待。

    • 若部署模式选择了极速模式,则MCP工具会快速加载完成,但需注意费用消耗,极速模式按照部署时长以0.13元/时计费,直至您关闭MCP服务。

    image

验证智能体应用

智能体应用会根据问题,自动选用合适的Hologres MCP服务中的工具。本文以如下问题为例进行验证。

问答示例

  • 问题1:我的Hologres实例中有哪些Schema?image

  • 问题2:hologres_dataset_tpch_10g schema下的orders表的ddl是什么?image

  • 问题3:hologres_dataset_tpch_10g schema下,查看1994年各个国家的订单数量。image

    查询时发生了一个错误,因为表 hologres_dataset_tpch_10g.orders 中似乎不存在名为 country 的列。TPC-H 数据集中的订单表(orders)一般包含的是客户信息(如客户编号 customer_id),而国家信息通常存储在客户表(customer)中。
    
    为了得到 1994 年各个国家的订单数量,我们需要将订单表和客户表进行连接(JOIN),然后按国家分组并计数。让我们来构造正确的 SQL 查询语句。 查询中再次出现了错误,原因是订单表中的列名应为 o_orderdate 而不是 orderdate。此外,我们还需要将订单表和客户表进行连接,以获取每个客户的国家信息。
    
    让我更正这个问题,并且使用正确的列名和表连接来获取 1994 年各个国家的订单数量。 查询中仍然存在错误,因为客户表中的列名应为 c_custkey 而不是 custkey。同时,为了获取每个国家的订单数量,我们需要按国家分组(c.c_mktsegment 通常是市场细分,而 c.c_nationkey 和相应的国家名称应该在 nation 表中)。我们将使用正确的列名,并且加入 nation 表以得到国家名称。
    
    现在我将构建一个正确的查询语句来获取 1994 年各个国家的订单数量。 查询中再次出现了列名错误,因为 c.c_country 并不是客户表中的正确列名。正确的列应该是 c.c_nationkey,并且我们需要通过 nation 表来获取国家的名称。
    
    我现在将更正这个问题,并使用 c_nationkey 和 nation 表来获得每个国家的名称。让我们进行修正后的查询。 1994 年各个国家的订单数量如下:
    
    印度 (INDIA): 90,750
    埃及 (EGYPT): 90,370
    伊拉克 (IRAQ): 91,251
    罗马尼亚 (ROMANIA): 91,117
    沙特阿拉伯 (SAUDI ARABIA): 90,305
    摩洛哥 (MOROCCO): 90,676
    印度尼西亚 (INDONESIA): 91,697
    俄罗斯 (RUSSIA): 91,138
    莫桑比克 (MOZAMBIQUE): 90,831
    法国 (FRANCE): 91,719
    阿根廷 (ARGENTINA): 90,971
    美国 (UNITED STATES): 91,079
    肯尼亚 (KENYA): 90,490
    阿尔及利亚 (ALGERIA): 91,044
    德国 (GERMANY): 91,589
    秘鲁 (PERU): 89,952
    埃塞俄比亚 (ETHIOPIA): 91,867
    巴西 (BRAZIL): 91,018
    约旦 (JORDAN): 91,147
    越南 (VIETNAM): 91,293
    英国 (UNITED KINGDOM): 91,437
    中国 (CHINA): 91,852
    日本 (JAPAN): 91,179
    加拿大 (CANADA): 90,037
    这些数据代表了在 1994 年,每个国家通过 TPC-H 数据集中的订单表所记录的订单数量。请注意,这些数字是基于测试数据集,并不代表真实的历史数据。如果您需要进一步分析或有其他问题,请告诉我。

结果分析

  • 问题1:证明智能体可以选择正确的Hologres MCP工具,以获取正确的结果。

  • 问题2:证明智能体中的提示词可以有效发挥作用。

  • 问题3:证明智能体生成SQL后,会根据Hologres返回的报错信息持续优化SQL,直至生成正确的SQL并返回查询结果。

发布智能体应用

您可单击智能体应用管理界面右上角的发布。发布后的应用可以被API调用,也可以通过Web页面分享给同一主账号下的RAM子账号使用。详情请参见发布智能体应用