AI Function 介绍

AI Function 是 EMR Serverless Spark 内置的 AI 能力集成层,让数据工程师无需 SDK、API 或模型运维,即可在 SQL/PySpark 中直接调用大模型完成情感分析、翻译、抽取等任务。

概述

AI Function 是 EMR Serverless Spark 提供的一组内置的 SQL / PySpark 函数,旨在以最少的配置将生成式 AI 与传统数据处理有效连接。这些函数被划分为两类:

  • 通用函数 (ai_query():以统一方式接入任意模型(包括内置模型、外部服务及自建服务),支持交互式推理与批量推理。

  • 任务型函数:开箱即用,能够高效完成翻译、情感分析、信息抽取、错误纠正、相似度计算及嵌入等常见任务。

说明

内置模型默认为 qwen-plus。如果未明确指定模型,任务型函数通用函数 (ai_query()将默认调用该模型。

使用前提

  • 支持的引擎版本。

    • esr-4.x:esr-4.6.0及之后版本。

    • esr-3.x:esr-3.5.0及之后版本。

    • esr-2.x:esr-2.9.0及之后版本。

  • 不支持场景

    Kyuubi GatewayLivy GatewayGateway类型任务。

  • 启用配置

    必须在作业提交时添加spark.emr.serverless.ai.function.enable true Spark 配置以启用 AI 功能。

函数一览

函数

说明

返回类型

典型用法

ai_query(prompt[, options])

通用模型调用接口,支持自定义 Prompt、指定模型及生成参数

STRING

批量摘要、信息抽取、调用外部/自建模型端点

ai_sentiment(text)

情感分析(正/负/中性)

STRING

舆情监控、客服评论分析、用户反馈分级

ai_fix_grammar(text)

语法与用词纠错

STRING

生成对外文案前自动润色

ai_classify(text, labels[, options])

多类别/多标签分类

STRING

工单分类(投诉/咨询/建议)、新闻主题识别、日志类型标注

ai_extract(text, schema_or_labels[, options])

从文本中提取预定义 STRUCT 结构字段

JSON

同关键信息抽取(甲方/金额/日期)、评论属性解析(产品/问题/满意度)

ai_similarity(a, b)

计算两段文本的语义相似度(0.0–1.0)

DOUBLE

去重、召回匹配、问答对相似性评分、RAG 相似文档检索

ai_translate(text, target_lang)

翻译到指定语言

STRING

端到端多语报表、跨境场景

ai_sql_optimize(sql_text[, options])

优化 SQL(重写/注释建议)

STRING

自动给出谓词下推、分桶/分区、Join 顺序建议

ai_sql_hive_to_spark(hql_text[, options])

将 HiveQL 转换为 Spark SQL 兼容语法

STRING

Hive 作业迁移、UDF 语法适配、窗口函数标准化

ai_embedding(text[, options])

生成文本语义向量

ARRAY<DOUBLE>

RAG 向量库构建、语义聚类、相似度召回、特征工程

通用函数:ai_query()

ai_query() 是 AI Function 提供的通用接口,用于执行自定义提示词(Prompt)调用大模型,支持灵活接入内置模型或外部服务。它适用于标准任务型函数无法覆盖的复杂推理、多轮指令、结构化输出等高级场景。

  • 函数语法

    ai_query(prompt_text [, service_name [, extra_options_json]])
  • 参数说明

    参数

    类型

    是否必填

    说明

    prompt_text

    STRING

    发送给模型的完整提示词(Prompt),应包含上下文、指令和输入数据。建议明确指定输出格式以提升稳定性。

    service_name

    STRING

    指定要调用的模型服务名称:
    • 若省略,则使用默认模型,默认为 qwen-plus

    • 通过模型服务注册的模型服务名称,请参见模型服务注册与调用

    extra_options_json

    STRING

    以 JSON 字符串 形式提供额外调用参数,用于控制生成行为。支持以下字段:
    • "temperature": 控制随机性 [0,1]
    • "top_p": 核采样参数。
    • "max_tokens": 最大输出 token 数。
    若省略,使用模型默认参数。

  • 返回值类型:STRING。

  • 使用示例

    • 不指定模型

      -- ai_query()不指定模型
      select
        ai_query ('请判断下面这个评论是正向还是负向?\n 这个东西相当不行');

      返回结果:

      这个评论是负向的。 理由:“相当不行”是一种明显的否定表达,语气较强,表示对某事物的强烈不满或负面评价。因此,整体情感倾向为负向。
    • 指定模型

      -- ai_query()指定‘my_qwen_service’模型
      select
        ai_query ('请判断下面这个评论是正向还是负向?\n 这个东西相当不行', 'my_qwen_service')
      ;

      返回结果:

      <think> 嗯,用户让我判断这个评论是正向还是负向。评论是“这个东西相当不行”。首先,我需要理解这句话的意思。用户说的是“这个东西”不好,所以应该属于负面评价。 接下来,我需要考虑常见的负面评价的特征。通常,负面评价会包含明显的负面词汇,比如“不行”、“不好”、“糟糕”、“糟糕的”等。这些都是典型的负面情感词汇。此外,用户用了“相当”这个词,可能是在强调程度,但主要还是在表达不满。 然后,我要考虑用户的潜在需求。用户可能是在对某个产品或服务不满意,需要判断这个评论是否有效传达了负面情绪。用户可能希望了解评论的方向,或者是否需要进一步处理。 还要注意用户可能的深层意图。用户可能是在寻找如何处理这类评论,或者是否应该进行改进。因此,回答时需要明确指出评论的负面性质,并解释原因,这样用户能清楚理解。 最后,确保回答简洁明了,直接指出评论是负向的,同时保持礼貌和专业。这样用户就能得到准确的信息,没有歧义。 </think> 这个评论是**负向**的。
    • 指定模型且指定参数

      -- ai_query()指定‘my_qwen_service’模型,且指定 “{"chat_template_kwargs": {"enable_thinking": false}}”参数,关闭思维链(thinking)过程
      select
        ai_query (
          '请判断下面这个评论是正向还是负向?\n 这个东西相当不行',
          'my_qwen_service',
          '{"chat_template_kwargs": {"enable_thinking": false}}'
        );

      返回结果:

      这个评论是**负向**。

任务型函数

情感分析:ai_sentiment()

ai_sentiment() 是 AI Function 提供的情感分析专用函数,用于自动识别文本中的情绪倾向,并返回积极、消极、中性结果。适用于用户评论分析、舆情监控等场景。

  • 函数语法

    ai_sentiment(text) 
  • 参数说明

    参数

    类型

    是否必填

    说明

    text

    STRING

    待分析的文本内容,建议为完整句子或段落。过短或无意义文本可能影响判断准确性。

  • 返回值类型:STRING 。

  • 使用示例

    SELECT
      ai_sentiment ('I absolutely love this  phone! It’s amazing!');

    返回结果:image

语法修正:ai_fix_grammar()

ai_fix_grammar() 是 AI Function 提供的语法纠错专用函数,用于自动检测并修正文本中的拼写错误、语法问题和表达不通顺之处。适用于用户生成内容清洗、客服对话优化、文档预处理等场景。

  • 函数语法

    ai_fix_grammar(text)
  • 参数说明

    参数

    类型

    是否必填

    说明

    text

    STRING

    待修正的原始文本内容,建议为完整句子或段落。

  • 返回值类型:STRING。

  • 使用示例

    SELECT
      ai_fix_grammar ('He go to school yesterday and dont like math.');

    返回结果:

    He went to school yesterday and didn't like math.

文本分类:ai_classify()

ai_classify() 是 AI Function 提供的文本分类专用函数,可根据指定的标签列表对输入文本进行自动归类。适用于新闻分类、工单路由、评论主题识别等多类别分类任务。

  • 函数语法

    ai_classify(text, labels[, options])
  • 参数说明

    参数

    类型

    是否必填

    说明

    text

    STRING

    待分类的文本内容,建议为完整语义单元。

    labels

    ARRAY

    候选分类标签数组,如 array('科技', '体育', '娱乐')。标签应具有区分性,避免语义重叠。

  • 返回值类型:String。

  • 使用示例

    SELECT ai_classify(
      '梅西在比赛中打入一记精彩任意球',
      array('科技', '体育', '娱乐', '财经')
    ) AS category;

    返回结果:

    体育

信息抽取:ai_extract()

ai_extract() 是 AI Function 提供的信息抽取专用函数,可从非结构化文本中提取预定义结构的字段信息。适用于用户评论解析、合同关键信息提取、日志结构化等场景。

  • 函数语法

    ai_extract(text, schema_or_labels[, options])
  • 参数说明

    参数

    类型

    是否必填

    说明

    text

    STRING

    待抽取信息的源文本内容。

    schema_or_labels

    ARRAY

    预定义的抽取的内容。

  • 返回值类型:JSON。

  • 使用示例

    select
      ai_extract (
        'I am Alice,from china . I am 6 years old. Welcome!',
        Array('country', 'age', 'name')
      );

    返回结果:

    {"country": "china", "age": "6", "name": "Alice"}

相似度计算:ai_similarity()

ai_similarity() 是 AI Function 提供的语义相似度计算函数,用于衡量两个文本之间的语义接近程度。基于向量余弦相似度实现,适用于重复内容识别、推荐系统、问答匹配等场景。

  • 函数语法

    ai_similarity(text1, text2)
  • 参数说明

    参数

    类型

    是否必填

    说明

    text1

    STRING

    第一个文本内容。

    text2

    STRING

    第二个文本内容。

  • 返回值类型:DOUBLE。

  • 使用示例

    SELECT
      ai_similarity (
        'I enjoy hiking in the mountains.',
        'I love walking through mountain trails.'
      );

    返回结果:

    0.85

翻译:ai_translate()

ai_translate() 是 AI Function 提供的文本翻译专用函数,支持将输入文本自动翻译为目标语言。适用于跨语言数据分析、国际化内容处理等场景。

  • 函数语法

    ai_translate(text, target_lang)
  • 参数说明

    参数

    类型

    是否必填

    说明

    text

    STRING

    待翻译的原始文本内容。

    target_lang

    STRING

    目标语言代码,目前支持:
    • 'zh':中文
    • 'en':英文
    • 'ja':日文
    • 'ko':韩文

  • 返回值类型:STRING。

  • 使用示例

    select
      ai_translate ('你来自哪儿?', 'en')
    ;

    返回结果:

    Where are you from?

SQL语句优化:ai_sql_optimize()

ai_sql_optimize() 是 AI Function 提供的 SQL 优化建议生成函数,可自动分析输入的 SQL 查询语句,给出谓词下推、分桶/分区、Join 顺序建议。适用于查询提速、资源节省和执行计划改进等场景。

  • 函数语法

    ai_sql_optimize(sql_text[, options])
  • 参数说明

    参数

    类型

    是否必填

    说明

    sql_text

    STRING

    待优化的 SQL 查询语句文本,建议包含完整的表结构上下文。

  • 返回值类型:STRING 。

  • 使用示例

    SELECT
      ai_sql_optimize (
        'SELECT * FROM logs WHERE date = "2025-01-01" AND user_id IN (SELECT id FROM users WHERE status = "active");'
      );

    返回结果:

    SELECT
      l.*
    FROM
      logs l
      JOIN users u ON l.user_id = u.id
    WHERE
      l.date = '2025-01-01'
      AND u.status = 'active'
    ;

HiveSpark SQL:ai_sql_optimize()

ai_sql_hive_to_spark() 是 AI Function 提供的 HiveQL 到 Spark SQL 的自动转换函数,能够识别 Hive 特有语法(如 LATERAL VIEWSORT BY 等),并将其转换为兼容 Spark SQL 的等价形式。适用于迁移 Hive 作业至 Spark 环境的场景。

  • 函数语法

    ai_sql_hive_to_spark(hql_text[, options])
  • 参数说明

    参数

    类型

    是否必填

    说明

    hql_text

    STRING

    输入的 HiveQL 语句,支持复杂查询、窗口函数等语法结构。

  • 返回值类型:STRING。

  • 使用示例

    SELECT
      ai_sql_hive_to_spark (
        '
      SELECT 
        user_id,
        nvl2(email, "verified", "anonymous") AS user_type,
        current_date() AS load_date
      FROM users
      WHERE login_time >= date_sub(current_date(), 7)
    '
      );

    返回结果:

    SELECT
      user_id,
      CASE
        WHEN email IS NOT NULL THEN "verified"
        ELSE "anonymous"
      END AS user_type,
      current_date() AS load_date
    FROM
      users
    WHERE
      login_time >= date_sub(current_date(), 7)

文字向量:ai_embedding()

ai_embedding() 是 AI Function 提供的文本向量化专用函数,可将文本转换为高维语义向量(Embedding),用于语义检索、聚类、相似度计算等下游 AI 任务。

  • 函数语法

    ai_embedding(text[, options])
  • 参数说明

    参数

    类型

    是否必填

    说明

    text

    STRING

    待向量化的文本内容,建议控制长度以避免截断。

    options

    int

    指定输出向量的维度,默认1024。

  • 返回值类型:ARRAY<DOUBLE> 。

  • 使用示例

    select ai_embedding ('This is a sentence', 256);

    返回结果:

    [-0.08807944506406784,0.041450440883636475,0.027626311406493187,-0.03082999959588051,-0.027538539841771126,0.030325308442115784,-0.0742553174495697,0.12841078639030457,-0.20047178864479065,0.2492731511592865,-0.07697625458240509,-0.0023876791819930077,0.01588677428662777,0.039453621953725815,0.035416096448898315,-0.044588297605514526,-0.025783095508813858,-0.09935817122459412,0.062230516225099564,0.06122113764286041,-0.019803611561655998,0.06359098851680756,0.08360305428504944,0.10120139271020889,-0.08680674433708191,-0.04792364314198494,0.012836690060794353,-0.06468813866376877,-0.08948379755020142,-0.00902956910431385,-0.17264799773693085,0.009084426797926426,-0.026200013235211372,0.009852433577179909,-0.02606835402548313,0.08351528644561768,-0.0015181854832917452,0.06165999919176102,-0.03504306450486183,0.019748752936720848,-0.04077020660042763,-0.047440893948078156,-0.04590488225221634,-0.017225300893187523,-0.03984859585762024,0.09795381873846054,-0.016599925234913826,-0.05077623948454857,-0.04487355798482895,-0.029623130336403847,-0.09058094769716263,0.027209393680095673,0.020637447014451027,-0.05981678143143654,0.07285095751285553,-0.012353942729532719,-0.02896483801305294,-0.12604093551635742,-0.060343414545059204,0.008782709948718548,0.0731581598520279,0.014306874945759773,-0.012321027927100658,0.003225629683583975,0.04382029175758362,-0.054506558924913406,-0.04298645257949829,0.011119645088911057,-0.013692469336092472,-0.06780405342578888,0.027604369446635246,0.11024193465709686,-0.06323989480733871,-0.04594876617193222,-0.037325143814086914,0.05415547266602516,-0.013747327029705048,0.07969719171524048,-0.11858029663562775,0.004797301255166531,-0.012759889476001263,0.006895606406033039,-0.07465028762817383,-0.04066048935055733,0.1428932100534439,0.037390973418951035,-0.012748917564749718,-0.07846838235855103,0.05415547266602516,-0.0560864619910717,-0.045422133058309555,0.04989851638674736,0.07842449843883514,0.0030226565431803465,0.031356632709503174,-0.04254759103059769,-0.13051731884479523,-0.01195896789431572,0.037654291838407516,-0.02290855348110199,-0.013494981452822685,-0.15605904161930084,-0.018443141132593155,-0.0013947556726634502,0.05305831879377365,0.06736519187688828,-0.09172198921442032,-0.05419935658574104,0.004629985429346561,0.09751495718955994,-0.010527183301746845,-0.08500741422176361,-0.06253772228956223,0.029228154569864273,9.778375970199704E-4,-0.057359158992767334,-0.0935652032494545,2.768597041722387E-4,-0.01802622340619564,0.028262659907341003,0.07342147827148438,-0.023676561191678047,-0.09769050031900406,-0.07697625458240509,0.05665697902441025,-0.15061716735363007,0.012310056015849113,-0.004180152900516987,0.087508924305439,-0.02492731623351574,-0.04120906442403793,-0.09865599870681763,0.055472053587436676,-0.03798343613743782,0.013308465480804443,-0.035591643303632736,0.028196832165122032,0.0260244682431221,-1.6988728020805866E-4,-0.02999616228044033,-0.023435188457369804,0.02786768600344658,0.06337155401706696,0.009775632992386818,0.04219650477170944,-0.057315271347761154,0.01100444421172142,-0.07895112782716751,-0.020341215655207634,0.013703440316021442,-0.0821109265089035,0.008376763202250004,-0.01687421277165413,-0.0050935326144099236,-0.025475893169641495,0.013286522589623928,0.05169785022735596,0.04568545147776604,0.08329585194587708,0.03730320185422897,0.06069450452923775,0.020670361816883087,0.04309616982936859,0.026353614404797554,-0.061352793127298355,-0.07236821204423904,-0.012847661040723324,-0.006835263222455978,-0.034428659826517105,0.009084426797926426,-0.011827308684587479,0.034560319036245346,-0.03793954849243164,0.05929014831781387,0.026419444009661674,0.03372648358345032,-0.021229909732937813,-0.015711231157183647,0.017587361857295036,-0.03291459009051323,0.05371661111712456,-0.02712162211537361,0.25787484645843506,-0.04318394139409065,-0.002493280218914151,-0.00854133628308773,-0.07478194683790207,0.024773715063929558,-0.009320314973592758,0.032475728541612625,0.05367272347211838,-0.031488291919231415,0.05275111645460129,0.11199737340211868,-0.05582314357161522,0.00895276851952076,-0.016259808093309402,0.16071097552776337,-0.04412749409675598,-0.04083603248000145,-0.04465412721037865,-0.09856822341680527,-0.08979099988937378,0.02593669667840004,0.11910692602396011,-0.027253279462456703,0.05915848910808563,-0.11910692602396011,0.03693016991019249,-0.07144660502672195,-0.04480772837996483,-0.04586099460721016,-0.04274507984519005,-0.019430579617619514,-0.00844807829707861,0.027604369446635246,-0.022579409182071686,0.019397664815187454,0.035503871738910675,0.07899501174688339,-0.06657524406909943,0.02505897358059883,-0.023786276578903198,0.0518295057117939,0.03671073913574219,0.05678863823413849,0.1004992127418518,0.008546821773052216,0.03872950002551079,0.0085248788818717,0.08641176670789719,-0.006901092361658812,-0.13771463930606842,-0.06767239421606064,-0.07789786159992218,0.06122113764286041,-0.02087882161140442,-0.031246917322278023,0.022623294964432716,-0.006160513963550329,0.09268748760223389,0.08465632051229477,-0.1036590114235878,-0.09900708496570587,0.008299962617456913,0.06367875635623932,-0.004986560437828302,-0.0022011632099747658,0.02088979259133339,-0.016139119863510132,-0.07934610545635223,0.029754789546132088,-0.04880136623978615,0.05595480278134346,-0.01239782851189375,0.02087882161140442]