引言

在人工智能迅猛发展的今天,传统关系型数据库正经历着前所未有的变革。MySQL作为世界上最流行的开源数据库,正在通过向量化扩展实现与AI技术的深度融合。本文以MySQL为例,探索向量数据库的前沿技术,并通过实际Python代码示例展示如何构建智能应用。

什么是向量与向量嵌入

向量在数学上是一组有序的数字列表,表示为[v₁, v₂, ..., vₙ],其中每个数字称为分量,对应一个维度。在AI领域中,向量是高维空间中的点,用于表示复杂数据的特征。

向量嵌入是一种特殊类型的向量,专门用于将单词、句子、图像等复杂数据转换为数字表示,并捕捉其内在含义或语义关系。你可以将向量嵌入理解为一个对象的"数字指纹"或"DNA序列"。向量嵌入的强大之处在于其两个关键特性:

  1. 语义相似性含义相近的对象,它们的向量在空间中的距离会很近。例如,"猫"和"狗"都是宠物,它们的向量距离会很近。
  2. 关系类比向量空间中可以捕捉到类比关系。最著名的例子是:"国王"的向量 - "男人"的向量 + "女人"的向量 ≈ "女王"的向量。

在实际应用中,文本、图像、音频等非结构化数据通过嵌入模型(如BERT、CLIP等)被转换为高维向量,使得计算机能够通过数学运算理解和处理这些数据的语义内容。

为什么MySQL需要向量能力?

传统MySQL擅长处理结构化数据,但在AI时代面临显著挑战:

  1. 非结构化数据处理短板企业80%以上的数据为非结构化数据(用户评论、产品文档、客服对话等),传统MySQL只能以TEXT/BLOB类型存储,无法理解其语义内涵。
  2. 检索方式局限依赖关键词匹配(LIKE/全文索引),无法实现语义相似性检索,难以满足智能搜索、推荐系统等现代应用需求。
  3. 架构复杂性为实现向量检索,传统方案需要与独立向量数据库(如Milvus、Chroma)联动,增加了系统复杂度和运维成本。

MySQL引入向量能力后,可带来三大核心价值:

  1. 架构简化:统一管理结构化数据与向量数据,降低运维成本
  2. 能力互补:支持"SQL条件过滤+向量相似性检索"的复合查询
  3. 生态兼容:依托MySQL成熟的事务机制和生态工具,保障数据安全性和稳定性

MySQL向量核心特性解析

MySQL 8.4.0是向量检索能力的里程碑版本,引入了以下核心特性

原生向量数据类型

MySQL 8.4.0引入了VECTOR数据类型,支持自定义向量维度(最大32768维),适配主流Embedding模型

```sql

CREATE TABLE tech_docs (

    id INT AUTO_INCREMENT PRIMARY KEY,

    title VARCHAR(255) NOT NULL,

    content TEXT NOT NULL,

    embedding VECTOR(768) NOT NULL -- 768维向量字段

);

```

原生向量索引

MySQL集成了HNSW(分层导航小世界)索引,支持三种距离计算方式:

  1. 余弦距离(COSINE)
  2. 欧氏距离(L2)
  3. 曼哈顿距离(MANHATTAN)

```sql

CREATE INDEX idx_embedding ON tech_docs

USING HNSW (embedding) WITH (

    metric_type = 'COSINE',

    m = 16,

    ef_construction = 64

);

```

原生相似度计算函数
提供VECTOR_DISTANCE函数计算向量相似度,值越小表示语义越相似

```sql

SELECT title, 1 - VECTOR_DISTANCE(embedding, '[0.12,0.34,...]', 'COSINE') AS similarity

FROM tech_docs

ORDER BY similarity DESC;

```

MySQL向量索引算法详解

MySQL向量扩展支持多种索引算法,满足不同场景需求:

HNSW算法

分层导航小世界算法是当前性能最优的近似最近邻搜索算法之一。其核心思想是构建分层图结构,高层用于快速导航,底层用于精细搜索。HNSW适合大规模数据集,查询复杂度为O(log n),在千万级数据量下仍能保持高效检索。

IVF算法

倒排文件系统算法通过聚类思想将向量空间划分为多个区域,搜索时只在少数几个区域中进行。IVF适合大规模数据集,内存占用相对较小,但需要训练阶段确定聚类中心,准确率略低于暴力搜索。

Flat 算法

暴力搜索是最直接的向量搜索方法,对所有向量进行线性扫描,精确计算查询向量与数据库中每个向量的距离。优点是100%准确,无需训练过程,但查询复杂度O(n),数据量大时性能急剧下降。

从查询速度,准确率等指标,三种算法对比表如下:

特性​

FLAT​

IVF​

HNSW​

查询速度​

慢(O(n))

中等

快(O(log n))

准确率​

100%

中等

内存占用​

中等

较高

适用数据量​

<1万

百万级

千万级+

Python+MySQL向量数据库实战:构建智能问答系统

下面我们通过一个完整的示例,展示如何使用Python将AI模型与MySQL向量数据库结合,构建一个智能问答系统。

环境准备

首先安装必要的Python包:

```shell

pip install mysql-connector-python langchain openai sentence-transformers

```

数据库表结构设计

创建支持向量存储的MySQL表:

```sql

-- 创建数据库

CREATE DATABASE ai_knowledge_base CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建知识表

CREATE TABLE knowledge_items (

    id BIGINT AUTO_INCREMENT PRIMARY KEY,

    title VARCHAR(500) NOT NULL COMMENT '知识标题',

    content TEXT NOT NULL COMMENT '知识内容',

    content_vector VECTOR(1536) NOT NULL COMMENT '内容向量(1536维适配OpenAI模型)',

    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    

    -- 向量索引

    INDEX content_vector_idx (content_vector) USING VECTOR

) COMMENT='知识库表(带向量搜索)';

-- 创建余弦相似度计算函数

CREATE FUNCTION cosine_similarity(a VECTOR, b VECTOR) RETURNS FLOAT

DETERMINISTIC

RETURN COSINE_SIMILARITY(a, b);

```

使用 LangChain和OpenAI 构建智能问答系统

```python

from langchain.vectorstores import MySQLVectorStore

from langchain.embeddings import OpenAIEmbeddings

from langchain.llms import OpenAI

from langchain.chains import RetrievalQA

import os

class AdvancedMySQLVectorQA:

    def __init__(self):

        # 设置OpenAI API密钥

        os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

        

        self.embeddings = OpenAIEmbeddings()

        self.llm = OpenAI(temperature=0)

    

    def create_vector_store(self, documents):

        """创建向量存储"""

        vectorstore = MySQLVectorStore.from_documents(

            documents=documents,

            embedding=self.embeddings,

            table_name="knowledge_items",

            database="ai_knowledge_base"

        )

        return vectorstore

    

    def create_qa_chain(self, vectorstore):

        """创建问答链"""

        qa_chain = RetrievalQA.from_chain_type(

            llm=self.llm,

            chain_type="stuff",

            retriever=vectorstore.as_retriever()

        )

        return qa_chain

# 使用示例

documents = [

    "MySQL向量扩展支持AI应用开发",

    "语义搜索比传统关键词搜索更理解用户意图",

    "HNSW算法优化了高维向量的近似最近邻搜索"

]

advanced_qa = AdvancedMySQLVectorQA()

vector_store = advanced_qa.create_vector_store(documents)

qa_chain = advanced_qa.create_qa_chain(vector_store)

# 提问

answer = qa_chain.run("MySQL如何支持AI应用?")

print(answer)

```

总结

MySQL向量数据库代表了传统数据库与AI技术融合的重要方向。通过本文的介绍和代码示例,可以看到MySQL已经具备了支持AI应用的基本能力,为开发者提供了架构简化、技术栈统一的解决方案。

对于大多数中小型AI应用,MySQL向量扩展提供了兼顾传统业务与AI需求的实用方案。随着技术的不断成熟,它有望成为AI应用开发的重要基础设施,帮助更多企业低成本、高效率地落地人工智能应用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐