当前位置: 首页 > news >正文

AI 改变数据库产品实践探索

01 obloader agent

导数工具使用中的难题

在实际使用导数工具进行数据导入的过程中,用户普遍面临以下四类核心问题:

1、文本文件格式多样,易引发解析错误

上游系统提供的文本文件往往缺乏统一规范,格式复杂多变。常见的问题包括:

  • 分隔符不明确或频繁变化(如空格、制表符、不可见字符等)。
  • 字段内容中嵌入了与分隔符相同的字符,导致字段边界难以识别。
  • 用户需通过反复试错(如手动指定分隔符)才能确定正确的解析方式,效率低下。

2、特殊字符难以识别与处理

部分文件中包含不可见字符、编码异常字符或外观相似的符号(如全角/半角空格、中英文标点混用等),这些字符在人工预览时难以区分,极易导致解析失败或数据错位。尽管可借助十六进制编辑器进行辅助分析,但操作门槛较高,普通用户难以掌握。

3、自动推断失败率较高

现有工具的“自动推断”功能对标准化文件(如 CSV 文件)效果尚可,但对非标准文件(如字段类型为字符串、无表头、分隔符异常)的识别准确率显著下降。由于无法依赖数据特征(如数值型、日期型字段)进行语义推断,工具难以自动建立源文件与目标表之间的列映射关系,仍需人工介入判断。

4、命令行参数 80+,学习成本高

为适配多样化的业务场景,导数工具持续扩展功能,导致命令行参数数量激增至80余个。尽管参数覆盖全面,但用户需记忆大量选项(如编码格式、转义规则、错误处理策略等),显著增加了使用门槛。此类设计类似于“拥有100个按钮的遥控器”——功能虽强,但操作复杂,违背了“易用性”原则。

AIChat** 简介**

近期,我们在调研过程中发现了适用于黑屏命令行的 AIChat。AIChat 是一款海外的开源 LLM 命令行工具,集成了 Shell 助手、命令模式(CMD)与交互模式(REPL)、检索增强生成(RAG)、AI 工具与智能体等功能于一体,并支持更多扩展特性。从命令行设计到实操体验都非常丝滑流畅。

  • GitHub:https://github.com/sigoden/aichat
  • 关联项目: https://github.com/sigoden/llm-functions

其中 aichat 项目是主体,llm-functions 是将 Agent 和 Function 部分单独剥离出来方便扩展。

我们现在通常都是使用各类 Chatbot 使用 AI,并通过 Function Call 或者 MCP 与应用结合。导数工具(obloader/obdumper) 作为一款黑屏命令行工具,客户的使用环境不一定能够使用白屏 Chatbot;且导数工具命令繁多,借助 AI 提高易用性是很有必要的。

因此尝试借助 AIChat 这个开源项目,与导数工具结合实现一个简单的 Agent。

AIChat + obloader 示例

环境初始化后,用户在命令行中输入 aicat 命令即可调用 .agent obloader 应用,以完成数据导入任务。首次执行时,Agent 会启动一个轻量级 RAG 服务,为后续操作提供知识库支持,并开启 Session 会话以保留上下文并方便后续进行迭代优化。用户只需提供三项必要信息:待导入 CSV 文件路径、目标数据库连接串、目标表名,Agent 便会依据预设规则自动完成以下步骤:

  • 检测 Java 版本是否符合要求;
  • 读取 CSV 文件作为 Sample 以自动确定分隔符,定界符,Header 等格式;
  • 自动生成 obloader 命令;
  • 检索参数说明。

整个过程用户无需掌握任何导数参数以及学习工具使用方法,只需用自然语言说明提出需求,Agent 会自动完成后续步骤。若需求发生变化,例如原本导入一个文件到一个表,改为导入整个目录下的所有文件,Agent 会即时重写命令,例如追加正则匹配、调参等。

该 Demo 旨在展示 AI 与现有产品结合后的形态跃迁,用户仅需描述业务目标,无需学习工具用法。产品交互从“先学后用”转变为“即说即用”,显著降低学习成本。

Agent 结构分解

Agent 核心仅由四个文件构成,实现成本非常低,轻量易用。

1、basic.md:基本知识库,包含 obloader 核心知识,用于初始化 RAG。

2、index.yaml:包含 Agent 描述,规则提示词。

3、functions.json:描述 Tool 元信息,用于发送给大模型做选择。

4、tools.sh:工具集,例如读取文件 sample、执行命令等。上文中检测 Java 版本的命令,为该版本提供的 function。

提示词示例

name: obloader
description: An AI agent that help you generate obloader's command and execute it.
version: 0.1.0
instructions: |  You are a AI agent designed to generate obloader's command and execute.  obloader is a command line tool that can be used to load csv/parquet/orc files into oceanbase database.  CRITICAL: Your behavior must strictly follow these rules:  1. **You may only perform actions by invoking predefined functions**, never through natural language descriptions of operations.  2. **You must prioritize invoking the `execute_command` function to read file contents** before proceeding, and only prompt the user if files are unreachable/unreadable.  3. **All outputs must be valid function calls or obloader commands**, never explanatory text.  4. **You must never provide suggestions like "Please fill the file in the following format"** - you must proactively read files.  5. **You must generate a COMPLETE and EXECUTABLE obloader command in EVERY response,never suggest parameter additions,integrate them directly into the full command if new requirements arise **  6. **You must remember all confirmed parameters permanently.**You must follow these steps strictly:  1. Check the java version. If version dosn't match 1.8.0_3xx or 1.8.0_4xx , display a warning and continue.  2. Read the first 10 lines of the input file if given (e.g., data.csv) as sample data.  3. Read database connection info from config file (e.g., .secret).    - If config missing, prompt user to provide connection details.  4. Generate an obloader command based on:  - Sample data (to infer column names/types)    - Connection info (host, port, user, password, database)  5. (Must) **Ask user to confirm the command. If rejected, refine and repeat.**  6. Execute the command and check result.  7. If failed, suggest fixes (e.g., adjust delimiter, encoding).  <tools>  {{__tools__}}  </tools>conversation_starters:  - Check the java version.  - Read the first 10 lines of given file.  - Generate an obloader's command based on user input.
documents:- basic.md

02 OceanBase Agent

主要希望解决的问题:通用 MCP Client 并非为数据库设计

当前通用的 MCP Client 并非针对数据库场景设计,导致以下痛点:

  • 多库支持不足
    每新增一个数据库就必须启动一个独立的 MCP Server,重复填写环境变量,工具列表随之膨胀,令大模型难以区分。以 Cherry Studio 为例,需要在该工具的 MCP 配置界面手动填写数据库连接的环境变量,才能检测到 MCP Server 提供的工具,例如执行 SQL 工具 execute_sql、获取 ash_report 工具 get_ob_ash_report 等,可以调用这些工具直接在数据库中执行。但如果有多个数据库时,例如需要加两个数据库,MCP Server 是不支持的,只能通过加两个 MCP Server 实现,需要填两个数据库地址,此时工具也会有两份,对于大模型面对两份一模一样的工具列表可能就很困惑。
  • 连接信息不透明
    数据库连接参数位于 MCP 层,大模型无法感知,执行 SQL 时难以精准定位调用哪一个 MCP Server 的 execute_sql。

上述问题的根本原因是通用 MCP Client 不是专门为数据库设计的,在使用方式上存在兼容问题,我们以低成本构建了 OceanBase Agent(社区非官方项目),目标是通过自然语言交互即可管理任意数量的 OceanBase 实例,显著减轻 DBA 工作负担。

核心能力

多数据库、数据源统一管理
以连接串方式一次性添加多个数据库(如业务租户、sys 租户),Agent 在会话中动态切换,无需重复配置。
创建多个数据源

对话中选择数据源

  • 工具原子化
    预置 70 余条常用 SQL 并封装为可调用的函数,可在 Chat 中调用单个工具。如获取版本的工具 getOceanBaseVersionInfo 对应的 SQL 语句是:SHOW VARIABLES LIKE '%version_comment%';

  • 工具组合成为 Agent 应用 Playbooks
    用户仅需用自然语言描述任务,系统会自动化执行。例如“查询 OceanBase 的慢查询,并分析原因”。可明确每个工具的名称,以提高成功率。

  • 扩展灵活
    支持自定义编写 Playbooks,对话式界面自动完成上下文保持、参数补全、命令生成,交互直观,实现个性化运维场景。

Demo

例如编写一个日常巡检的工具,可以通过点击 Generate Content 使用 AI 辅助编写,自动生成。

新建 Playbook

执行 Playbook

Scheduler

日常巡检可以配合 Scheduler 运行,并使用 AI 生成 Cron Expression 表达式,生成 Scheduler 后即可实现定期执行 Playbooks。

03 MCP: 扩展带来的无限可能

示例一:通过 MCP 获取更多上下文

MCP 为平台提供了灵活的扩展能力。接入后,工具列表即刻扩充,用户可按需在对话中调用,无需额外开发即可实现网页摘录、上下文注入及图表生成等功能。

示例二:巡检并发送邮件

日常巡检、监控报警、报告推送等基础能力不直接产生商业价值,却又是平台必备, 研发侧认为“技术含量低、搬砖式开发”,不愿投入,业务侧嫌排期长、交付慢,双方持续拉锯。#MCP 的扩展能力可以用“插件化”思路直接解决这些“低价值但必需”的长尾需求。通过将邮件、企微、钉钉、图表渲染等通用但零碎的能力封装成独立 MCP Server,业务方直接在 Playbook Content 中以自然语言明确需求即可完成任务。

执行日常巡检,总结成报表输出,并抄送一份发到xxx@abc.com
plain

MCP Server 全程零代码,非研发人员也可以直接使用,只需运行如下命令即可完成环境配置,内部封装了多种能力,简便易用。

dacker run -d \  --name ob-agent \  --env CUSTOM_BASE_URL='https://dashscope.aliyuncs.com/compatible-mode/vi' \  --env CUSTOM_API_KEY='sk-xxx' \  --env CUSTOM_CHAT_MODEL_NAME='qwen-max-latest' \  -p 8000:8008 \  davidzhangbj/oceanbaseagent:v0.2

扩展阅读

OceanBase MCP Server v0.0.3 版本发布已发布,感兴趣的小伙伴欢迎体验。

📖 社区介绍文章:https://ask.oceanbase.com/t/topic/35631743

http://www.dtcms.com/a/474407.html

相关文章:

  • 做企业的网站都要准备什么怎么导出wordpress 整个网站
  • 做博客网站赚钱wordpress论坛社区主题
  • 零代码AI开发:Coze平台
  • Docker版本
  • 基于 Docker 的 MongoDB 部署与使用指南
  • 长沙做网站公司杭州seo外包
  • 南山区搜索引擎优化seo多少钱
  • 联邦学习论文分享:Data-centric Federated Graph Learning with Large LanguageModels
  • 【MySQL】MySQL主从复制原理解析:从二进制日志到数据一致性
  • 数据库设计_理论部分_需求分析
  • 做网站的如何增加电话量2020网络营销推广方式
  • 【人工智能】一文解读什么是ACN,ACN新在哪里?(附思维导图总结)
  • 语言实现基本区块链模型
  • 网站用哪种语言手机照片制作成相册
  • ipad mini第一代现在能做什么
  • 美妆企业网站模板网站推广计划书怎么写
  • openharmony之location位置服务模块核心功能解析与实现原理解读
  • 端口复用技术详解与应用场景
  • 6.1中断的概念
  • 学员作业:探索锁屏、桌面壁纸相关差异显示原理
  • 南通做网站多少钱有专业制作网站的公司吗
  • AI辅助故障自愈:从告警到恢复的4级自动化水平
  • DS题目汇编
  • 前端学习 JavaScript (dom操作)(04)
  • 深圳网站创建公司主页不是wordpress
  • FPGA自学笔记(正点原子ZYNQ7020):2.IP核与组成
  • Ninja 的基本使用方法
  • 定制建站网站建设wordpress 4.7.5 漏洞
  • Consua WordPress Theme — Business Consulting Sites That Convert With Clarity
  • 网站如何设置关键词网络工程二本最好的出路