使用入门

Polar_AI云原生数据库PolarDB的一个AI扩展,集成先进的AI模型和算法,构建数据库与现代人工智能技术之间的桥梁,使得数据库能够执行机器学习和自然语言处理等任务。本文档为您介绍Polar_AI引擎的基本功能,包括如何在数据库中调用AI大模型执行文本转向量、情感分类等功能,以及如何通过SQL扩展自定义AI模型,以实现与更多AI模型服务的交互。

前提条件

支持的PolarDB PostgreSQL版(兼容Oracle)版本如下:

Oracle语法兼容 2.0(内核小版本2.0.14.13.28.0及以上)。

说明

您可在控制台查看内核小版本号,也可以通过SHOW polardb_version;语句查看。如未满足内核小版本要求,请升级内核小版本

基本概念

  • NLP:自然语言处理(Natural Language Processing)是AI的一个领域,专注于使计算机能够理解和生成人类语言。该领域包括文本分类、情感分析、机器翻译、对话系统等技术。

  • Embedding:中文可译为嵌入或嵌入式表示,是机器学习和自然语言处理领域中的一个重要概念。该概念指的是将高维、稀疏的特征向量(例如词典中的词语、图像像素点等)转换为低维、密集的连续向量空间中的向量表示的过程。

优势说明

通过标准SQL语言即可轻松实现数据库内部AI模型的调用及管理,这种方式具备以下几个显著优势:

  • 简单易用性:无需深厚的AI专业知识或复杂的编程技能,仅需掌握基础的SQL语法就能完成从模型训练到预测推理结果输出的全流程操作。极大降低使用门槛,使得更多非专业人员也能参与到AI应用实践中来。

  • 灵活可定制化:除了提供一系列预设的常用AI算法外,还支持根据业务需求快速添加新的模型。只需编写几行简单的SQL语句即可实现功能扩展。因此,无论是文本分类、图像识别还是时序预测等不同类型的任务,都能够在统一框架下高效处理。

  • 无缝数据融合:传统上,AI模型生成的输出通常需要经过额外步骤才能被有效整合进现有的信息系统。然而,在本方案中,所有AI计算的结果均可直接保存至数据库,并能够方便地与其他结构化或非结构化数据进行联合查询与分析,从而为决策制定提供更加全面和准确的信息支持。

  • 数据安全保障:在整个计算过程中,原始数据始终存放于安全可靠的数据库环境中,从而避免因频繁传输而引发的信息泄露风险。同时,借助成熟的企业级特性,例如细粒度权限控制、访问审计跟踪及加密技术等手段,进一步提升系统的防护水平。

  • 卓越性能表现:由于所有计算任务均在数据库内部执行,减少因数据迁移而产生的额外开销,因此在响应速度和吞吐量方面均能达到非常出色的水平。对于实时性要求较高的应用场景尤为重要。

  • 企业级服务支撑:全面继承云原生数据库PolarDB所拥有的各种高级特性,比如自动故障切换、在线扩容缩容、冷热分层存储等等。这些都为企业构建稳定可靠的大规模数据处理平台奠定坚实的基础。

快速入门

  1. 创建扩展

    请使用高权限账号执行如下语句:

    CREATE EXTENSION IF NOT EXISTS polar_ai;
  2. 了解AI_CreateModel创建自定义模型函数

    根据参数,您需要准备以下信息:

    • 需部署且处于运行状态的模型服务,此处以人工智能平台PAI部署的DeepSeek-R1-Distill-Qwen-7B模型为例。

      说明

      部署的模型服务需与您的PolarDB集群处于同一专有网络VPC下。

      部署后,您需在服务详情 > 调用信息中查看并记录VPC地址调用信息,其中包含访问地址以及Token,以供后续创建模型使用。

    • 定义模型输入与输出函数

      调用方式分为ChatCompletions两种方式,此处以Completions为例。

      • 模型输入函数:

        在使用HTTP调用DeepSeek-R1-Distill-Qwen-7B模型时,请求体的内容示例如下所示:

        {
          "model": "DeepSeek-R1-Distill-Qwen-7B",
          "prompt": "Hello!"
        }

        请求体中,参数modelprompt作为模型入参,且必填。则模型输入函数可定义为:

        CREATE OR REPLACE FUNCTION ai_text_in_fn(model_name text, content text)
            RETURNS jsonb
            LANGUAGE plpgsql
            AS $function$
            BEGIN
                RETURN ('{"model": "'|| model_name ||'","prompt":"'|| content ||'"}')::jsonb;
            END;
            $function$;
      • 模型输出函数:

        在使用HTTP调用DeepSeek-R1-Distill-Qwen-7B模型时,请求输出内容示例如下所示:

        {
            "id": "8e44xxxx",
            "object": "text_completion",
            "created": 1744355891,
            "model": "DeepSeek-R1-Distill-Qwen-7B",
            "choices": [
                {
                    "index": 0,
                    "text": " I have a\n\n\n</think>\n\nHello! How can I assist you today? ",
                    "logprobs": null,
                    "finish_reason": "stop",
                    "matched_stop": 151643
                }
            ],
            "usage": {
                "prompt_tokens": 3,
                "total_tokens": 21,
                "completion_tokens": 18,
                "prompt_tokens_details": null
            }
        }

        由于仅需获取choices[0].text项的内容,且输出为一段文本,无需进行任何进一步处理,因此模型输出函数无需定义。

  3. 创建AI模型

    调用AI_CreateModel创建模型。在创建模型的过程中,需对以下参数进行调整:

    • 模型调用地址model_url为上述人工智能平台PAI上部署的模型访问地址,且需拼上调用方式/v1/completions

    • 模型配置信息model_config中的token为上述人工智能平台PAI上部署的模型Token。

    • 模型输入转换函数model_in_transform_fn为上述步骤创建的ai_text_in_fn函数。

    SELECT polar_ai.ai_createmodel('my_test_pai_model', '<EAS Endpoint>/v1/completions','Alibaba','EAS大语言模型','DeepSeek-R1-Distill-Qwen-7B','{"author_type": "token", "token": "<EAS Token>"}', NULL,'ai_text_in_fn'::regproc,NULL);
    说明

    您可以通过查询语句SELECT * FROM polar_ai._ai_models;来查看创建的模型信息。

  4. 创建AI模型的调用函数

    根据AI_CallModel创建自定义模型调用函数:

    CREATE OR REPLACE FUNCTION my_text_pai_model_func(model_id text, content text)
        RETURNS text
        AS $$ select (polar_ai.AI_CALLMODEL($1,$2)::jsonb -> 'choices' -> 0 ->> 'text')::text AS result $$
        LANGUAGE 'sql' IMMUTABLE;
  5. 通过SQL语句执行对应模型的调用

    SELECT my_text_pai_model_func('my_test_pai_model', 'Hello');

    返回结果如下:

            my_text_pai_model_func        
    --------------------------------------
     Hello! How can I assist you today? 
    (1 row)