发布于 2026-01-06 0 阅读
0

现代 SQL 数据库如何改变 Web 开发——第四部分:迈向人工智能时代

现代 SQL 数据库如何改变 Web 开发——第四部分:迈向人工智能时代

自诞生以来,SQL 数据库一直是互联网的强大动力。严格的模式、ACID 事务和强大的完整性使其至今仍是许多应用程序的最佳存储选择。数据库系统听起来或许晦涩难懂、枯燥乏味,但在过去几年里却蓬勃发展。众多人才投身其中,开源项目层出不穷,企业努力打造盈利业务,风险投资家则纷纷押注那些有望成为下一个独角兽的公司。

在蓬勃发展的表象之下,新一代现代 SQL 数据库正在革新这项已有 50 年历史的技术,并逐步重塑我们构建 Web 应用程序的方式——包括我们如何使用它、如何管理它以及我们如何针对它进行编程。本系列文章将尝试从多个角度探讨这一主题。现在,我们来到了本系列的最后一部分。让我们深入了解今年最热门的趋势——人工智能 (AI),看看现代数据库如何助力更轻松地开发 AI 应用。

法学硕士?别急!

在 ChatGPT 向世界展示大型语言模型的强大功能之前,人工智能,或者更准确地说,机器学习,已经发展了 60 多年。它经历了起伏,并在包括计算机视觉、自然语言处理、语音识别等在内的许多领域取得了卓越的进展。

与 GPT 不同,传统的机器学习方法通​​常需要训练定制模型来解决特定问题。虽然机器学习从业者喜欢谈论学习算法,但事实上,他们的大部分时间都花在了数据整理上,这就涉及到 SQL 数据库。为模型训练准备数据需要对原始数据进行大量的预处理:消除噪声、填充缺失值、合并多条数据、归一化值、提取特征等等。过滤、连接和转换数据正是数据库最擅长的任务。

一些优秀的工具被开发出来,能够以“自然”的方式在 SQL 中表示这些任务,甚至让大部分计算在数据库内部完成。PostgresML就是一个很好的例子。它基于PostgreSQL构建,提供了一系列函数,允许你使用 SQL 来训练和使用机器学习模型。以下是如何训练一个用于经典手写数字识别问题的分类模型:

  1. 将数据集加载为表格

    SELECT * FROM pgml.load_dataset('digits');
    
  2. 使用“xgboost”算法训练分类器

    SELECT * FROM pgml.train(
        'Handwritten Digit Image Classifier',
        algorithm => 'xgboost',
        'classification',
        'pgml.digits',
        'target'
    );
    
  3. 使用训练好的模型进行预测

    SELECT
        target,
        pgml.predict('Handwritten Digit Image Classifier', image) AS prediction
    FROM pgml.digits 
    LIMIT 10;
    

虽然其他编程语言也能轻松训练这样的模型,但 PostgresML 可以让数据完全留在数据库中,无需离开数据库即可完成训练。此外,如果您是 SQL 爱好者,并且精通使用 SQL 准备训练数据,那么您完全可以用 SQL 编写整个预处理、训练和预测流程。

LLM & RAG:一些背景信息

快进到后GPT时代,如今许多人将人工智能等同于语言学习管理(LLM)。为了理解数据库在这种新背景下的作用,我们首先快速回顾一下语言学习管理的现状。

大型机器学习模型(LLM)是专门用于根据文本输入生成文本输出的预训练机器学习模型。之所以称之为“大型”,是因为这些模型拥有大量的内部参数,并且使用海量数据进行训练以确保足够的性能。由于这些模型是预训练的,开发者可以直接使用,无需担心训练过程。他们不再需要费力地进行特征工程和训练算法,而是专注于快速响应式设计。

然而,预训练也意味着模型并非针对任何特定任务进行定制。一种“深度定制”技术称为检索增强生成(RAG)。假设您拥有一个特定领域的文档知识库;采用 RAG 涉及以下步骤:

  • 计算每个文档的嵌入向量(使用现有模型或 OpenAI 等 API)。
  • 将嵌入存储在数据库中,以便进行基于相似性的快速搜索。
  • 给定用户查询,计算其嵌入向量,并在数据库中找到最相似的文档。
  • 使用匹配的文档作为附加上下文来增强输入查询,并将其提供给 LLM。

嵌入是文本数据的向量表示。

检索增强生成

如您所见,数据库在这种架构中仍然发挥着至关重要的作用,但方式却截然不同。

向量搜索

RAG 实现的质量和性能高度依赖于基于相似性的词嵌入搜索。挑战在于词嵌入通常是高维向量,而知识库可能包含大量文档。LLM 的流行促进了PineconeWeaviate等专用向量数据库的发展,这并不令人意外。然而,SQL 数据库也在不断发展以应对这一新挑战。

PostgreSQL 的pgvector扩展可能是目前应用最广泛的 SQL 向量数据存储和搜索解决方案。该扩展引入了一种专门用于存储高维向量数据的“vector”类型。它允许您创建向量索引(采用“IVFFlat”或“HNSW”格式,以兼顾不同的索引/搜索性能),并利用这些索引执行各种类型的相似性搜索。

-- Create a table with a vector column
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));

-- Insert vectors
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

-- Create an "HNSW" index for L2 distance search
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);

-- Get the nearest neighbors by L2 distance
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
Enter fullscreen mode Exit fullscreen mode

SQL 数据库并非专门针对向量搜索进行优化;基准测试表明,它通常比向量数据库慢。然而,使用 SQL 数据库仍然有其充分的理由:

  • 您可以同时使用矢量数据和非矢量数据进行过滤。
  • 您可以结合全文搜索和基于向量的搜索。
  • 您可以直接在搜索结果中返回匹配文档的内容,而无需发出单独的获取请求。
  • 您可以利用数据库的安全机制(角色、行级安全等)来隔离租户之间的数据。

SQL 作为 LLM 工作流的门面

除了存储和搜索矢量数据之外,还有其他一些卓越的创新,使您可以使用 SQL 描述整个 LLM 工作流程——这在概念上类似于使用 PostgresML 完成端到端机器学习任务的方式。

Mindsdb就是一个很好的例子。它将与 AI 工作流程相关的一切都抽象为“虚拟表”。例如,您可以将 OpenAI API 导入为“虚拟表”:

CREATE ML_ENGINE openai_engine
FROM openai
USING
    api_key = 'your-openai-api-key';

CREATE MODEL my_openai_model
PREDICT answer
USING
    engine = 'openai',
    question_column = 'question',
    model_name = 'openai_model_name'
    api_key = 'YOUR_OPENAI_API_KEY;
Enter fullscreen mode Exit fullscreen mode

然后进行查询以获取问题的答案:

SELECT question, answer
FROM my_openai_model
WHERE question = 'Where is Stockholm located?';
Enter fullscreen mode Exit fullscreen mode

返回的结果类似于:

问题 回答
斯德哥尔摩位于哪里? 斯德哥尔摩位于瑞典。

它本质上是一个用于集成数据、API 和 LLM 的平台,并使用 SQL 以声明方式协调它们,从而创建 RAG、聊天机器人、文本摘要等高级工作流程。

包起来

人工智能无处不在。它促使我们重新思考软件开发的方方面面,数据库也不例外。作为软件工程中最经受时间考验的支柱之一,SQL 数据库将继续探索这一新领域,并在探索过程中不断重塑自身。


ZenStack是我们开源的 TypeScript 工具包,旨在帮助您更快、更智能、更高效地构建高质量、可扩展的应用程序。它将数据模型、访问策略和验证规则集中到一个基于 Prisma 的声明式模式中,非常适合 AI 增强型开发。立即开始将ZenStack集成到您现有的技术栈中吧!

文章来源:https://dev.to/zenstack/how-modern-sql-databases-are-changing-web-development-4-into-the-ai-era-532p