AI_CreateModel

创建AI模型,将其注册到元数据表中,供后续调用。

语法

table AI_CreateModel(text model_id, text model_url, text model_provider, text model_type, text model_name, json model_config, regprocedure model_headers_fn, regprocedure model_in_transform_fn, regprocedure model_out_transform_fn);

参数

参数名称

描述

model_id

模型自定义名称,具有唯一性,便于模型管理。注意与model_name区分。

说明

模型自定义名称不可以下划线“_”开头。在创建Polar_AI插件时,系统默认创建了一批以下划线“_”开头的内置模型。您可以通过以下语句查看已创建的模型:SELECT * FROM polar_ai._ai_models;

model_url

模型的调用地址,不允许为空。支持HTTP、HTTPS、FILE协议。例如:人工智能平台PAI上部署服务调用信息中的访问地址。

model_provider

模型提供方,允许为空。示例如:AWS, Alibaba, Baidu, Tencent等。

model_type

模型类型,允许为空。示例如:LSTM, GRU等。

model_name

调用模型名称,不允许为空。例如:text-embedding-v2。

model_config

模型配置信息,使用JSON格式,不允许为空。格式为:{ "author_type":"token", "token":"<YOUR_API_KEY>" },其中:

  • author_typetoken是必须指定的JSON字段。其中,author_type用于指明认证类型,目前仅支持token认证方式。

  • token为调用模型的API-KEY,存储时将进行加密处理。例如,人工智能平台PAI上部署服务的调用信息Token

model_headers_fn

模型请求头函数,用于构建请求头,返回类型必须为JSONB,如果模型没有特殊要求无需指定,默认为空。

model_in_transform_fn

模型输入转换函数,不允许为空。用于构建请求数据。详细介绍请参考模型输入转换函数

model_out_transform_fn

模型输出转换函数,不允许为空。用于解析模型返回数据。详细介绍请参考模型输出转换函数

返回值

以表结构形式返回AI模型创建后的结果信息。表结构如下:

参数名称

描述

model_seq

模型序号。

model_schema

模型所属的工作空间。

model_id

模型自定义名称。

model_qname

模型名称。

created

AI模型是否创建成功:

t:创建成功。

f:创建失败。

函数说明

  • AI_CreateModel仅将模型元数据注册到元数据表中,不执行模型调用。模型调用请参考AI_CallModel

  • 模型输入转换函数(model_in_transform_fn)用于将输入内容转为模型对应的HTTP请求内容,且返回类型必须为JSONB。此处以人工智能平台PAI上部署的DeepSeek-R1-Distill-Qwen-7B模型服务为例,其HTTP请求内容为:

    {
      "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$;
  • 模型输出转换函数(model_out_transform_fn)用于将模型输出结果(通常为JSON)转为业务所需的格式。例如,已知模型实际返回的结果JSON格式如下:

    {
        "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中的内容,其参数类型必须为JSONB,因此模型输出函数可定义为:

    CREATE OR REPLACE FUNCTION ai_text_out_fn(model_id text, response_json jsonb)
        RETURNS jsonb
        AS $$
        SELECT (response_json->'choices'->0->'text')::jsonb
        $$ LANGUAGE sql IMMUTABLE;

示例

此处以人工智能平台PAI部署的DeepSeek-R1-Distill-Qwen-7B模型为例,注册步骤如下:

  1. 创建输入转换函数。

    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$;
  2. 创建输出转换函数。

    CREATE OR REPLACE FUNCTION ai_text_out_fn(model_id text, response_json jsonb)
        RETURNS jsonb
        AS $$
        SELECT (response_json->'choices'->0->'text')::jsonb
        $$ LANGUAGE sql IMMUTABLE;
  3. 将模型元数据注册到元数据表中。在创建模型的过程中,需对以下参数进行调整:

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

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

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

    • 模型输出转换函数model_out_transform_fn为上述步骤创建的ai_text_out_fn函数。

    SELECT polar_ai.AI_CreateModel('my_text_pai_model', '<EAS Endpoint>/v1/completions','Alibaba','EAS大语言模型','DeepSeek-R1-Distill-Qwen-32B','{"author_type": "token", "token": "<EAS Token>"}', NULL, 'ai_text_in_fn'::regproc, 'ai_text_out_fn'::regproc);
  4. 返回结果如下,详细的返回值说明请参考返回值

                      ai_createmodel
    -------------------------------------------------------------
    (1,my_text_pai_model,polar_ai,DeepSeek-R1-Distill-Qwen-32B,t)
  5. (可选)查看已创建的AI模型:

    SELECT * from polar_ai._ai_models;

    返回结果如下:

     model_seq |    model_id    | model_url | model_provider | model_type | model_name | model_config |  model_headers_fn  |     model_in_transform_fn     |     model_out_transform_fn      
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     1 | my_text_pai_model | http://xxx.pai-eas.aliyuncs.com/xxx/v1/completions | Alibaba | EAS大语言模型 | DeepSeek-R1-Distill-Qwen-32B
       | {"token": "20E0BE9E5438xxxxxxxxxxxxxxxxxxxx", "author_type": "token"} |  - | ai_text_in_fn(text,text) | ai_text_out_fn(text,jsonb)