跳到主要内容

体验 Cursor Agent + OceanBase MCP 的 Vibe Coding 新范式

不写一行代码,也能上线产品?AI 时代的到来或许意味着“写代码”不再是“写”代码。这一想象已逐渐变为现实,AI 正在为人们的生活与工作带来质的转变。由 AI 研究员 Andrej Karpathy 在 2025 年提出的 Vibe Coding(氛围编程),展示了一种新的开发方式:开发者通过自然语言(语音或文本)直接向 AI 表达自身意图,剩下的——从生成代码、优化结构到部分调试——统统交给 AI 搞定。这一模式下,开发者只需考虑如何清晰地表达”我想要什么”,比如“给我做个支持多语言的登录模块”,AI 就能输出相应的工程结构和实现代码。换言之,开发者专注“目标”,AI 负责“实现”。

Vibe Coding vs. 传统 AI 辅助开发

AI 辅助开发并非全新概念,然而与过往 Gemini Code Assist 这类传统 AI 开发助手强调人工逐行审核、补全代码不同,Vibe Coding 倾向于自动完成开发各环节,并弱化开发者对于底层细节的参与程度。

当然,当前行业探索距离完全“代码透明化黑箱采纳”尚有较大距离,实际实现中仍多采用人机协作与审核的混合流程。

  • 信任机制尚未完善: Vibe Coding 理想情形下,开发者可直接采用 AI 输出,但在实际项目中很难做到。尤其是在安全性和业务复杂度较高场景下,人工审核和测试依然必不可少。

  • 辅助工具不断进化: 新型 IDE 不断提高自然语言处理以及上下文感知能力,加强了 AI 代码输出质量和用户交互体验。但这些工具多局限于较标准化或原型任务,复杂系统仍然需要工程师主动把关和参与。

  • 协作及需求管理成为趋势: 随着 Vibe Coding 的发展演化,开发者之间的合作、项目之间的协同需求逐渐成为新的趋势,而 MCP(Model Coordination Protocol)等协议的出现,使多位开发者同时通过碎片化描述协作、同步调整和整合需求成为可能,智能体(如 Cursor) 则助力这些过程更加顺畅。

Cursor:新一代 AI 原生开发环境

随着 Vibe Coding 等新兴 AI 驱动的开发模式逐渐成为主流,各种 AI 原生工具应运而生,旨在为开发者带来更加便捷、用户友好的开发环境,Cursor 便是其中翘楚。 Cursor 是一款 AI 驱动的代码编辑器,通过深度理解代码库,支持用户通过自然语言实现高效编程,Cursor 下载地址如下:https://cursor.com/cn/home

相比传统“代码提示”工具,Cursor 等 AI 原生 IDE 支持更深度的自然语言-代码交互、自动关联上下文以及智能调试辅助。比如一句自然语言描述即可构建爬虫、配置依赖,甚至引入测试和异常处理,从而帮助开发者降低开发门槛,提高工程效率。

Cursor Agent + OceanBase MCP:Vibe Coding 新范式

seekdb 基于一体化架构,为用户提供向量能力,支持多模融合查询,无需引入新的技术栈,即可满足多样化的业务需求,从而降低学习成本、加速 AI 开发,成为许多开发者使用向量数据库时的优先选择。

当前,seekdb 与 Cursor 均已支持 MCP(Model Context Protocol)协议。借助 MCP 协议,开发者可以轻松基于 Cursor Agent + seekdb 实现 Vibe Coding 新范式。   MCP(Model Context Protocol)协议被视为连接 AI 模型与实际业务系统的“适配器”。通过 MCP 协议,大模型得以触达各种外部应用,例如开发过程中经常使用的 Git 版本管理、数据库软件等,基于此获得更多环境信息以自动完成各个开发环节。这意味着企业可以直接通过 MCP 协议将 seekdb 的数据服务能力无缝集成进各类 AI 应用流程,显著降低数据接口开发和集成的门槛。

前提条件

  • 您已完成部署 seekdb。

  • 安装 Python 3.11 及以上版本 和相应 pip。如果您的机器上 Python 版本较低,可以使用 Miniconda 来创建新的 Python 3.11 及以上的环境,具体可参考 Miniconda 安装指南

  • 根据所用的操作系统,安装 Git

  • 安装 Python 包管理器 uv。安装完成后,可使用 uv --version 命令验证安装是否成功:

    pip install uv
    uv --version
  • 下载 Cursor,根据自己的操作系统选择合适的版本进行安装。注意首次使用 Cursor 时,需要注册一个新账号或使用已有账号进行登录。登录后,可以创建新项目或打开已有项目。

Vibe Coding 实践

这里我们将基于 Vibe Coding 的理念,将 Coding 与数据库结合起来,快速构建一个 API 服务。

步骤一:获取数据库连接信息

联系部署人员或者管理员获取相应的数据库连接串,例如:

obclient -h$host -P$port -u$user_name -p$password -D$database_name

参数说明:

  • $host:提供 seekdb 连接 IP。
  • $port:提供 seekdb 数据库连接端口。默认是 2881,在部署 seekdb 数据库时可自定义。
  • $database_name:需要访问的数据库名称。
  • $user_name:提供租户的连接账户。默认为 root
  • $password:提供账户密码。

步骤二:安装 OceanBase MCP Sever

  1. 克隆项目到本地

    git clone https://github.com/oceanbase/mcp-oceanbase.git
  2. 进入源代码目录:

    cd mcp-oceanbase
  3. 安装依赖

    uv venv
    source .venv/bin/activate
    uv pip install

步骤三:准备 Cursor 环境

  1. 创建 Cursor 客户端的工作目录并配置 OceanBase MCP Server

    手动创建一个 Cursor 的工作目录,并用 Cursor 打开,后面 Cursor 生成的文件将放在这个目录下,示例的目录名为 cursor

    使用快捷键 Ctrl + L(Windows)或者 Command + L(MacOS)打开聊天对话框,点击右上角的齿轮,选择 MCP Tools,点击添加 Add Custom MCP 填写配置文件;

    1

    示例配置文件如下,其中 path/to/your/mcp-oceanbase/src/oceanbase_mcp_server 需要替换为 oceanbase_mcp_server 文件夹的绝对路径,OB_HOSTOB_PORTOB_USEROB_PASSWORDOB_DATABASE 需要替换为自己数据库的对应信息:

    {
    "mcpServers": {
    "oceanbase": {
    "command": "uv",
    "args": [
    "--directory",
    "/path/to/your/mcp-oceanbase/src/oceanbase_mcp_server",
    "run",
    "oceanbase_mcp_server"
    ],
    "env": {
    "OB_HOST": "***",
    "OB_PORT": "***",
    "OB_USER": "***",
    "OB_PASSWORD": "***",
    "OB_DATABASE": "***"
    }
    }
    }
    }
  2. 如配置成功,将显示 可使用 状态。

    3

步骤四:构建一个 Restful API

  1. 创建 customer 表

    输入指 创建一个 customer 表,主键是 ID,包含 name,age,telephone,location 字段,确认 SQL 语句后,点击 RUN Tool 按钮执行查询。

    4

  2. 插入测试数据

    在对话框中输入指令 插入10条测试数据,确认 SQL 语句后,点击 RUN tool。插入成功后,会有 已成功向 customer 表插入了 10 条测试数据... 的提示。

    5

  3. 创建 FastAPI 项目

    在对话框中输入提示:创建一个 FastAPI 项目,生成基于 customer 表的 RESTful API,确认 SQL 语句后,点击 Run tool 按钮执行查询。Cursor 即可自动生成 main.py 等文件,也可继续下达新的指令要求自动启动该服务等。

    6

  4. 创建虚拟环境并安装依赖

    执行如下命令,在当前目录下使用 uv 包管理工具创建虚拟环境,并安装依赖包:

    uv venv
    source .venv/bin/activate
    uv pip install -r requirements.txt
  5. 启动 FastAPI 项目

    执行如下命令,启动 FastAPI 项目:

    uvicorn main:app --reload
  6. 查看表中数据

    在命令行中运行如下命令,或者使用其他请求工具,查看表中的数据:

    curl http://127.0.0.1:8000/customers

    返回结果如下:

    [{"id":1,"name":"Alice","age":28,"telephone":"1234567890","location":"Beijing"},{"id":2,"name":"Bob","age":32,"telephone":"2345678901","location":"Shanghai"},{"id":3,"name":"Charlie","age":25,"telephone":"3456789012","location":"Guangzhou"},{"id":4,"name":"David","age":40,"telephone":"4567890123","location":"Shenzhen"},{"id":5,"name":"Eve","age":22,"telephone":"5678901234","location":"Chengdu"},{"id":6,"name":"Frank","age":35,"telephone":"6789012345","location":"Wuhan"},{"id":7,"name":"Grace","age":30,"telephone":"7890123456","location":"Hangzhou"},{"id":8,"name":"Heidi","age":27,"telephone":"8901234567","location":"Nanjing"},{"id":9,"name":"Ivan","age":29,"telephone":"9012345678","location":"Tianjin"},{"id":10,"name":"Judy","age":31,"telephone":"0123456789","location":"Chongqing"}]

    可以看到增、删、改、查的 RESTful API 已经成功生成:

    from fastapi import FastAPI, HTTPException, Depends
    from pydantic import BaseModel
    from typing import List
    from sqlalchemy import create_engine, Column, Integer, String
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker, Session

    # OceanBase 连接配置(请根据实际情况修改)
    DATABASE_URL = "mysql://***:***@***:***/***"

    engine = create_engine(DATABASE_URL, echo=True)
    SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
    Base = declarative_base()

    class Customer(Base):
    __tablename__ = "customer"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String(100))
    age = Column(Integer)
    telephone = Column(String(20))
    location = Column(String(100))

    class CustomerCreate(BaseModel):
    id: int
    name: str
    age: int
    telephone: str
    location: str

    class CustomerUpdate(BaseModel):
    name: str = None
    age: int = None
    telephone: str = None
    location: str = None

    class CustomerOut(BaseModel):
    id: int
    name: str
    age: int
    telephone: str
    location: str
    class Config:
    orm_mode = True

    def get_db():
    db = SessionLocal()
    try:
    yield db
    finally:
    db.close()

    app = FastAPI()

    @app.post("/customers/", response_model=CustomerOut)
    def create_customer(customer: CustomerCreate, db: Session = Depends(get_db)):
    db_customer = Customer(**customer.dict())
    db.add(db_customer)
    try:
    db.commit()
    db.refresh(db_customer)
    except Exception as e:
    db.rollback()
    raise HTTPException(status_code=400, detail=str(e))
    return db_customer

    @app.get("/customers/", response_model=List[CustomerOut])
    def read_customers(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    return db.query(Customer).offset(skip).limit(limit).all()

    @app.get("/customers/{customer_id}", response_model=CustomerOut)
    def read_customer(customer_id: int, db: Session = Depends(get_db)):
    customer = db.query(Customer).filter(Customer.id == customer_id).first()
    if customer is None:
    raise HTTPException(status_code=404, detail="Customer not found")
    return customer

    @app.put("/customers/{customer_id}", response_model=CustomerOut)
    def update_customer(customer_id: int, customer: CustomerUpdate, db: Session = Depends(get_db)):
    db_customer = db.query(Customer).filter(Customer.id == customer_id).first()
    if db_customer is None:
    raise HTTPException(status_code=404, detail="Customer not found")
    for var, value in vars(customer).items():
    if value is not None:
    setattr(db_customer, var, value)
    db.commit()
    db.refresh(db_customer)
    return db_customer

    @app.delete("/customers/{customer_id}")
    def delete_customer(customer_id: int, db: Session = Depends(get_db)):
    db_customer = db.query(Customer).filter(Customer.id == customer_id).first()
    if db_customer is None:
    raise HTTPException(status_code=404, detail="Customer not found")
    db.delete(db_customer)
    db.commit()
    return {"ok": True}

更多操作

更多体验 seekdb 的 AI Native 特性以及尝试基于 seekdb 搭建 AI 应用的使用指导,参见:

除了使用 SQL 进行操作之外,也支持通过 seekdb 提供的 Python SDK(pyseekdb)进行操作,使用方法参见 通过 Python SDK 体验嵌入式pyseekdb 概述