PolarDB-PG AI最佳实践 1:基础能力实践

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: Polar_AI 是 PolarDB 数据库的 AI 扩展,集成了先进的人工智能模型和算法,使数据库能够执行机器学习和自然语言处理任务。它支持 PostgreSQL 及 Oracle 兼容版本,通过标准 SQL 轻松调用 AI 模型,具备简单易用、灵活可定制、无缝数据融合、数据安全和高性能等优势。用户可以通过 SQL 快速实现文本转向量、情感分类等功能,并能自定义扩展 AI 模型。

简介

Polar_AI是PolarDB数据库的一个AI扩展,它集成了先进的AI模型和算法,架起了数据库与现代人工智能技术之间的桥梁,使得数据库内可执行机器学习和自然语言处理等任务。Polar_AI目前支持PolarDB PostgreSQL版及PolarDB PostgreSQL(兼容Oracle)版数据库。本文档帮助用户理解 Polar_AI 引擎的基本功能,包括如何在数据库中调用AI大模型执行文本转向量、情感分类等功能,以及如何通过SQL扩展自定义AI模型,以实现与更多AI模型服务的交互。

基本概念

  • NLP:自然语言处理(Natural Language Processing)是AI的一个领域,专注于使计算机能够理解和生成人类语言。这包括文本分类、情感分析、机器翻译、对话系统等技术。
  • Embedding: 中文可译为嵌入或嵌入式表示,是机器学习和自然语言处理领域中的一个重要概念。它是指将高维、稀疏的特征向量(如词典中的词语、图像像素点等)转换为低维、密集的连续向量空间中的向量表示的过程。

优势说明

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

  • 简单易用性:无需深厚的AI专业知识或复杂的编程技能,用户仅需掌握基础的SQL语法就能完成从模型训练到预测推理结果输出的全流程操作。这极大降低了使用门槛,使得更多非专业人员也能参与到AI应用实践中来。
  • 灵活可定制化:除了提供预设好的一系列常用AI算法外,还支持用户根据自身业务需求快速添加新的模型,只需编写几行简单的SQL语句就能实现功能扩展。这样一来,无论是文本分类、图像识别还是时序预测等不同类型的任务都可以在一个统一框架下得到高效处理。
  • 无缝数据融合:传统上,AI模型产生的输出往往需要经过额外步骤才能被整合进现有的信息系统之中;而在本方案里,所有AI计算的结果都能够直接保存于数据库内,并且可以很方便地与其他结构化或非结构化数据进行联合查询分析,从而为决策制定提供了更加全面准确的信息支持。
  • 数据安全保障:在整个计算过程中,原始数据始终存放在安全可靠的数据库环境中,避免了因频繁传输而导致的信息泄露风险。同时,借助于成熟的企业级特性如细粒度权限控制、访问审计跟踪以及加密技术等手段,进一步增强了系统的防护水平。
  • 卓越性能表现:由于所有的计算任务都在数据库内部执行,省去了数据移动所带来的额外开销,因此无论是在响应速度还是吞吐量方面都能达到非常优秀的水准。这对于那些对实时性要求较高的应用场景来说尤为重要。
  • 企业级服务支撑:全面继承云原生数据库PolarDB所拥有的各种高级特性,比如自动故障切换、在线扩容缩容、多租户隔离等等。这些都为企业构建稳定可靠的大规模数据处理平台奠定了坚实的基础。

快速入门

创建扩展

CREATE EXTENSION polar_ai;

内置模型介绍

  • 内置模型是指在创建Polar_AI扩展后,预先安装于数据库中的几种常用AI模型。用户无需关心模型部署及参数细节,可直接使用。
  • 可通过以下SQL命令查看内置模型:
select model_seq,model_id,model_name,model_url from polar_ai._ai_models;           
-----------+---------------------------------------------
1 | _dashscope/text_embedding/text_embedding_v2 | text-embedding-v2 | https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding 
2 | _dashscope/text_embedding/text_embedding_v3 | text-embedding-v3 | https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding 
3 | _dashscope/text-classfication/opennlu-v1    | opennlu-v1        | https://dashscope.aliyuncs.com/api/v1/services/nlp/nlu/understanding                    
(3 rows)
  • 当前内置模型主要集成了阿里云灵积模型服务中提供的自然语言处理模型,其功能解释如下:
  • _dashscope/text_embedding/text_embedding_v2:通用文本向量模型,支持将中文、英语、西班牙语、法语、葡萄牙语、印尼语、日语、韩语、德语、俄罗斯语转为向量,输出的向量维度为1536。
  • _dashscope/text_embedding/text_embedding_v3:通用文本向量模型,在text_embedding_v2的基础上增加了50+种语言,输出的向量维度默认为1024。
  • _dashscope/text-classfication/opennlu-v1:通用文本理解模型,适用于中文、英文零样本条件下进行文本理解任务,如信息抽取、文本分类等。
  • HuggingFace、OpenAI、Llama等更多内置模型开发中。

如何快速执行文本转向量

  • 本小节以调用内置模型'_dashscope/text_embedding/text_embedding_v2'为例,仅通过执行二次SQL命令就可完成文本转向量操作。
  • '_dashscope/text_embedding/text_embedding_v2'内置模型输出的向量固定为real[],如需输出更多类型,请参考如何实现批量Embedding及向量检索

步骤一:绑定Token

  • 在首次调用内置模型时,需要先获阿里云账号的API-KEY并绑定到模型,获取方法参考API-KEY的获取与配置
  • 绑定API-KEY到指定模型中,执行如下SQL命令:
select polar_ai.AI_SetModelToken('_dashscope/text_embedding/text_embedding_v2', 'YOUR_API_KEY');
---
t

步骤二:执行Embedding

  • 绑定API-KEY后,调用ai_text_embedding函数,即可完成文本转向量操作。
select polar_ai.ai_text_embedding('风急天高猿啸哀');
---
{0.0049301917,-0.012394876,0.041976027,-0.01943111,0.039707053,-0.030824259,0.036376007,-0.035169102,-0.00021252778,0.0053405385,0.039079465,-0.03019667,-0.0067224405,0.01711386,0.021989742,
...,
0.019008696,-0.03215185,-0.021820776,0.029520806,0.022677675,-0.0038922566,0.014941438,0.012986258,0.030003566,-0.008285377,0.0014573333,-0.017584551,-0.038089804,-0.0371967,-0.008629344}

如何快速实现文本情感分类

步骤一:绑定Token

  • 在首次调用内置模型时,需要先获阿里云账号的API-KEY并绑定到模型,获取方法参考API-KEY的获取与配置
  • 绑定API-KEY到指定模型中,执行如下SQL命令:
select polar_ai.AI_SetModelToken('_dashscope/text-classfication/opennlu-v1', 'YOUR_API_KEY');
---
t

步骤二:执行文本情感分类

select polar_ai.ai_text_classification('老师今天表扬我了');
---
积极;
select polar_ai.ai_text_classification('这家饭店的菜真难吃');
---
消极;

高级进阶

当内置模型无法满足需求时,用户可通过SQL在数据库中扩展AI模型,以实现与更多AI模型服务的交互。

如何实现自定义模型调用

本小节以调用灵积模型服务中的主题分类模型为例,自定义实现文本主题分类功能。

定义模型输入与输出函数

{
    "model": "opennlu-v1",
    "input":{
      "sentence":"国足近5年首次攻破日本队球门!",
      "task": "classification",
      "labels":"体育新闻,娱乐新闻"
    },
    "parameters": {
    }
}
  • json中model项、input/sentence与input/labels项为必填项,作为函数入参传入,input/task项为固定项,模型输入函数可定义为:
-- model,sentence,labels项为输入内容,task项固定
CREATE OR REPLACE FUNCTION my_text_classification_in(model text, content text)
      RETURNS jsonb
      LANGUAGE plpgsql
      AS $function$
      BEGIN
      RETURN ('{"model": "'|| model ||'","input":{"sentence":"'|| content ||'","task": "classification","labels":"体育新闻,时事新闻"},"parameters":{}}')::jsonb;
      END;
      $function$;
  • 定义模型输出函数
  • Curl调用输出内容示例:
{
      "output":{
          "text":"体育新闻",
      },
      "usage":{
          "output_tokens":2,
          "input_tokens":11,
          "total_tokens":13
      },
      "request_id":"d89c06fb-46a1-47b6-acb9-bfb17f814969"
}
  • 我们只需要取output/text项的部分内容即可,因为输出是一个极简单的词语,且不需要做任何处理,则模型输出函数无需定义。

创建文本主题分类模型

-- 将"your-api-key"替换成上文准备工作中获取到的API Key即可
-- 输入函数为ai_tongyi_custom_classification_in
SELECT polar_ai.ai_createmodel('my_text_classification_model', 'https://dashscope.aliyuncs.com/api/v1/services/nlp/nlu/understanding','Alibaba','OpenNLU开放域文本理解模型','opennlu-v1','{"author_type": "token", "token": "your-api-key"}', NULL,'my_text_classification_in'::regproc,NULL);       
---
(4,my_text_classification_model,polar_ai,opennlu-v1,t)

以SQL方式执行主题分类

-- 创建自定义模型调用函数
CREATE OR REPLACE FUNCTION my_text_classification_func(model_id text, content text)
    RETURNS text
    AS $$ select (((polar_ai.AI_CALLMODEL($1,$2)::json)->>'output')::jsonb->>'text')::text as result $$
    LANGUAGE 'sql' IMMUTABLE;
-- 执行主图分类  
select my_text_classification_func('my_text_classification_model', '国足近5年首次攻破日本队球门!');
----
体育新闻;
(1 row)

批量主题分类

  • 对于已经在数据库内的数据,可以批量执行主题分类,例如:
-- 创建表
create table my_text_classification_tbl(id integer, content text, class text);
-- 插入数据
insert into my_text_classification_tbl values(1,'国足近5年首次攻破日本队球门!'),(2,'中国智慧点亮全球治理的拉美时刻'),(3,'王楚钦复仇莫雷加德晋级四强');
-- 批量主题分类
update my_text_classification_tbl set class=my_text_classification_func('my_text_classification_model', content);
-- 查看分类结果
select * from my_text_classification_tbl;
id |            content               |  class   
----+-----------------------------------+-----------
  1 | 国足近5年首次攻破日本队球门!        | 体育新闻;
  2 | 中国智慧点亮全球治理的拉美时刻       | 时事新闻;
  3 | 王楚钦复仇莫雷加德晋级四强           | 体育新闻;
(3 rows)

如何实现批量Embedding及向量检索

本小节以调用灵积模型服务中的通用文本向量为例,实现批量文本转向量功能,并针对返回结果自定义输出内容。

定义模型输入、输出函数

  • 准备工作
  • 了解通义文本向量模型,包括请求header、输入文本格式和输出结果。
  • 获取阿里云账号的API-KEY,参考API-KEY的获取与配置
  • 定义模型输入函数
  • 通用文本向量模型text-embedding-v2 CURL调用命令中'--data'部分为:
{
      "model": "text-embedding-v2",
      "input": {
          "texts": [
          "风急天高猿啸哀"
          ]
      },
      "parameters": {
          "text_type": "query"
      }
}
  • 内容中的model项及input/texts项为必填项,作为函数入参,则模型输入函数可定义为:
CREATE OR REPLACE FUNCTION my_text_embedding_in(model text, texts text)
      RETURNS jsonb
      LANGUAGE plpgsql
      AS $function$
      BEGIN
      RETURN ('{"model": "'|| model ||'","input":{"texts":["'|| texts ||'"]},"parameters":{"text_type": "query"}}')::jsonb;
      END;
      $function$;
  • 定义模型输出函数
  • 通用文本向量模型text-embedding-v2 CURL调用输出内容为:
{
  "usage": {
    "total_tokens": 7
  },
  "output": {
    "embeddings": {
      "embedding": [0.004930191827757042, -0.008629344325205105, 0.041976027360927766],
      "text_index": 0
    }
  },
  "request_id": "317ba0d4-6c08-9c24-8725-eebd445def51"
}
  • 只需要取output/embeddings/embedding项的向量部分内容,并保留jsonb格式,则模型输出函数可定义为:
CREATE OR REPLACE FUNCTION my_text_embedding_out(model_id text, response_json jsonb)
    RETURNS jsonb
    AS $$ select ((((response_json->>'output')::jsonb->>'embeddings')::jsonb)->0->>'embedding')::jsonb as result $$
    LANGUAGE 'sql' IMMUTABLE;

创建自定义文本向量模型

  • 定义了模型输入输出函数后,即可通过ai_createmodel函数在数据库中创建模型。
-- 将"your-api-key"替换成上文准备工作中获取到的API Key即可
SELECT polar_ai.ai_createmodel('my_text_embedding_model', 'https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding','Alibaba','通用文本向量模型','text-embedding-v2','{"author_type": "token", "token": "your-api-key"}', NULL,'my_text_embedding_in'::regproc,'my_text_embedding_out'::regproc);        
---
(5,my_text_embedding_model,polar_ai,text-embedding-v2,t)

定义Embedding函数

CREATE OR REPLACE FUNCTION my_text_embedding_func(model_id text, texts text)
    RETURNS float8[]
    AS $$ select array(select json_array_elements_text(polar_ai.AI_CALLMODEL($1,$2)::json))::float8[] as result $$
    LANGUAGE 'sql' IMMUTABLE;

批量文本转向量

  • 对于已经在数据库内的数据,可以批量执行文本转向量并写入向量字段,例如:
-- 创建向量插件
create extension vector;
-- 创建向量表
create table my_text_embedding_tbl(id int, content text, vec vector(1536));
-- 插入数据
insert into my_text_embedding_tbl values(1,'PolarDB是阿里巴巴自研的新一代云原生数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。'),(2,'postgresql是一种开源的关系型数据库管理系统,由PostgreSQL Global Development Group开发,由Perl编写。');
-- 批量生成并写入向量
update my_text_embedding_tbl set vec=my_text_embedding_func('my_text_embedding_model', content);

向量检索

  • 将文本生成向量后,可利用向量检索进行快速、准确地检索相似文本。
-- 创建向量索引
CREATE INDEX ON my_text_embedding_tbl USING hnsw (vec vector_l2_ops);
-- 根据内容进行检索
select content from my_text_embedding_tbl where vec <=> my_text_embedding_func('my_text_embedding_model', 'PolarDB数据库架构是怎么样的?')::vector(1536) < 0.5;
----
PolarDB是阿里巴巴自研的新一代云原生数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。
(1 row)

至此,已完成Polar_AI功能的初步体验。如需进一步帮助,请联系PolarDB技术支持。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3天前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
14 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
3天前
|
人工智能 监控 安全
云端问道18期实践教学-AI 浪潮下的数据安全管理实践
本文主要介绍AI浪潮下的数据安全管理实践,主要分为背景介绍、Access Point、Bucket三个部分
31 16
|
3天前
|
人工智能 关系型数据库 分布式数据库
PolarDB-PG AI最佳实践3 :PolarDB AI多模态相似性搜索最佳实践
本文介绍了如何利用PolarDB结合多模态大模型(如CLIP)实现数据库内的多模态数据分析和查询。通过POLAR_AI插件,可以直接在数据库中调用AI模型服务,无需移动数据或额外的工具,简化了多模态数据的处理流程。具体应用场景包括图像识别与分类、图像到文本检索和基于文本的图像检索。文章详细说明了技术实现、配置建议、实战步骤及多模态检索示例,展示了如何在PolarDB中创建模型、生成embedding并进行相似性检索
|
3天前
|
SQL 人工智能 关系型数据库
PolarDB-PG AI最佳实践 2 :PolarDB AI X EAS实现自定义库内模型推理最佳实践
PolarDB通过POLAR_AI插件支持使用SQL调用AI/ML模型,无需专业AI知识或额外部署环境。结合阿里云EAS在线模型服务,可轻松部署自定义模型,在SQL中实现如文本翻译等功能。
|
3天前
|
人工智能 弹性计算 自然语言处理
云端问道 6 期实践教学-创意加速器:AI 绘画创作
本文介绍了在阿里云平台上一键部署Demo应用的步骤。部署完成后,通过公网地址体验Demo应用,包括文本生成图像等功能。
20 10
|
2天前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案。
|
3天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
5天前
|
存储 人工智能 运维
AI + 可观测最佳实践:让业务从“看见”到“洞察”
本文介绍了AI Ops的概念及其在提升系统运维效率、洞察力和可观测性方面的作用。主要内容分为三个部分:一是监控、观测与洞察的区别及挑战,强调了数据整合和语义对齐的重要性;二是AI与计算如何重塑可观测性,通过UModel数字图谱和多模态存储分析架构实现数据联通;三是最佳实践与未来展望,展示了阿里云AI Stack可观测解决方案的应用案例,并总结了可观测性的四个发展阶段,最终愿景是借助AI力量让每个人成为多领域的专家。
|
3天前
|
存储 数据采集 算法
构建AI数据管道:从数据到洞察的高效之旅最佳实践
本文探讨了大模型从数据处理、模型训练到推理的全流程解决方案,特别强调数据、算法和算力三大要素。在数据处理方面,介绍了多模态数据的高效清洗与存储优化;模型训练中,重点解决了大规模数据集和CheckPoint的高效管理;推理部分则通过P2P分布式加载等技术提升效率。案例展示了如何在云平台上实现高性能、低成本的数据处理与模型训练,确保业务场景下的最优表现。
|
2天前
|
人工智能 容灾 Serverless
AI推理新纪元,PAI全球化模型推理服务的创新与实践
本次分享主题为“AI推理新纪元,PAI全球化模型推理服务的创新与实践”,由阿里云高级产品经理李林杨主讲。内容涵盖生成式AI时代推理服务的变化与挑战、play IM核心引擎的优势及ES专属网关的应用。通过LM智能路由、多模态异步生成等技术,PAI平台实现了30%以上的成本降低和显著性能提升,确保全球客户的业务稳定运行并支持异地容灾,目前已覆盖16个地域,拥有10万张显卡的推理集群。

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB