我们用了好多年的Mysql,这次终于开始拥抱AI了,包括向量存储与检索,支持内容生成、摘要和检索增强生成(RAG)以及 LLM支持等。锋哥今天来好好聊聊Mysql对AI的支持 。
目录
MySQL 是一个什么样的数据库
开始拥抱 AI
完全在本地跑,用的是 MySQL AI
从提问到回答,中间发生了什么
三个可以上手的例子
适合现在就用吗
MySQL 是一个什么样的数据库
如果你写过后台,大概率跟 MySQL 打过交道。它是一个开源的关系型数据库,1995 年由 Michael Widenius 等人写出来,后来进入 Oracle 旗下,一路走到今天。网站的用户表、订单表、库存表,很多都躺在它里面。
它擅长的就是用表把数据分门别类存好,用 SQL 把它们查出来,用事务保证扣库存和写订单一起成功,或者一起回滚。再往后,主从复制、备份、权限,把一套系统撑到能上线。
很长一段时间里,模型和向量检索要另外搭一套服务,再把库里的数据导过去。2024 年 7 月,MySQL 9.0 带来了原生的 VECTOR
类型,云上的 MySQL HeatWave 把生成式 AI 做进了数据库。想把同样的能力留在自己机房里,企业版还有 MySQL AI 这个本地选项。有些 AI 能力,可以在 MySQL 里完成。
开始拥抱 AI
可以分成三块来看。用之前先分清,能少走弯路。
第一块,向量可以当列来存。 从 MySQL 9.0 起,表里可以有一种叫 VECTOR 的列。一个向量就是一串小数,用来表示一句话、一段文档在“意思”上的位置。意思相近的内容,这些小数也更接近。社区版可以建这种列,也能用 STRING_TO_VECTOR() 写入、用 VECTOR_TO_STRING() 读出来。它默认长度是 2048 维,上限 16383 维,每一维是一个单精度浮点数。这种列目前不能当主键或普通索引。
第二块,库里能做语义检索和问答。 DISTANCE() 用来算两个向量有多近,支持余弦、点积和欧氏距离。生成式这一侧会把 PDF、HTML、TXT、PPT、DOCX 切成小段,生成向量,存进普通的 MySQL 表。之后你用自然语言提问,sys.ML_RAG 会先找出相关段落,再交给库内的大模型组织答案,并带上引用。在 HeatWave 上,MySQL 9.5.0 起还可以把“语义相近”和“关键词命中”合在一起查。
第三块,预测类的机器学习也在库里。 AutoML 让你对一张业务表调用 sys.ML_TRAIN,比如判断一个客户会不会再次下单。训练和预测都用 SQL 完成,数据留在原来的库里。
这三块里,向量列本身从 MySQL 9.0 就有,社区版可以存、可以做格式转换。库内大模型、向量存储和 AutoML 则有两个落点:完全在本地跑,用企业版的 MySQL AI;跑在云上,用 HeatWave GenAI。
完全在本地跑,用的是 MySQL AI
如果你的需求是 AI 功能整个留在自己的机器上,对应的产品是 MySQL AI,它是 MySQL 企业版的本地部署选项。内置大模型、向量存储、AutoML 这些能力,它都带到了本地环境。模型在 CPU 上运行,不用单独配 GPU。
文档放在本机目录里即可。安装时会指定一个允许读取的目录,默认常见的是 /var/lib/mysql-files。下面这句把一份退货说明读进来,切段、编码,再写进向量表:
CALL sys.VECTOR_STORE_LOAD( 'file:///var/lib/mysql-files/demo-directory/return-policy.pdf', @options);
问法仍然是后面的 ML_EMBED_ROW、
ML_RAG 和 ML_TRAIN。可以先在本地用 MySQL AI 把应用写出来。以后如果需要更好的性能和更丰富的功能,再迁到云上的 HeatWave,应用代码不用改。文档从哪读要按环境换一下路径:本地是 file:// 指向的本机目录,云上是对象存储。
它随 MySQL 企业版本地部署。当前支持 Oracle Linux 8 和 Red Hat Enterprise Linux 8,需要企业版许可。官方给出的机器参考是 32 个逻辑 CPU、128GB 内存和 512GB 磁盘。社区版适合先熟悉 VECTOR 这种列。
从提问到回答,中间发生了什么
想象一家小店的客服。顾客问:“这件衣服不合适,几天内能退?”规则写在退货说明里,顾客不会去翻那份 PDF。
MySQL AI 和 HeatWave 走的是同一条路:
大模型见过很多公开资料,未必见过你店里的退货规则。先把你自己的文档变成向量放进表里,回答时只拿相关的那几段当依据。答案会贴着你的制度走,也方便回头核对原句。
三个可以上手的例子
第一段在 MySQL 9 上就能体会向量列长什么样。后两段在 MySQL AI 和 HeatWave 上都能用,例程名字一样。向量只用了 3 维,是为了让人眼能看懂。手写的这几位小数只为演示,真实嵌入由模型生成,通常有几百维,并且要和提问用同一个模型。
1. 建一张带向量的问答表
CREATE DATABASE db_shop;USE db_shop;
CREATE TABLE t_faq ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, question VARCHAR(200) NOT NULL, answer TEXT NOT NULL, embedding VECTOR(3) NOT NULL);
INSERT INTO t_faq (question, answer, embedding) VALUES('怎么退货', '签收后 7 天内可申请退货。', STRING_TO_VECTOR('[0.90, 0.10, 0.05]')),('运费怎么算', '满 99 元包邮,否则收取 8 元。', STRING_TO_VECTOR('[0.10, 0.85, 0.15]')),('会员有什么权益', '会员下单享 9 折,生日当月再减 20 元。', STRING_TO_VECTOR('[0.15, 0.10, 0.90]'));
SELECT id, question, VECTOR_TO_STRING(embedding) AS embedding_textFROM t_faq;
STRING_TO_VECTOR() 吃的是带方括号的字符串,VECTOR_TO_STRING() 再把它变回人能读的样子。TO_VECTOR()、
FROM_VECTOR() 分别是这两个函数的同义词。
2. 找和问题最接近的答案
在 MySQL AI 或 HeatWave 上,可以用余弦距离把“想退货”这种问法对上退货那一行。距离越小,越接近。
SET @q = STRING_TO_VECTOR('[0.88, 0.12, 0.06]');
SELECT id, question, answer, DISTANCE(embedding, @q, 'COSINE') AS scoreFROM t_faqORDER BY scoreLIMIT 2;
第三个参数还可以写成 'DOT' 或 'EUCLIDEAN'。这里的 score 是距离,小的排在前面。
3. 让数据库按文档回答
真实项目里,向量交给嵌入模型生成。MySQL AI 和 HeatWave 里对单句可以这样:
SET @text = '签收后 7 天内可以退货,运费满 99 元包邮。';
SELECT sys.ML_EMBED_ROW(@text, JSON_OBJECT('model_id', 'all_minilm_l12_v2')) INTO @text_embedding;
整表文本用 sys.ML_EMBED_TABLE。PDF 这类文件先装进向量存储:本地 MySQL AI 用上一节的 file:// 路径,云上 HeatWave 从对象存储读取。问答时指定这张向量表:
SET @query = 'What is the return window?';SET @options = JSON_OBJECT( 'vector_store', JSON_ARRAY('db_shop.demo_embeddings'), 'model_options', JSON_OBJECT('language', 'en'));
CALL sys.ML_RAG(@query, @output, @options);SELECT JSON_PRETTY(@output);
返回的 JSON 里,text 是模型组织好的回答,citations
是它参考过的段落和距离。language 用两位语言代码,默认是 en。中文知识库先看你当前版本文档里的语言列表,再改这个值。MySQL 9.2.1 之后,检索会按嵌入模型去匹配同一套向量表,问题和文档要用同一个模型编码。
如果还想做预测,比如订单表里有一列“会不会再次购买”,AutoML 是另一条路。MySQL AI 和 HeatWave 都提供这组例程:
CALL sys.ML_TRAIN( 'db_shop.t_order', 'will_buy_again', JSON_OBJECT('task', 'classification'), @model);
问答靠的是“找出相似段落再生成”。预测靠的是“用历史数据学一个分类模型”。两件事都用 SQL 发起,解决的问题不一样。
适合现在就用吗
已经在用 MySQL,又希望客服、制度和产品说明能被直接问到。要完全在本地运行,用企业版的 MySQL AI,模型跑在 CPU 上。可以上云,就用 HeatWave GenAI。两边的问答和训练例程是同一套,本地写好的应用,以后可以不改代码迁到 HeatWave,换来更好的性能和更丰富的功能。业务数据留在 MySQL 里,SQL 仍然是入口。
本地社区版想先认识 VECTOR 这种列,用本文第一段就够了。距离计算、库内嵌入和 ML_RAG 需要 MySQL AI 或 HeatWave。向量列不能当索引,数据量上来之后,召回方式和维度要按文档再设计。这几段示例用来把路走通,上生产前还得按数据量重做一遍。
MySQL 仍然是那个存订单、跑事务的数据库。变化在于,按意思找资料、生成一段带出处的回答,也可以从同一条 SQL 会话里开始。
最近锋哥录制了一些AI编程视频教程
高清视频+源码+领取。
扫描下方公众号【小锋学AI 】回复:888,
可获取下载链接
👇👇👇