admin

  • 大概是在朋友圈看到的这个会议 GOSIM(Global Open-Source Innovation Meetup),注意到有来自HuggingFace、vLLM、SGLang、BAAI 、字节等开发者来分享,果断报名去学习。大会是周六、日两天大概有接近10个分会场同时并发分享,于是只能选择一些自己感兴趣的部分主题听听,本文是部分见闻记录与分享。

    推理优化与推理框架

    这次关于大模型“推理优化”相关的话题特别多,包括 vLLM、Llama.cpp、SGLang、🤗 Optimum、Chitu、kTransformers、llm-d 等。大模型要能够向企业或组织提供服务,除了通过 API (SaaS)的方式之外,最为常见的则可能是需要搭建一套具备高并发服务能力的平台,而这些平台则需要满足高并发、底层本、易运维等要求,这就是上述这些框架、工具所解决的问题。相关的研究和发展方向则集中在KVCache优化、网络优化、PD分离、容器化管理、量化效率提升、多硬件适配、国产化适配(Chitu)、expert deferral等。

    如果用数据库类比的话,这大概相当于各种 DBPaaS 平台如何通过调度、CPU硬件、网络设备去提升整理的数据库资源利用率。但是,LLM/VLM等所面临的问题,则更多的关注在 GPU (或与CPU协同等)层面。

    赤兔”定位是开源的「生产级大模型推理引擎」,面向于国产硬件环境做了很多适配,是一家“清华”背景的计算机专家推出的产品,背后的公司是:清程极智

    SGLang 是一个被比较广泛使用的大模型 大语言模型(LLMs)及多模态语言模型(VLMs)推理平台。该项目是LMSYS的一部分,目前似乎是以非盈利组织的模式在运作。该组织,最初是源自美国多所大学协作的项目(参考)。LMSYS 开发的其他著名项目包括:Chatbot Arena 、SGLang、FastChat、Vicuna LLM等。

    🤗 Optimum 是对 Transformer 库的扩展,目标是能够让模型能够更加高效在多种不同的硬件平台上高效的运行,包括训练和推理等。目前适配的硬件包括了NVIDIA、AMD、Intel、AWS Trainiu/Inferentia、Google TPUs、Habana、FuriosaAI,此外也可以非常方便与多个开源模型优化矿建进行集成,例如ONNX、ExecuTorch、Exporters、Torch FX。

    Second Me

    现在的大模型学习能力确实非常强,也许真的可以虚拟出一个“人”完整的“影子”。这个项目非常有意思,也获得了非常多个关注,项目的强调 “AI that amplifies, not erases, YOU.” 。项目的构想在于使用本地模型和存储,基于个人的数据、事件等构建一个数字的自己。也许现在的 AI 技术让这个设想有了某种可能性,这个项目则是对这种可能性的探索。感兴趣的可以关注:Second-ME

    Agents

    因为时间所限仅选择了部分 Agents 场次去听,包括“扣子空间”、“Google Agents”等。

    来自Google的开发者则非常系统的介绍了面向Agent,Google为整个生态提供了哪些能力,其实是几乎覆盖了整个Agent生命周期的,包括了 Agent 构建SDK、Agent之间通信、Agent托管等一系列完整的服务。Google 对于 AI 各个方向都是非常大的,并且整体都很成功,这大概也能够顺利的帮助 Google 从搜索时代过渡到 AI 对话时代。

    字节跳动的大模型(Seed)似乎还在“蓄力”阶段,但是上层的应用迭代和发展比较快。面相普通用户有“豆包”,面相开发者则有“扣子”,基于“扣子”,最近则退出了类似的“deep research”产品“扣子空间”。这次大会上,来自字节的工程师则分享了Agent、多Agent构建过程中的一些经验。此外也分享了一些有意思的“事实”:目前Agent领域发展非常快,在2024年初Agent基本上仅限于对话、陪伴机器人等少数方向;2024年底,智能客服则逐渐走向较为成熟的阶段;而现在则百花齐放,各个领域都在做大量探索,最为典型的就是“Manus”模式。

    OpenSeek

    OpenSeek 是一个比较新的、由 BAAI 发起的一个开源大模型项目,该项目致力于构建一个更加完整开源大模型项目,而不是仅仅开源模型架构和参数,而是提供更加完整模型构建过程的代码,从而向开发者提供更加“开放”的模型。此外,这次分享中,也介绍了一些 OpenSeek 的一些基础实现,例如mid/post training,此外特别提到了 OpenSeek 的 DMA 机制(Dynamic Mask Attention 通过动态计算部分Token的Attention,降低计算复杂度)去实现更高性价比的模型训练与推理。感兴趣的可以访问 GitHub 地址:OpenSeek@GitHub

    MemTensor

    随着 AI 技术的继续发展,预训练和后训练对于模型能力的增强的加速度是在下降的。那么,为了提升自然语言与模型的交互的效果,演讲者认为“记忆体”可能会成为增强大模型体验的关键组件。MemTensor团队则尝试通过将模型与“记忆”更加紧密的链接起来,从而增强模型的使用体验。

    关注的议题:

    最后

    GOSIM 大会大概有超过十个分论坛在并行分享,还有很多关于具身智能、Rust等相关的技术。

  • 这大概是一个有趣、也略深刻的发现。

    Word Embedding是比较抽象的,但是这些抽象背后是一些“具象”的含义的,本文通过一些简单的计算(变换)来将Embedding的某些维度/属性具象化。具体的,本文展示了在Embedding空间中,找到一个代表“动物”属性的方向。感兴趣的话,可以通过这个简单的方法,找到你感兴趣的属性方向。

    TL;DR

    通常,在某个具体的Word Embedding实现中,先给出一组具有“共同属性”的词语,然后计算这组词语Embedding向量的平均方向,就可以代表这个“共同属性”。

    例如,找到一组“动物”,然后对这些词语的Embedding向量计算平均方向,那么这个方向就是“动物”这个属性的方向。

    概述

    如果你也尝试过去理解 Embedding 各个维度的含义的话,大概都听过这样一种说法:Embedding每个维度可以理解为这个词语的某种属性,例如,“性别属性”、“皇室相关度”等,这是最为经典的man - woman = king - queue的例子中的一些解释。

    当你真的拿到一个词语的 Embedding 的时候,它可能有768维,但是,似乎没有一个维度有上述的清晰的属性含义。而实际上,这些属性含义是确实存在的,只是这些属性方向并不存在于“标准基”的方向上。

    那如果存在,我们应该如何找到这个方向呢?本文展示并验证了一个非常简单的方法,让你快速找到某种属性的方向,并且进行一些验证。从而可以大大加深对于 Embedding 的理解。

    寻找某个关心的方向

    这里展示了以寻找“动物”属性方向为例,展示如何寻找并验证该方向。

    列出最具代表性的词语

    我们这样考虑这个问题,如果有一个方向表示一个词语的“动物”属性,那么这个方向会是哪个方向?这里以all-MiniLM-L6-v2模型提供的Sentence Embedding为例,我看看如何找到该Embedding所处的向量空间中最可能代表“动物”属性的方向是哪个?具体的方法描述如下:

    • 首先,找到被认为最典型的与“动物”属性相关的词语\( n \)个,这里取\( n=50 \)
    • 然后计算上述\( n \)个词语的平均方向 avg_vector,该方向则认为要寻找的方向

    这里,给出的50个动物如下:

    animals = [
        "tiger", "lion", "elephant", "giraffe", "zebra",
        "rhinoceros", "hippopotamus","crocodile", "monkey",
        "panda", "koala", "kangaroo","whale", "dolphin",
        "seal", "penguin", "shark", "snake", "lizard",
        "turtle", "frog", "butterfly", "bee", "ant", "eagle",
        "sparrow", "pigeon", "parrot", "owl", "duck", "chicken",
        "dog", "cat", "pig", "cow", "sheep", "horse", "donkey",
        "rabbit", "squirrel", "fox", "wolf", "bear", "deer",
        "hedgehog", "bat", "mouse", "chameleon", "snail", "jellyfish"
    ]

    计算Embedding的平均方向

    该平均方向,即为我们要寻找的“动物”属性方向。

    animals_embeddings = model.encode(animals)
    avg_animals_embeddings = np.mean(animals_embeddings, axis=0)

    验证该方向

    再选取两组词,一组认为是与“动物”非常相关的词,另一组则是与动物无关的词语。然后分别计算这两组词语在上述方向avg_vector的投影值。观察投影值,是否符合预期。

    这里选择的两组词语分别是:

    • 与动物非常相关的:”Camel”, “Gorilla”, “Cheetah”
    • 与动物无关的:”Dream”, “Chair”, “Mathematics”

    计算投影并可视化

    具体的程序如下:

    animals_words    = ["Camel", "Gorilla", "Cheetah"]
    un_animals_words = ["Dream", "Chair", "Mathematics"]
    
    for word_list in (animals_words,un_animals_words):
        projection_scores = np.dot(model.encode(word_list),
                                  avg_animals_embeddings)
        results.update({word: score for word,
                        score in zip(word_list, projection_scores)})
    
    for word, score in results.items():
        print(f"'{word}': {score:.4f}")
    print(np.round(avg_animals_embeddings[:10], 4))

    投影结果为:

    'Camel': 0.3887
    'Gorilla': 0.4186
    'Cheetah': 0.3797
    'Dream': 0.2450
    'Chair': 0.2823
    'Mathematics': 0.1972

    在实数轴上绘制上述两组词语的投影:

    非常明显的可以看到,上述的avg_vector方向某种程度上代表了一个词语的“动物”属性:即与动物属性相关的词语在该方向的投影大,无关的词语在该方向的投影小。

    原理解释

    概述

    事实上,一组词语Embedding的“平均向量”(centroids of word embeddings),则某种程度的代表这组词语的“语义中心”。如果这组词有某些共性,那么这个平均向量,则可能就是这个共性的代表。

    在上述的例子中,刻意地给出的一组词语都是“动物”名称。那么,这个“平均向量”则比较有可能代表了这个向量空间中的“动物”属性。

    数学推导

    这样考虑这个问题:现在给出的 \( n \) 个向量 \( \alpha_1, \dots , \alpha_n \),找出一个单位向量 \( \xi \) 使得 \( n \) 个向量在 \( \xi \) 向量方向上的投影值的和最大。

    这里取 \( \bar{\alpha} = \frac{\sum\limits_{i=1}^{n}\alpha_i}{n} \)

    目标函数 \( S = \sum\limits_{i=1}^{n}(\alpha_i \cdot \xi ) = \sum\limits_{i=1}^{n}(\alpha_i) \cdot \xi = n \bar{\alpha} \cdot \xi = n \| \bar{\alpha}\| \| \xi \| \cos\theta \)

    这里 \( n \)、\( \bar{\alpha} \)都是给定值,而 \( \| \xi \| = 1 \),所以这里 \( \cos\theta \) 取最大值时,上述的目标函数 \( S \) 取最大值。

    即:\( \theta = 0 \) 时, \( S \) 取最大值。即当 \( \xi \) 与 \( \bar{\alpha} \) 方向相同时,即 \( \xi = \frac{\bar{\alpha}}{\|\bar{\alpha}\|} \) ,所有向量的投影值的和最大。

    投影计算

    太久不碰线性代数了,对于基本运算都不是很熟悉了。向量 \( \alpha \) 在 \( \beta \) 方向上的投影长度,计算公式如下:

    $$ proj = \frac{\alpha \cdot \beta}{\|\beta\|} $$

    证明比较简单,这里不再赘述。

    向量的平均方向与主成分方向

    当给出一组向量,面对上述问题,比较容易联想到这组向量的“主成分分析”的第一个维度。那么,上述的平均向量和主成分分析的第一个维度有什么关系呢?回答是:没有太大的关系。

    可以看下面三个图:

    上述三个二维平面中的点的平均方向均为红色,即(1,1);但是PCA的第一方向则各有不同,有时候与平均向量相同、有时候垂直,有时候相交。总之是没什么关系。

    可以看到,平均向量时在当前的“基”下计算获得。而主方向分析的方向,则首先就与原点没有关系。

    更深层次的理解

    现在的Embedding算法,都是基于现实世界语料库训练而来,反应了人类认知中“语言”与现实世界的对应关系。而在人类的认知中,这个世界是有“维度”的,最为直白的例子就是:我们会将词语划分“褒义词”、“贬义词”。此外,可能还有:动物性、情感强烈度、词性等。那么,在人类认知中这种“认知”有多少个维度呢?这其实是未知的,而各种Embedding算法则是在尝试使用量化的方式描述这些维度。

    但是,在实际训练出的各种Embedding实现,例如一个768维的Embedding,其单位向量方向,不太可能是上述的人类“认知”维度。如果把训练出来的Embedding的单位向量记为:\( \alpha_1, \dots , \alpha_n \),而把人类认知的维度记为: \( \beta_1, \dots , \beta_n \) 。

    那么,则存在一个过渡矩阵 $T$,可以实现上述向量空间的变换。

    可是,现实世界没有那么理想。Embedding空间确实给出了一组正交基,但是人类认识却很难寻找这样的正交基,例如“动物”属性的词语,可能会带有“情感”属性,例如,“虎狼之词”等,都带有某种情感属性。

    虽然,认知很难找到正交的“基”,但是找到某个具体的属性方向,则可以使用本书的方法。这正是本文所描述方法的局限性和价值所在。

    补充说明

    • 本文中,所说的Word Embedding,通常是指Sentence Embedding中的Token Embedding。在这里,无需区分两者。
    • 实际的情况更加复杂,例如本文中的“动物”属性,只是这些词所代表的“动物”属性。什么是真正的“动物”属性,并不存在这样的精确概念。人类语言中的“动物”是一个抽象的,并没有数字化、数学化的精确定义。
    • 完整的实现代码,参考:embedding_research_01.py
  • 标题:安全测评新增He3DB/崖山/神通V8.0;DTCC 2025 在北京举行;AWS支持PostgreSQL 18

    重要更新

    安全可靠测评新增三款集中式数据库:移动云大云海山数据库(He3DB)、崖山数据库、神通数据库 V8.0 [1]。据悉本次参与测试的厂商超 30 家,最终仅 3 家通过测评。

    DTCC 2025 在北京举行,议题涉及:AI For DB、Data+AI、向量数据库与RAG检索技术实践等AI应用实践、数据库自主可控架构设计、数据库内核解析、分布式数据库、云原生数据库、实时数仓,是中国数据库领域最盛大的年度大会[2]

    更新详情

    阿里云
    • RDS MySQL 高性能本地盘主实例新增多种规格,存储空间上限提升至16,000 GB。[8]
    • RDS PostgreSQL 支持创建基于高可用架构的高可用系列只读实例。该系列的只读实例由一个主节点和一个备节点组成,能够实现只读实例的高可用性,从而保障只读业务的持续稳定运行。[9]
    • RDS SQL Server新增存储过程sp_rds_manage_tempdb_user,用于授予或移除指定账号对tempdb数据库的db_owner权限[12]
    Azure(微软云)
    • Azure 数据库迁移服务 (DMS) 现已提供结构(Schema)迁移功能 [16]
    • Azure Cosmos DB for MongoDB (vCore) 支持添加分片并重新平衡数据[17]
    • Azure 托管支持 Apache Cassandra v5.0 的实例[18]
    GCP(谷歌云)
    • 支持使用 Data Insights 让 Gemini 根据表元数据生成表和列描述[25]
    • 支持终止 Spanner 实例中的多个活动查询[27]
    • 在 Cloud SQL Studio / AlloyDB Studio中支持保存和管理 SQL 查询[37][40]
    • Spanner 提供了一个预定义库,其中包含 80 多个 MySQL 函数,您可以将其安装在数据库中。这些函数允许您像操作MySQL一样使用 Spanner [65] [66]
    • GoogleSQL 查询中支持 WITH 表达式来创建临时变量。[68]
    • GoogleSQL 中支持使用链式函数调用语法,使深层嵌套的函数调用更易于阅读。[71]
    Oracle云
    • 全栈灾难恢复引入了对 MySQL 数据库系统的支持[77]
    • 支持按计划升级到 Oracle Database 23ai [79]
    • GoldenGate 现已支持 Oracle Database@AWS Autonomous Database [80]
    火山云(字节)
    • 云数据库 MySQL 支持云盘存储类型 FlexPL 云盘或 PL0 云盘的实例,最大分别支持 32000GB 和 16000GB 的存储空间。
    • 云数据库 MySQL 支持为实例创建蓝绿部署,实现了版本升级、大数据迁移等业务场景下从生产环境到待切换环境零停机的无缝切换。
    • veDB MySQL 重启实例时,可以选择重启整个实例,也可以只重启指定的节点。
    • veDB MySQL 支持为每个节点设置切主优先级,该优先级能够决定在发生故障进行主备切换时,每个节点被选举为主节点的概率大小[19]
    • 云数据库 Redis 版 RDB 分析新增支持分析 Top Key 前缀[20]
    AWS(亚马逊云)
    • RDS 支持 MariaDB 11.8 [83]
    • RDS for Db2 支持跨区域只读副本 [85]
    • Amazon RDS 支持 MariaDB 11.4.8、10.11.14 和 10.6.23[86]
    • Amazon Neptune 现通过开源 GraphRAG 工具包支持 BYOKG – RAG (GA)[92]
    • Amazon RDS for PostgreSQL 现支持延迟读取副本[93]
    • Aurora MySQL 3.10 长期支持 (LTS) 版本发布[99]
    • PostgreSQL 18 Beta 3 现已在 Amazon RDS 数据库预览环境中推出[105]
    • Amazon RDS for PostgreSQL 支持次要版本 17.6、16.10、15.14、14.19 和 13.22[106]
    • DocumentDB 宣布扩展对 3.6 版的支持[110]
    腾讯云
    • 云数据库 MySQL 8.0内核版本更新20241005。[111]
    • 云数据库 MySQL 5.7内核版本更新20250730。[112]
    • 云数据库 MySQL 、TDSQL-C MySQL数据库审计支持日志投递至 COS 对象存储[113]

    参考链接

  • DTCC 2025 的 AI 部分观察

    ·

    上一次写DTCC已经是15年前了(参考:DTCC关于MySQL的未来),今天又有写一点什么的冲动了。因为要“练摊”,所以也只能是“部分”观察。

    AI 到底会如何改变数据库领域

    这次会场上,对于“佰晟智算”和“银联”在AI方向的一些探索关注的多一些,其他时间,则主要是在NineData展台“练摊”。说说一些感受吧。“佰晟科技”主要聚焦于国产化数据库的优化、监控管理等方向,最为亮眼的创新在于,将大模型的能力与“运维知识”深度的结合起来。白鳝很早就在给产品做市场预热了,所以,在产品推出比较短的时间能,就快速的获得了一些早期的种子客户。

    “银联”则是在内部的数据库管理上,做了很多的探索。银联有非常强的自主研发能力,也做了很多的智能化探索,包括Text2SQL、SQL的性能诊断等。Text2SQL很多的企业做了探索,但由于表名、列名的识别对于大模型来说,是非常困难的(一方面由于列可能非常多、而且命名比较简短),会让大模型出现非常强的幻觉问题,这使得在复杂OLTP场景,Text2SQL依旧难以胜任。但对于一些较为简单的场景,例如比较比较少,表、列都使用非常规范的时候,对于部分开发者,依旧有帮助。也注意到,有很多的企业在BI或者“取数”、“报表”场景,做了非常多的探索。

    在SQL优化的方向,AI的能力,已经得到了开发者比较一致的认可,大模型虽然可能会给出一些不太实用的建议,但是“正确”的优化建议,也总是在大模型给出的建议列表之中。这对于,DBA渐少的时代,对开发者来说,确实非常友好。

    NineData 在这个方向上,也做了很多探索,从最早发布ChatDBA以来,后续持续在“DDL转换”、“SQL 优化”、“Text2SQL”、“国产化转换”等方向去尝试,这些功能随着基础大模型的增强,以及辅助以各种优化,确实可以让开发者的数据库管理变得简单一些。

    Memobase

    还听了一场 Memobase 的分享,是一个关于大模型“memroy”的产品。创始人非常技术,整个介绍听下来,如果稍不留神,甚至不知道演讲者是来介绍 Memobase 的,而是把业界的“memroy”产品以及相关的技术栈介绍了清楚。本以为这可能是一个略微冷门的话题,但从现场的问答环节来看,开发者们在这个方向上有很多的问题要解决。

    这个是一个依旧在快速发展的方向。无论是Memobase还是Mem0,这类产品,与数据或者数据库的关系比较有趣的。简单的数据存储,即便是多模态存储,是无法简单的解决此类问题的。此类问题,当前,依旧是比较偏场景化的解决方案,例如,当天讨论的最多的,包括问答机器人、智能对话陪伴等。这些具体的场景下,产品需要深入到场景之中,才能解决开发者的问题。至于存储方案,可能不是当前最为紧迫的问题,所以存储上,可以用S3、也可以用“EloqData”、也可以考虑类似于MongoDB等其他的产品。

    Memobase 比较强调自己在 Latency 方面的优势,但是,目前来看,在一个Chat的场景下,多个百毫秒的Latency,似乎并不是问题。

    之所以,这里比较强调多模态的存储,主要在于:在这个场景中,通常会使用如下的方案,包括,使用 Graph 存储一些关联关系,例如一个人的朋友、“属性”等信息;还会大量使用json存储诸如profile、conversation 历史等信息。此外,这类方案,与RAG类似,也非常依赖注入Embedding、bm25等相似搜索,用于处理历史消息等。

    总得来说,是一个场景化的,混合的存储方案,去应对业务场景。

    创新与迭代是唯一出路

    这次在现场也与很多朋友讨论了 AI 对数据库从业者(不限于)的影响,大家也都有着类似的看法,如果你不是做基础大模型的,那么,基本上,如果你能够更好的使用 AI,那么就有可能开发者出更好的产品;如果你的产品,能够更好的使用AI的能力,你的产品可能会在市场上有更强的竞争力。

    对于开发者来说,确实应该更加积极、甚至激进的去拥抱 AI 技术。LLM从出圈到现在,一共也就两三年时间,所以,“大家的起点都一样,不要犹豫,往前跑就可以了”。

    这个说法在当初ChatGPT刚出来时,Google也有类似的论断类似:““我们没有护城河,OpenAI也没有(We Have No Moat, And Neither Does OpenAI)”。事实上,经过也就两年的时间,Google Gemini 的能力、体验与市场,已经逐步在赶上ChatGPT。

    另一方面,现在整个社会最多的风投资金、最聪明的人都聚集到了这个领域,这个领域的发展和变化,可以说是“日新月异”,这个领域一定会出现很多新的商业模式和企业。但如果,跑得晚了,后面的追赶会更加吃力。从最近的Zack如此大价钱的挖掘 AI 人才,也可能看出,即便是,最头部的厂商,在这个势头下,也是非常焦虑的。

    向量数据库是AI还是数据库

    向量存储在搜索在多个AI场景都有这广泛的使用,这次大会上,包括腾讯、华为、中兴、Oracle等厂商都介绍自己自己在这个方向的探索,包括海量存储下的性能优化、标量与向量混合查询的性能、面相RAG常见的效果优化、高效的向量缓存方案等。

    最后

    DTCC 是一年一度的数据库领域朋友聚会,非常开心。因为要“练摊”的原因,错过了很多的主题分享,今年的DTCC就简单记录如上。

  • 大语言模型非常非常强大,但也有一些弱点。例如,需要精确推理与计算的场景、实时数据(如天气)获取等。MCP则是对这类外部能力扩展的一个接口,让大模型/Agent都能够便捷的接入外部工具解决此类问题。

    本文通过演示创建一个外部计算24点的程序(MCP Server),让Cursor Agent访问LLM时具备快速的24点计算能力,从而帮助开发者快速了解如何构建一个MCP Server。该24点计算的MCP Server也已经在🤗 Hugging Face对外发布,你也可以接入你的Cursor(或其他MCP Host)进行测试(参考本文小结:在Cursor中配置MCP工具)[1]

    创建 MCP Server

    现在各种工具框架已经把MCP入门构建的门槛降低非常低了,这里将使用Gradio构建一个24点计算的程序,并以MCP Server的方式提供给各MCP Host(本文是Cursor)使用,同时将该MCP Server发布在🤗 Hugging FaceSpace上,以供其他人测试和使用。

    创建24点计算的MCP Server

    使用Gradio创建MCP的代码如下:

    #
    # A project for mcp learning by orczhou
    #
    from solve_24_game import solve_24_game
    import gradio as gr
    
    def gradio_interface(a, b, c, d):
        return solve_24_game([a, b, c, d])
    
    # Create the Gradio interface
    demo = gr.Interface(
        fn=gradio_interface,
        title="solve the 24 game/puzzle",
        inputs=[
            gr.Number(label="Number 1", value=1),
            gr.Number(label="Number 2", value=2),
            gr.Number(label="Number 3", value=3),
            gr.Number(label="Number 4", value=4),
        ],
        outputs="text",
        flagging_mode="never",
        description="Solves the 24-point game. Given a list of four numbers, it attempts to find a mathematical expression using addition, subtraction, multiplication, and division that evaluates to 24. Each number must be used exactly once.",
        theme=gr.themes.Ocean()
    )
    
    # Launch the interface and MCP server
    if __name__ == "__main__":
        demo.launch(mcp_server=True)

    Gradio 不仅可以快速构建可视化的交互界面(通常用于机器学习领域),还可以非常简单的构建起MCP Server,并将其托管于🤗 Hugging Face

        demo.launch(mcp_server=True)

    在启动时,新增mcp_server=True即可以同时启动一个与此界面“相同”的MCP Server

    左侧的代码首先创建了一个如下Web服务:

    在创建了上述的Web服务的同时,Gradio还会同时创建了一个如下Endpoint的MCP Server:

    https://orczhou-solve-24-game.hf.space/gradio_api/mcp/sse

    如果是本地运行,Endpoint则可能是:

    http://127.0.0.1:7860/gradio_api/mcp/

    这里解决24点问题的代码存储在文件solve_24_game.py中,代码参考:solve_24_game.py。如何解决24点问题并不是本文的重点,这里不做详述。

    本地运行该MCP Server

    在本地,则只需要使用python3 app.py命令即可运行:

     python3 app.py
    * Running on local URL:  http://127.0.0.1:7860
    * To create a public link, set `share=True` in `launch()`.
    
    🔨 Launching MCP server:
    ** Streamable HTTP URL: http://127.0.0.1:7860/gradio_api/mcp/
    * [Deprecated] SSE URL: http://127.0.0.1:7860/gradio_api/mcp/sse

    在Hugging Face上发布 MCP Server

    🤗 Hugging Face上可以非常方便的创建并托管简单的MCP Server。详细的介绍可以参考:Spaces as MCP servers。这里演示如何进行操作。

    前提要求

    1. 首先,你要有一个🤗 Hugging Face的账号,注册即可
    2. (可选)可能还需要进行充值与信用卡绑定
    3. 准备好🤗 Hugging FaceToken,并配置好权限

    通常,Hugging Face运行程序的资源是需要付费的。但是也有部分免费资源,例如MCP托管的时候,提供了一个免费的CPU Basic(2 vCPU 16 GB RAM)的免费资源(当前免费,未来也可能是计费的)。

    在本地代码向Space上推送的时候,则需要通过Token的方式进行认证和权限管理。

    创建 Space

    进入🤗 Hugging Face,进入Space,点击“+ New Space”创建新的Space,则进入右侧的创建表单。

    注意到,在Space Hardware选项中,这里的CPU Basic 2 vCPU 16GB是免费规格,这里用作个人测试故选择免费。

    此外,这里选择了Gradio模板进行创建。

    可以看到,这里🤗 Hugging Face把相关操作的入门门槛降到了非常低的程度,对初学者非常友好。

    提交代码

    在完成创建后,可以使用 git想仓库中提交代码,Space则会根据代码架构,完全自动化的构建一个MCP Server向公网提供服务。

    代码提交可以参考如下命令:

    git clone https://huggingface.co/spaces/orczhou/solve_24_game
    cd solve_24_game
    git add solve_24_game.py app.py
    git commit -m "mcp for 24 point game"
    git remote add origin https://huggingface.co/spaces/orczhou/solve_24_game
    git push -u origin main

    补充说明:首先在Hugging Face托管则需要把程序命名为app.py,此外,还需要编写一个requirements.txt文件说明Pythone程序需要的一些模块,这里仅需要gradio[mcp]

    cat requirements.txt
    gradio[mcp]

    调试

    这里使用Hugging FaceGradio构建的MCP服务,可以非常方便的使用可视化的界面进行查看服务,例如,在这里可以通过,如下的URL来进行查看该服务是否正常:solve the 24 game/puzzle

    此外,可以通过curl命令进行调试,以确认MCP服务是否正常:

    curl -X POST \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -d '{
        "jsonrpc": "2.0",
        "id": 1,
        "method": "tools/list",
        "params": {}
      }' \
      -L \
      https://orczhou-solve-24-game.hf.space/gradio_api/mcp/
    data: {
      "jsonrpc":"2.0",
      "id":1,
      "result":{
        "tools":[{
          "name":"solve_24_game_gradio_interface",
          "description":"",
          "inputSchema":{
            "type":"object",
            "properties":{
              "a":{"type":"number", "default":1 },
              "b":{"type":"number", "default":2 },
              "c":{"type":"number", "default":3 },
              "d":{"type":"number", "default":4 }
            }
          }
    }]}}

    在Cursor中配置该MCP服务

    配置新的MCP服务

    CursorSettings->Tools & Integrations中找到MCP Tools,就可以通过New MCP Server处编辑mcp.json,从而增加MCP Tools

    具体的配置,参考如下:

    {
      "mcpServers": {
        "solve_24_game": {
          "type": "sse",
          "url": "https://orczhou-solve-24-game.hf.space/gradio_api/mcp/sse"
        }
      }
    } 

    查看Cursor中MCP配置状态

    首次测试和使用MCP时,还是比较容易出错的。可以通过上述的MCP Tools处(右图)可以查看MCP的状态,已经该MCP中可用的工具。

    在Cursor中使用该MCP服务

    Agent模式下进行对话,Cursor背后的大模型就可以使用该MCP的能力。为了避免Agent生成代码(Cursor的Agent总是倾向于生成代码解决问题),故使用如下提示词提问:

    不要生成任何代码,使用工具计算如下24点问题: 2 5 5 10”。

    返回的结果如右图。可以看到,大模型拿到返回的结果(5-(2/10))*5后,进行了必要的解释与回答。MCP详细的调用过程如下,包括了使用的参数、返回的结果:

    在我的Cursor上使用该MCP

    因为这里创建的MCP Server是运行在公网环境,故在你本地的Cursor或者其他MCP Host上也可以配置和使用该MCP服务,配置的方法参考上述小结“配置新的MCP服务”,这里不再赘述。

    其他

    更换Gradio的默认配色主题

    可以使用 theme=gr.themes.Ocean()选项更改主题选项:

    # Create the Gradio interface
    demo = gr.Interface(
        ...
        theme=gr.themes.Ocean()
    )

    更多的配色主题可以参考:Theming Guide

    最后

    大模型说:“我不需要帮助,愚蠢的人类!”

  • 标题:阿里云RDS发布全新Supabase托管服务; IDC发布中国金融集中数据库份额Oracle/达梦/华为云领跑

    重要更新

    阿里云 RDS 发布 Supabase 托管服务,帮助客户利用 Supabase 能力快速构建全栈应用,该方案可以帮助开发者简化应用构建过程中的后端开发。

    IDC 发布2024年《中国金融行业集中式关系型数据库市场份额》,总市场规模为:11.6亿元人民币,前三分别为:Oracle、达梦、华为云[1]

    更新详情

    阿里云
    • RDS PostgreSQL支持一键交换两个RDS PostgreSQL实例的连接地址,以减少在新旧实例替换等场景下进行连接地址交换所消耗的时间。[4]
    • RDS Supabase是云数据库RDS PostgreSQL提供的托管Supabase服务,您可以利用该能力快速构建基于RDS PostgreSQL的后端服务,适用于早期方案验证(MVP)、AI应用开发、SaaS平台等多种场景。当前仅对白名单用户开放 [5]
    • RDS SQL Server支持在手动备份时通过控制台或API指定备份集的保留时长。[7]
    GCP(谷歌云)
    • Cloud SQL for SQL Server 现已提供 Active Directory 写入端点支持 [28]
    • BigQuery中,GoogleSQL 将成为通过命令行界面 (CLI) 或 API 运行的查询的默认方言 [30]
    Oracle云
    • OCI 数据库与 PostgreSQL 增加了对 PostgreSQL 16 的支持 [37]
    火山云(字节)
    • 托管 Redis 支持过期 key 管理功能[38]
    百度云
    • GaiaDB 支持保定地域双机房部署,提升产品的同城容灾能力 [41]
    AWS(亚马逊云)
    • RDS for PostgreSQL 和 RDS for Oracle 的Redshift零 ETL 集成现已推出[42]
    • Amazon RDS for Db2 支持使用 Kerberos 进行组授权[43]
    • Timestream for InfluxDB 现支持 24xlarge 内存优化实例[46]
    • RDS for PostgreSQL、MySQL 和 MariaDB 现已在其他 AWS 区域支持 M8g 和 R8g 数据库实例[55]
    • Amazon RDS for PostgreSQL 18 Beta 2 现已在 Amazon RDS 数据库预览环境中推出[62]
    腾讯云
    • 云数据库 MySQL 发布数据库代理版本1.3.18。[70]
    • TDSQL-C MySQL 版发布数据库代理版本1.3.17。[71]
    • TDSQL-C MySQL 版8.0内核版本更新3.1.16.002,提升数据库性能与稳定性。[72]
    • TDSQL-C MySQL 版只读分析引擎发布了全新的内核版本3.2503.1.0,支持了诸多全新的内核特性。[73]
    • TDSQL-C MySQL 版本支持了创建“分析集群”。分析集群可为用户提供更加高效的数据分析查询与数据汇聚能力。分析集群可将多个数据源的库表数据实时同步到一个“只读分析引擎”实例中。分析集群采用“LibraDB 内核”,可提供高性能的复杂分析查询能力。[74]
    • 云数据库 SQL Server 支持设置事件告警,使用此功能便于用户第一时间获知运维事件及其他事件的动态。若系统检测到对应异常事件,将通过多种可选的方式向接收对象发送事件告警通知。[75]

    参考链接