的Polar_AI插件支持通过SQL语句调用人工智能(AI)或机器学习(ML)模型。结合阿里云模型在线服务(EAS),您可以轻松部署自定义模型,并在数据库内实现如文本翻译等功能。
业务场景
随着人工智能(AI)和机器学习(ML)的迅猛发展,后端开发人员正在探索如何便捷地为数据库集成AI/ML能力,以更有效地服务于业务需求。例如,开发人员可以通过直接使用SQL语句来实现对大模型的调用,从而生成向量、进行评论情绪分析以及执行更为复杂的文本生成等操作。业务端无需具备专业知识,也无需部署专门的SDK,仅通过SQL即可实现专业级的AI/ML应用。
PolarDB的Polar_AI模型服务调用插件,支持使用SQL的方式调用模型服务,不需要拥有AI/ML学习经验,不需要拷贝移动数据,不需要学习新的单独的工具,就可以将AI/ML的能力添加到数据库中。当常用的在线模型服务不能满足业务需求时,通过自定义部署的模型服务,来满足业务需求。
基于Polar_AI和EAS,便可在数据库中实现自定义SQL函数,实现业务模型的调用,以满足业务需求。
技术实现
PolarDB
PolarDB具备Polar_AI模型服务调用插件,支持通过SQL方式调用模型服务。用户无需具备机器学习经验,无需复制或移动数据,也无需学习新的独立工具,即可将人工智能和机器学习能力集成到数据库中。
PolarDB从底层直接调用模型服务,不经过应用程序层,从而实现低延迟、高性能、大吞吐量和高安全性,同时也不会对数据库性能造成影响。
EAS
模型在线服务EAS是人工智能平台 PAI为实现一站式模型开发部署应用,针对在线推理场景提供的模型在线服务,支持将模型服务部署在公共资源组或专属资源组,实现基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。
使用EAS可以将魔搭或用户模型一键部署并提供模型在线服务,并按调用进行收费。
查询流程
主要的查询步骤包含以下步骤:
客户端将AI相关的SQL发送至PolarDB。
PolarDB将相关的数据转换为EAS模型服务的协议进行调用。
PolarDB将EAS模型服务的返回的结果转换为数据库的数据表示。
PolarDB将结果返回给客户端。
建议配置
为了得到良好的体验,PolarDB集群建议使用以下配置:
数据库引擎:Oracle语法兼容 2.0
内核版本:>= 2.0.14.13.28.0
CPU:>= 16 核
内存:>= 64 GB
最佳实践
本案例以机器翻译模型-CSANMT连续语义增强机器翻译为例,使用EAS进行模型部署,并通过Polar_AI插件自定义函数的能力实现数据库内的基于连续语义增强的神经机器翻译。
EAS模型部署
开通EAS并部署ModelScope模型。部署完成后可通过在线调试调用模型服务验证服务运行是否准确。
需要记录POST的Headers中的Token信息。该Token信息是访问服务的凭证,请妥善保管。
PolarDB准备
使用高权限账号创建扩展,如需高权限账号请创建数据库账号。
CREATE EXTENSION IF NOT EXISTS polar_ai;
创建模型。
一个自定义的模型包含输入,输出以及用户使用的三个函数。
输入和输出函数
从EAS模型部署步骤中可知,数据的输入为以下JSON:
{"input": {"text": "PolarDB AI function is very easy to use"}}
输出的数据为以下JSON:
{"translation":"PolarDB AI 函数非常易于使用"}
综上,输入和输出函数定义如下:
输入函数
CREATE OR REPLACE FUNCTION my_translate_in(model text, setence text) RETURNS jsonb LANGUAGE plpgsql AS $function$ BEGIN RETURN ('{"input":{"texts":"' || setence ||'"}}')::jsonb; END; $function$;
输出函数
-- 此处返回的是一个简单JSON对象,输出函数不做任何处理 CREATE OR REPLACE FUNCTION my_translate_out(model_id text, response_json jsonb) RETURNS jsonb AS $$ select response_json as result $$ LANGUAGE 'sql' IMMUTABLE;
使用AI_CreateModel创建自定义模型,使用之前定义的输入和输出函数。
SELECT polar_ai.AI_CreateModel( 'damo/nlp_csanmt_translation_en2zh', -- 模型名称 'http://xxxxxx.xx-xxxx.pai-eas.aliyuncs.com/', -- 模型调用VPC地址 'Alibaba', -- 模型提供商 '机器翻译模型', -- 模型分类 'iic/nlp_csanmt_translation_en2zh', -- 调用时模型的名称 '{"author_type": "token", "token": "xxxxxxx"}', -- 认证信息 NULL, -- header函数 'my_translate_in'::regproc, 'my_translate_out'::regproc);
其中,模型调用地址替换为EAS模型的VPC调用地址,认证信息中的
token
替换为模型部署中Headers中的Token信息。创建模型成功后,可使用AI_CallModel函数实现对模型的调用:
SELECT ((polar_ai.AI_CallModel('damo/nlp_csanmt_translation_en2zh','PolarDB AI function is very easy to use'::text)::jsonb)->>'translation')::text;
创建用户函数。
为了使用方便起见,可以把以上调用过程封装为用户函数。封装后业务方无需关心模型服务实际的地址,只需要和通用的SQL函数一样进行使用。
创建用户使用的函数,此处定义一个
my_translate
函数,支持用户使用该函数实现翻译功能:CREATE OR REPLACE FUNCTION my_translate(content text) RETURNS text AS $$ select ((polar_ai.AI_CallModel('damo/nlp_csanmt_translation_en2zh',$1)::jsonb)->>'translation')::text; $$ LANGUAGE 'sql' IMMUTABLE;
其中,函数输入的
text
是需要翻译的文本,返回的text
是翻译完成的结果。
调用函数。使用用户函数
my_translate
即可进行翻译操作。-
SELECT my_translate('PolarDB AI function is very easy to use');
返回结果如下:
my_translate --- PolarDB AI 函数非常易于使用
-
SELECT my_translate('PolarDB is a secure and reliable database service that provides auto scaling, high performance, and mass storage. PolarDB is 100% compatible with MySQL and PostgreSQL and highly compatible with Oracle. PolarDB provides three engines: PolarDB for MySQL, PolarDB for PostgreSQL, and PolarDB-X.');
返回结果如下:
my_translate --- PolarDB是一种安全可靠的数据库服务,提供自动伸缩、高性能和海量存储。 PolarDB与MySQL和PostgreSQL 100%兼容,与Oracle高度兼容。 PolarDB提供三种引擎:PolarDB for MySQL、PolarDB for PostgreSQL和PolarDB - X。
-
- 本页导读
- 业务场景
- 技术实现
- 查询流程
- 建议配置
- 最佳实践
- EAS模型部署
- PolarDB准备