大模型的爆发式增长正在重塑数据管理的底层逻辑。传统关系型数据库MySQL在这场变革中并非旁观者——通过向量检索、MCP协议接入、Text2SQL智能体等技术的深度融合,MySQL正在完成从“结构化数据存储引擎”到“AI原生数据基座”的进化。本文将围绕三条技术主线展开:MySQL原生向量检索与RAG、MCP协议驱动的LLM-MySQL交互,以及Text2SQL智能体架构,以完整的代码实现和架构设计呈现大模型时代MySQL的技术纵深。
传统MySQL擅长处理结构化数据与精确匹配,但面对非结构化文本的语义检索需求时,LIKE模糊匹配和全文索引显得力不从心。MySQL从8.0.31开始引入VECTOR数据类型,8.4.0版本更进一步,首次加入原生VECTOR类型和HNSW向量索引。对于无法升级的存量8.0.x系统,也可通过“字符串存储向量+自定义函数”的兼容方案实现向量检索。
以下以电商场景为例,为产品描述构建语义搜索能力:
-- 创建支持向量检索的数据库
CREATE DATABASE ai_shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE ai_shop;
-- 创建产品表,包含向量字段(1536维适配OpenAI text-embedding-3-small)
CREATE TABLE products (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '产品名称',
description TEXT COMMENT '产品描述',
description_vector VECTOR(1536) NOT NULL COMMENT '描述文本嵌入向量',
category VARCHAR(64) COMMENT '产品分类',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
-- 为向量字段创建HNSW索引(MySQL 8.4.0+)
INDEX description_vector_idx (description_vector) USING VECTOR
) COMMENT='产品表(带向量语义检索)';
-- 创建余弦相似度计算函数(简化查询)
CREATE FUNCTION cosine_similarity(a VECTOR, b VECTOR)
RETURNS FLOAT DETERMINISTIC
RETURN COSINE_SIMILARITY(a, b);关键设计要点:
VECTOR(1536):维度必须与所选Embedding模型严格匹配USING VECTOR:MySQL 8.4.0+专用的向量索引,基于HNSW算法,检索效率远优于全量扫描Maven依赖配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.29.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.29.0</version>
</dependency>application.yml配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/ai_shop?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
openai:
api-key: ${OPENAI_API_KEY}
embedding-model: text-embedding-3-small核心实体与Repository:
// Product.java
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
@Table("products")
public class Product {
@Id
private Long id;
private String name;
private String description;
private Vector descriptionVector; // 自定义Vector类型
private String category;
private LocalDateTime createdAt;
// getters/setters...
}
// ProductRepository.java
@Repository
public interface ProductRepository extends CrudRepository<Product, Long> {
// 向量相似度查询 - 查找与目标向量最相似的N个产品
@Query("""
SELECT p.*,
COSINE_SIMILARITY(p.description_vector, :targetVector) AS similarity
FROM products p
WHERE p.category = :category -- 结构化过滤 + 向量检索复合查询
ORDER BY COSINE_SIMILARITY(p.description_vector, :targetVector) DESC
LIMIT :limit
""")
List<ProductWithSimilarity> findSimilarByCategory(
@Param("targetVector") Vector targetVector,
@Param("category") String category,
@Param("limit") int limit
);
}向量化服务与语义搜索:
@Service
public class SemanticSearchService {
@Autowired
private ProductRepository productRepository;
private final EmbeddingModel embeddingModel;
public SemanticSearchService() {
this.embeddingModel = new OpenAiEmbeddingModel(
OpenAiEmbeddingModelName.TEXT_EMBEDDING_3_SMALL
);
}
// 将文本转换为向量
public Vector embedText(String text) {
List<Float> embedding = embeddingModel.embed(text).content();
return new Vector(embedding);
}
// 语义搜索:用户输入自然语言,返回语义匹配的产品
public List<ProductWithSimilarity> semanticSearch(String query, String category, int limit) {
Vector queryVector = embedText(query);
return productRepository.findSimilarByCategory(queryVector, category, limit);
}
// 批量入库:将产品描述向量化后存入MySQL
public void indexProducts(List<Product> products) {
products.forEach(p -> {
Vector vec = embedText(p.getDescription());
p.setDescriptionVector(vec);
productRepository.save(p);
});
}
}向量检索的真正价值在于与传统SQL条件的结合:
-- 查询"2024年发布的、与'MySQL向量检索'语义相似的技术文档"
SELECT d.id, d.title, d.publish_year,
COSINE_SIMILARITY(d.content_vector, VECTOR('[0.12, -0.34, ...]')) AS similarity
FROM documents d
WHERE d.publish_year = 2024
AND d.doc_type = 'technical'
AND COSINE_SIMILARITY(d.content_vector, VECTOR('[0.12, -0.34, ...]')) > 0.75
ORDER BY similarity DESC
LIMIT 10;这种“结构化过滤+向量语义检索”的复合模式,是MySQL相较独立向量数据库的差异化优势——无需数据搬迁,一套SQL完成全部查询。
MCP(Model Context Protocol)是一个让AI助手能够与外部系统安全交互的开放协议。SQL-MCP是该协议在数据库领域的实现,作为连接LLM与MySQL的桥梁,允许大模型进行元数据查询、数据采样和只读SQL操作。
安装与启动:
# 全局安装SQL-MCP
npm i -g @polarisxb/sql-mcp
# Stdio模式启动(适合Cursor等本地工具集成)
sql-mcp --type mysql \
--host 127.0.0.1 --port 3306 \
--user root --password your_password --database your_db \
--transport stdio
# HTTP模式启动(作为独立服务)
sql-mcp --type mysql \
--host 127.0.0.1 --port 3306 \
--user root --password your_password --database your_db \
--transport http --port 8080SQL-MCP提供了一套完整的数据库智能操作工具:
工具 | 功能 | 示例 |
|---|---|---|
explainQuery(sql) | 解释查询计划,分析表连接、过滤条件 | 识别慢查询根因 |
optimizeQuery(sql) | 给出索引建议和SQL改写方案 | 自动优化复杂查询 |
indexAdvisor(sql) | 专注索引建议,输出结构化证据 | 推荐最佳索引组合 |
rewriteQuery(sql) | 只读等价改写(分页优化、避免SELECT *) | Keyset分页改造 |
fixQuery(sql, error) | 基于错误信息提供修复建议 | 自动修正语法错误 |
doctor() | 系统自检(连通性、冗余索引统计) | 健康巡检 |
腾讯云TencentDB MySQL MCP在此基础上更进一步,提供了实例管理级别的9个核心API,覆盖日常数据库管理80%的场景:
# Docker部署TencentDB MySQL MCP
git clone https://github.com/TencentCloud/mcp-server-cdb.git
cd mcp-server-cdb
docker build -t tencentcloud-mcp-server-cdb .
docker run -d --name mysql-mcp -p 9000:9000 --env-file .env tencentcloud-mcp-server-cdb
# 验证服务
curl http://localhost:9000/health@Configuration
public class MCPClientConfig {
@Bean
public McpClient mysqlMcpClient() {
return McpClient.builder()
.transport(new HttpMcpTransport("http://localhost:8080"))
.build();
}
}
@Service
public class IntelligentQueryService {
@Autowired
private McpClient mcpClient;
// 大模型驱动的自然语言查询
public String queryWithLLM(String naturalLanguageQuery) {
// 1. 获取数据库Schema元数据
String schema = mcpClient.callTool("describeDatabase", "your_db");
// 2. 构建Prompt,让大模型生成SQL
String prompt = buildPrompt(schema, naturalLanguageQuery);
String sql = llm.generate(prompt);
// 3. 通过MCP执行只读查询
String result = mcpClient.callTool("executeQuery", sql);
return result;
}
// 查询优化:让MCP分析并优化SQL
public String optimizeWithMCP(String sql) {
return mcpClient.callTool("optimizeQuery", sql);
}
}MCP的价值在于安全边界——通过内置的API Key认证、CORS控制、IP限流和只读SQL限制,大模型被严格约束在安全操作范围内。
Text2SQL智能体由四大核心模块组成:语义解析(理解用户意图)、Schema匹配(定位相关表结构)、SQL生成(调用大模型生成查询)、执行与反馈(执行并返回结果)。
企业落地的核心挑战包括:
当前三条主流技术路线:
路线 | 优势 | 局限 |
|---|---|---|
Prompt Engineering | 零成本、快速部署、灵活适配 | 复杂查询依赖Prompt质量,幻觉风险 |
模型微调 | 处理嵌套子查询、多表JOIN | 标注成本高,Schema变化需重训 |
RAG+Agent(2025-2026趋势) | 检索相关Schema,多工具闭环修正 | 架构复杂度较高 |
MATS(Multi-Agent Text-to-SQL)框架将任务分解为多个子任务,每个由专门智能体负责:
用户查询 → Schema Investigator(过滤无关表)
→ Query Planner(生成多个SQL候选)
→ Validator(执行反馈验证)
→ Fix Agent(根据错误修正)
→ Selection Agent(选出最优SQL)
→ 返回结果SQL-of-Thought引入错误分类学驱动的修正循环:
class SQLErrorClassifier:
ERROR_TYPES = {
'SCHEMA_LINKING': '表/字段链接错误',
'JOIN_INCONSISTENCY': 'JOIN条件不一致',
'AGGREGATION_MISUSE': '聚合函数滥用',
'LOGICAL_SEMANTIC': '语义意图不匹配' # 语法正确但逻辑错误
}
def classify_and_fix(self, sql: str, error: str) -> str:
error_type = self.classify(error)
fix_prompt = self.build_fix_prompt(sql, error_type)
return llm.generate(fix_prompt)实验表明,使用先进模型时95%-99%的生成SQL语法正确,真正的失败源于逻辑错误但语法有效的“语义意图不匹配”——省略修正循环会导致错误查询增加10%。
以下实现一个完整的RAG智能问答系统,将MySQL作为结构化数据存储与向量检索的统一基座:
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import MySQLVectorStore
from langchain.llms import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import TextLoader
import MySQLdb
# 1. 配置MySQL连接(含向量扩展)
connection_params = {
'host': 'localhost',
'user': 'root',
'password': 'your_password',
'database': 'rag_knowledge',
'use_pure': True
}
# 2. 初始化向量存储(MySQL作为向量数据库)
vector_store = MySQLVectorStore(
connection_params=connection_params,
embedding_function=OpenAIEmbeddings(),
table_name='doc_embeddings',
vector_column='embedding',
metadata_columns=['source', 'chunk_index']
)
# 3. 文档加载与分块
loader = TextLoader('knowledge_base.txt')
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(documents)
# 4. 向量化入库(存入MySQL)
vector_store.add_documents(texts)
# 5. 构建RAG检索链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model='gpt-4', temperature=0),
chain_type='stuff',
retriever=vector_store.as_retriever(search_kwargs={'k': 3})
)
# 6. 执行查询
response = qa_chain.run("什么是检索增强生成技术?")
print(response)
# 7. 会话历史持久化(MySQL存储多轮对话上下文)
def save_conversation(session_id, user_query, assistant_response):
conn = MySQLdb.connect(**connection_params)
cursor = conn.cursor()
cursor.execute("""
INSERT INTO conversation_history (session_id, user_query, assistant_response, created_at)
VALUES (%s, %s, %s, NOW())
""", (session_id, user_query, assistant_response))
conn.commit()
cursor.close()
conn.close()综合上述技术,大模型与MySQL的融合可归纳为三种架构模式:
模式 | 核心能力 | 适用场景 | 技术栈 |
|---|---|---|---|
向量检索增强 | MySQL内置VECTOR类型存储Embedding,支持语义搜索与复合查询 | 智能搜索、推荐系统、RAG知识库 | MySQL 8.4.0+、LangChain、Embedding模型 |
MCP协议接入 | 大模型通过MCP协议安全操作MySQL,获得“执行能力” | 智能DBA、自然语言查询、自动化运维 | SQL-MCP、TencentDB MCP、Claude/Cursor |
Text2SQL智能体 | RAG检索Schema + Agent多轮修正,将自然语言转为SQL | 企业BI、数据民主化、低代码查询 | LangGraph、MATS、SQL-of-Thought |
这三种模式并非互斥——在实际生产系统中,它们常常组合使用:MySQL既作为结构化数据存储,又通过VECTOR类型承载向量检索;MCP协议让大模型安全地读取Schema和执行查询;Text2SQL智能体则在上层完成自然语言到SQL的智能转换。
MySQL正在经历一场深刻的“AI原生”转型。从8.4.0的原生向量索引到MCP协议的生态接入,从Text2SQL智能体到RAG知识库构建,MySQL并未被大模型浪潮边缘化,反而凭借其成熟的事务机制、丰富的生态工具和广泛的开发者基础,成为大模型落地过程中不可或缺的数据基座。对于开发者而言,掌握MySQL的向量检索、MCP集成与Text2SQL智能体构建,将是未来两年最重要的技术能力之一。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。