业务场景
随着AI/ML的火热,后端开发人员也在考虑如何直接方便地为数据库添加AI/ML能力,更好地为业务服务。比如,直接使用SQL语句就可以完成大模型的调用,实现向量的生成,评论情绪分析以及更为复杂的文本生成等操作。业务端无需具备专业的知识,无需部署专门的SDK,仅使用SQL就可以完成专业的AI/ML应用。
PolarDB具备POLAR_AI模型服务调用插件,支持使用SQL的方式调用模型服务,不需要拥有AI/ML学习经验,不需要拷贝移动数据,不需要学习新的单独的工具,就可以将AI/ML的能力添加到数据库中。
当常用的在线模型服务不能满足业务需求时,通过自定义部署的模型服务,来满足业务需求。基于POLAR_AI X 阿里云EAS在线模型服务,通过在数据库中实现自定义SQL函数,实现业务模型的调用,满足业务需求。
最佳实践
技术实现
PolarDB
PolarDB PostgreSQL版(下文简称为 PolarDB)是一款阿里云自主研发的云原生关系型数据库产品,100% 兼容 PostgreSQL,高度兼容Oracle语法;采用基于 Shared-Storage 的存储计算分离架构,具有极致弹性、毫秒级延迟、HTAP 的能力和高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB 具有大规模并行计算能力,可以应对OLTP与OLAP混合负载。
PolarDB具备POLAR_AI模型服务调用插件,支持使用SQL的方式调用模型服务,不需要拥有机器学习经验,不需要拷贝移动数据,不需要学习新的单独的工具,就可以将AI/ML的能力添加到数据库中。
PolarDB从底层直接调用模型服务,不经过应用程序层,因此访问延迟低、性能优、吞吐大、安全高,也不会影响到数据库的性能。
EAS
模型在线服务EAS(Elastic Algorithm Service)是阿里云PAI产品为实现一站式模型开发部署应用,针对在线推理场景提供的模型在线服务,支持将模型服务部署在公共资源组或专属资源组,实现基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。
使用EAS可以将魔搭或用户模型一键部署并提供模型在线服务,并按调用进行收费。
查询流程
主要的查询步骤包含以下步骤:
- 客户端将AI相关的SQL发送给PolarDB
- PolarDB将相关的数据转换为EAS模型服务的协议进行调用
- PolarDB将EAS模型服务的返回的结果转换为数据库的数据表示
- PolarDB将结果返回给客户端
建议配置
为了得到良好的体验,建议使用以下配置:
项目 |
推荐配置 |
PolarDB 版本 |
标准版 兼容PostgreSQL 14 |
CPU |
>16 Core |
内存 |
>64 GB |
磁盘 |
>100GB (AUTOPL) |
版本 |
>=14.13.28.0(20241230发布) |
实战步骤
本案例以机器翻译模型-CSANMT连续语义增强机器翻译为例,示例如何使用EAS进行模型部署,并通过POLAR_AI 插件自定义函数的能力实现数据库内的基于连续语义增强的神经机器翻译。
部署模型
开通EAS并搭建模型服务,具体步骤可参考https://help.aliyun.com/zh/pai/use-cases/deploy-huggingface-and-modelscope-service-applications-with-one-click-of?spm=a2c4g.11186623.0.0.229d65713qlYzb#790dec242a083
部署完成后可通过页面来验证结果是否准确。
需要记录Post的URL地址以及Headers中的token信息。Token信息是访问服务的凭证,需要妥善保管。
数据库准备
创建扩展
创建POLAR_AI扩展
CREATE EXTENSION POLAR_AI WITH SCHEMA PUBLIC; set search_path="$user", public,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对象,out函数不做任何处理 CREATE OR REPLACE FUNCTION my_translate_out(model_id text, response_json jsonb) RETURNS jsonb AS $$ select response_json as result $$ LANGUAGE 'sql' IMMUTABLE;
创建模型
创建一个自定义的模型,使用之前定义的in和out函数。
SELECT POLAR_AI.ai_createmodel('damo/nlp_csanmt_translation_en2zh', -- 模型名称 'http://xxxx.cn-shanghai.pai-eas.aliyuncs.com/api/predict/translate', -- 模型调用地址 'Alibaba', -- 模型提供商 '机器翻译模型', -- 模型分类 'iic/nlp_csanmt_translation_en2zh', -- 调用时模型的名称 '{"author_type": "token", "token": "xxxxxxx"}', -- 认证信息 NULL, -- header函数 'my_translate_in'::regproc, -- 'my_translate_out'::regproc);
注意:url地址与token需要替换为EAS部署时记录的信息
模型调用
可以通过CALLMODEL函数实现对于模型的调用:
select ((POLAR_AI.AI_CALLMODEL('damo/nlp_csanmt_translation_en2zh','PolarDB AI function is very easy to use')::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'); --- 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 。
总结
PolarDB POLAR_AI模型服务调用插件具备较强的灵活性,结合EAS在线模型服务,实现自定义模型的部署,通过定制SQL的方式实现对自定义模型的调用。使用时不需要专业的AI/ML背景,无需部署AI相关环境,不需要了解模型部署的具体信息,使用时不需要移动数据,仅使用SQL即可实现模型调用,满足业务需求。
试用体验
欢迎访问PolarDB免费试用页面,选择试用“云原生数据库PolarDB PostgreSQL版”,体验PolarDB的AI能力