Todos os produtos
Search
Central de documentação

E-MapReduce:Melhores práticas para AI Function

Última atualização: Sep 17, 2026

Este tópico apresenta um caso de uso de análise de texto financeiro para demonstrar como as AI Functions do StarRocks permitem executar análise de sentimentos, classificação de texto, extração de informações e omissão de PII diretamente em SQL, sem exportar dados para sistemas externos.

Visão geral

Organizações financeiras frequentemente precisam analisar texto não estruturado em grande escala: chamados de reclamação exigem detecção de sentimentos, avisos regulatórios demandam classificação de conformidade, contratos requerem extração de termos-chave e registros de clientes necessitam da omissão de PII. Abordagens tradicionais exportam dados para pipelines externos de NLP, o que introduz latência, complexidade de integração e riscos à segurança dos dados.

As AI Functions do StarRocks trazem essas capacidades diretamente para o SQL. Uma única consulta classifica, resume, extrai ou omite campos de texto em tabelas estruturadas, sem que os dados saiam do mecanismo e sem orquestração de service externo.

Capacidades principais

Este tutorial utiliza as seguintes AI functions integradas:

Função

Capacidade

Caso de uso financeiro

ai_sentiment(text)

Análise de sentimentos

Feedback de clientes / monitoramento de sentimento público

ai_classify(text, categories)

Classificação de texto

Roteamento de chamados / classificação de avisos regulatórios

ai_extract(text, labels)

Extração de informações

Extração de termos-chave de contratos

ai_redact(text)

Omissão de PII

Conformidade de dados de clientes

ai_summarize(text)

Resumo de texto

Resumo de relatórios de pesquisa / avisos regulatórios

ai_filter(text, condition)

Filtragem semântica

Triagem de texto de risco

ai_complete(prompt, instruction)

Análise personalizada

Raciocínio financeiro complexo

Principais vantagens

  • Dados permanecem no mecanismo: Todo o processamento de IA ocorre dentro do StarRocks. Dados financeiros sensíveis nunca saem do banco de dados.

  • Interface SQL pura: Analistas trabalham com SQL familiar em vez de construir pipelines em Python ou Java.

  • Processamento em lote em escala: As AI functions processam milhões de registros de texto em lote, com integração nativa a pipelines de ETL.

  • Integração analítica contínua: Os resultados das AI functions alimentam diretamente operações como GROUP BY, JOIN, window functions e outras análises.

Fluxo de trabalho

O fluxo de trabalho de ponta a ponta consiste em três etapas:

  1. Ingestão de dados: Carregue dados de texto financeiro (chamados de clientes, avisos regulatórios, documentos contratuais etc.) nas tabelas do StarRocks.

  2. Processamento de texto com IA: Chame AI functions em SQL para analisar sentimentos, classificar, extrair e omitir informações. Todo o processamento ocorre internamente no mecanismo.

  3. Análise e tomada de decisão: Combine resultados de IA com agregações SQL para gerar distribuições de sentimentos, resumos de classificação, relatórios de elementos contratuais e outros insights de negócios para painéis e relatórios.

Pré-requisitos

Requisitos de ambiente

  • EMR Serverless StarRocks 2.1.1 ou posterior.

  • Recursos de AI Function ativados em AI Center.

Dados de exemplo

Este tutorial usa três tabelas de exemplo que simulam dados típicos de texto financeiro. Crie as tabelas e insira registros de amostra conforme descrito abaixo.

Chamados de atendimento ao cliente

CREATE TABLE fin_customer_tickets (
    ticket_id       BIGINT,
    customer_id     VARCHAR(20),
    channel         VARCHAR(10)    COMMENT 'Channel: app/web/phone/branch',
    product_type    VARCHAR(20)    COMMENT 'Product: credit_card/loan/deposit/fund/insurance',
    ticket_text     VARCHAR(65533) COMMENT 'Ticket content',
    created_at      DATETIME
)
DUPLICATE KEY(ticket_id)
DISTRIBUTED BY HASH(ticket_id) BUCKETS 8;
INSERT INTO fin_customer_tickets VALUES
(1001, 'C20240001', 'app', 'credit_card',
 'Your credit card statement is wrong AGAIN! I paid 8000 last month but the bill still shows 5000 outstanding. This is the third time! Fix this or I will escalate to the banking regulator!', '2026-05-01 09:15:00'),
(1002, 'C20240002', 'phone', 'loan',
 'I would like to ask about the process for early mortgage repayment. What documents do I need? Is there a prepayment penalty?', '2026-05-01 10:30:00'),
(1003, 'C20240003', 'web', 'fund',
 'The "conservative" fund you recommended lost 15% in a single month! How is that conservative? I demand compensation! Is the fund manager even doing their job?', '2026-05-01 11:45:00'),
(1004, 'C20240004', 'app', 'deposit',
 'The auto-renewal feature for large CDs is very convenient. The interest rate is also decent, up 0.1 percentage points from before. Overall a good experience.', '2026-05-01 14:00:00'),
(1005, 'C20240005', 'branch', 'insurance',
 'Insurance claim processing is way too slow. I spent 30,000 on a hospital stay. Submitted all documents two months ago and still no result. Called customer service multiple times and they just say it is under review.', '2026-05-01 15:20:00'),
(1006, 'C20240006', 'app', 'credit_card',
 'The new platinum card perks are great. Airport lounge was comfortable, and the points redemption program is a good deal. Already recommended it to friends.', '2026-05-01 16:00:00'),
(1007, 'C20240007', 'phone', 'loan',
 'Can I change my car loan payment date? Currently it debits on the 5th, but my salary arrives on the 15th. It is tight every month.', '2026-05-02 09:00:00'),
(1008, 'C20240008', 'web', 'fund',
 'My index fund DCA has been running for six months. Returns are decent, around 8% annualized. Planning to keep holding.', '2026-05-02 10:15:00');

Avisos regulatórios

CREATE TABLE fin_regulatory_news (
    news_id         BIGINT,
    source          VARCHAR(50)    COMMENT 'Issuing authority',
    publish_date    DATE,
    title           VARCHAR(500),
    content         VARCHAR(65533) COMMENT 'Full text'
)
DUPLICATE KEY(news_id)
DISTRIBUTED BY HASH(news_id) BUCKETS 4;
INSERT INTO fin_regulatory_news VALUES
(2001, 'Central Bank', '2026-04-28',
 'Notice on Strengthening Financial Consumer Protection',
 'To further protect financial consumer rights and regulate the conduct of financial institutions, in accordance with the Consumer Protection Law and related regulations, the following requirements are hereby issued: 1. Financial institutions shall establish consumer protection mechanisms with dedicated departments or personnel. 2. Financial institutions shall fully disclose product risks during marketing and sales, and shall not engage in false or misleading advertising. 3. Financial institutions shall maintain accessible complaint channels and resolve complaints within 15 business days.'),
(2002, 'Banking Regulatory Commission', '2026-04-25',
 'Regulatory Requirements on Credit Fund Usage',
 'Recent inspections have identified cases of bank credit funds flowing illegally into real estate and stock markets. Requirements: All banking institutions shall strengthen post-lending management to ensure credit funds are used for their intended purposes. For business loans, institutions shall verify the genuine business needs of borrowers to prevent fund misuse. Violating institutions will face regulatory penalties including but not limited to fines and business scope restrictions.'),
(2003, 'Securities Regulatory Commission', '2026-04-20',
 'Opinions on Further Standardizing Information Disclosure by Listed Companies',
 'To improve the quality of information disclosure by listed companies and protect investor rights, the following opinions are issued: Listed companies shall disclose information truthfully, accurately, completely, and in a timely manner, with no false records, misleading statements, or material omissions. Listed companies are encouraged to voluntarily disclose information relevant to investor decision-making to enhance transparency.'),
(2004, 'Central Bank', '2026-04-15',
 'Q1 2026 Monetary Policy Report',
 'In Q1 2026, prudent monetary policy remained precise and effective. At the end of March, broad money supply M2 grew 8.2% year-over-year. RMB loan balances grew 10.5% YoY, and aggregate financing stock grew 9.8% YoY. Interest rate liberalization continued to advance, with corporate lending rates remaining at low levels. In the next phase, prudent monetary policy will continue to maintain reasonably ample liquidity.');

Documentos contratuais

CREATE TABLE fin_contracts (
    contract_id     VARCHAR(30),
    contract_type   VARCHAR(20)   COMMENT 'Type: loan/guarantee/pledge',
    party_a         VARCHAR(200),
    party_b         VARCHAR(200),
    contract_text   VARCHAR(65533) COMMENT 'Key contract terms'
)
DUPLICATE KEY(contract_id)
DISTRIBUTED BY HASH(contract_id) BUCKETS 4;
INSERT INTO fin_contracts VALUES
('LOAN-2026-0001', 'loan', 'ABC Bank Hangzhou Branch', 'Hangzhou Starcorp Technology Co., Ltd.',
 'Loan amount: RMB 5,000,000.00. Term: January 15, 2026 to January 14, 2027 (12 months). Interest rate: LPR plus 60 basis points, i.e. 4.15% per annum. Repayment: Equal principal and interest, due on the 20th of each month. Default clause: Late payments incur a penalty of 0.05% per day on the overdue amount. Collateral: Property located at XX Road, Xihu District, Hangzhou, owned by the borrower.'),
('LOAN-2026-0002', 'loan', 'ABC Bank Shanghai Branch', 'Shanghai Jinxiu Trading Co., Ltd.',
 'Loan amount: RMB 10,000,000.00. Term: March 1, 2026 to February 28, 2028 (24 months). Interest rate: Fixed at 4.35% per annum. Repayment: Interest-only quarterly, principal due at maturity. Default clause: If the borrower misses three consecutive interest payments or misuses loan funds, the lender may declare the loan immediately due. Guarantee: Joint and several liability guarantee provided by Shanghai Jinxiu Group Co., Ltd.'),
('GUAR-2026-0001', 'guarantee', 'ABC Bank Hangzhou Branch', 'Zhejiang Xinda Industrial Group Co., Ltd.',
 'Guarantee type: Joint and several liability. Scope: Principal of RMB 5,000,000 plus interest, penalties, liquidated damages, and enforcement costs. Period: Two years from the maturity of the principal obligation. Guarantor declaration: The guarantor has full civil capacity and is willing to provide joint and several liability guarantee with all its assets. Contact: Wei Zhang, Phone: 13812345678, ID: 330102198501153456.');

Cenário 1: Análise inteligente de chamados

Análise de sentimentos: detectando emoções dos clientes

Avalie rapidamente o sentimento de cada chamado para priorizar feedbacks negativos:

SELECT
    ticket_id,
    product_type,
    ai_sentiment(ticket_text) AS sentiment,
    LEFT(ticket_text, 40) AS preview
FROM fin_customer_tickets
ORDER BY ticket_id;

Saída de exemplo:

ticket_id

product_type

sentiment

preview

1001

credit_card

negative

Your credit card statement is wrong AGAIN...

1002

loan

neutral

I would like to ask about the process for...

1003

fund

negative

The "conservative" fund you recommended lost...

1004

deposit

positive

The auto-renewal feature for large CDs is...

1005

insurance

negative

Insurance claim processing is way too slow...

1006

credit_card

positive

The new platinum card perks are great...

Classificação de chamados: categorização automática por tipo de negócio

Encaminhe automaticamente chamados em texto livre para categorias de negócios predefinidas:

SELECT
    ticket_id,
    ai_classify(
        ticket_text,
        ARRAY['Billing Dispute', 'General Inquiry', 'Complaint', 'Product Feedback', 'Claims Issue']
    ) AS category,
    ai_sentiment(ticket_text) AS sentiment
FROM fin_customer_tickets;

Distribuição de sentimentos: agregação por produto

Combine resultados da análise de IA com agregação SQL:

SELECT
    product_type,
    ai_sentiment(ticket_text) AS sentiment,
    COUNT(*) AS ticket_count
FROM fin_customer_tickets
GROUP BY product_type, ai_sentiment(ticket_text)
ORDER BY product_type, ticket_count DESC;

Saída de exemplo:

product_type

sentiment

ticket_count

credit_card

negative

1

credit_card

positive

1

fund

negative

1

fund

positive

1

insurance

negative

1

loan

neutral

2

deposit

positive

1

Filtragem semântica: triagem de chamados de alto risco

Utilize ai_filter na cláusula WHERE para filtrar linhas com base em condições semânticas. A consulta a seguir localiza chamados nos quais o cliente ameaça escalar a questão para um órgão regulador:

SELECT
    ticket_id,
    product_type,
    ticket_text,
    ai_sentiment(ticket_text) AS sentiment
FROM fin_customer_tickets
WHERE ai_filter(ticket_text, 'customer threatens to escalate to a regulator or demands compensation');

ai_filter retorna um BOOLEAN e pode ser usado diretamente em cláusulas WHERE, permitindo condições de filtro em linguagem natural.

Cenário 2: Classificação e resumo de avisos regulatórios

Classificação de avisos

Classifique avisos regulatórios por domínio regulatório:

SELECT
    news_id,
    source,
    title,
    ai_classify(
        content,
        ARRAY['Consumer Protection', 'Credit Regulation', 'Disclosure Requirements', 'Monetary Policy', 'Anti-Money Laundering', 'Market Access']
    ) AS reg_category
FROM fin_regulatory_news;

Resumo de avisos

Gere resumos concisos de avisos extensos para revisão executiva:

SELECT
    news_id,
    title,
    ai_summarize(content) AS summary
FROM fin_regulatory_news
WHERE publish_date >= '2026-04-01';

Análise de impacto de conformidade

Use ai_complete para uma análise de negócios mais profunda, avaliando como um aviso impacta as operações do banco:

SELECT
    news_id,
    title,
    ai_complete(
        content,
        'You are a bank compliance analyst. Analyze the specific impact of this regulatory notice on commercial bank retail operations. List the key remediation items. Keep your response under 100 words.'
    ) AS compliance_impact
FROM fin_regulatory_news
WHERE ai_filter(content, 'involves banking compliance requirements or penalty measures');

Cenário 3: Extração de termos-chave de contratos

Extração de elementos contratuais

Extraia automaticamente termos-chave estruturados do texto do contrato:

SELECT
    contract_id,
    contract_type,
    ai_extract(
        contract_text,
        ARRAY['Loan Amount', 'Term', 'Annual Rate', 'Repayment Method', 'Collateral', 'Default Clause']
    ) AS key_elements
FROM fin_contracts
WHERE contract_type = 'loan';

Saída de exemplo (formato JSON):

{
  "Loan Amount": "RMB 5,000,000.00",
  "Term": "January 15, 2026 to January 14, 2027 (12 months)",
  "Annual Rate": "LPR plus 60 basis points, i.e. 4.15%",
  "Repayment Method": "Equal principal and interest, due on the 20th",
  "Collateral": "Property in Xihu District, Hangzhou",
  "Default Clause": "Late payments incur a 0.05% daily penalty"
}

Omissão de PII em contratos

Omita informações de identificação pessoal do texto do contrato para atender aos requisitos de conformidade de dados:

SELECT
    contract_id,
    ai_redact(contract_text) AS redacted_text
FROM fin_contracts
WHERE contract_type = 'guarantee';

Resultado da omissão:

Original: Contact: Wei Zhang, Phone: 13812345678, ID: 330102198501153456
Redacted: Contact: W** Z****, Phone: 138****5678, ID: 330102********3456

Avaliação de risco contratual

Combine ai_extract e ai_complete para criar um pipeline de avaliação de risco contratual:

WITH contract_elements AS (
    SELECT
        contract_id,
        party_a,
        party_b,
        contract_text,
        ai_extract(
            contract_text,
            ARRAY['Loan Amount', 'Annual Rate', 'Collateral', 'Default Clause']
        ) AS elements
    FROM fin_contracts
    WHERE contract_type = 'loan'
)
SELECT
    contract_id,
    party_b,
    elements,
    ai_complete(
        CONCAT('Contract elements: ', CAST(elements AS VARCHAR), '\n\nFull contract: ', contract_text),
        'You are a credit risk expert. Based on the contract elements, assess the risk level (Low/Medium/High) and identify key risk factors. Keep your response under 80 words.'
    ) AS risk_assessment
FROM contract_elements;

Cenário 4: Pipeline de análise de ponta a ponta

Painel de análise de texto Customer 360

Combine múltiplas AI functions para construir uma visão de análise multidimensional do feedback dos clientes:

SELECT
    ticket_id,
    customer_id,
    product_type,
    channel,
    ai_sentiment(ticket_text)  AS sentiment,
    ai_classify(
        ticket_text,
        ARRAY['Billing Dispute', 'General Inquiry', 'Complaint', 'Product Feedback', 'Claims Issue']
    ) AS category,
    ai_extract(
        ticket_text,
        ARRAY['Amount Involved', 'Customer Request']
    ) AS key_info,
    ai_summarize(ticket_text)  AS summary
FROM fin_customer_tickets
WHERE created_at >= '2026-05-01';

Materialized views para resultados de IA

Persista os resultados da análise de IA em uma materialized view para evitar computação redundante:

CREATE MATERIALIZED VIEW mv_ticket_analysis AS
SELECT
    ticket_id,
    customer_id,
    product_type,
    channel,
    created_at,
    ai_sentiment(ticket_text) AS sentiment,
    ai_classify(
        ticket_text,
        ARRAY['Billing Dispute', 'General Inquiry', 'Complaint', 'Product Feedback', 'Claims Issue']
    ) AS category
FROM fin_customer_tickets;

Consultas subsequentes leem da materialized view sem reinvocar as AI functions:

SELECT
    DATE(created_at) AS dt,
    product_type,
    COUNT(*) AS negative_tickets
FROM mv_ticket_analysis
WHERE sentiment = 'negative'
GROUP BY DATE(created_at), product_type
ORDER BY dt, negative_tickets DESC;

Integração de pipeline ETL: INSERT INTO SELECT

Grave os resultados do processamento de IA em uma tabela analítica downstream para construir um pipeline completo de processamento de dados:

-- Create the analysis results table
CREATE TABLE fin_ticket_analysis_result (
    ticket_id       BIGINT,
    customer_id     VARCHAR(20),
    product_type    VARCHAR(20),
    sentiment       VARCHAR(20),
    category        JSON,
    key_info        JSON,
    summary         VARCHAR(65533),
    analyzed_at     DATETIME DEFAULT CURRENT_TIMESTAMP
)
DUPLICATE KEY(ticket_id)
DISTRIBUTED BY HASH(ticket_id) BUCKETS 4;
-- Batch AI analysis with results written to the target table
INSERT INTO fin_ticket_analysis_result
    (ticket_id, customer_id, product_type, sentiment, category, key_info, summary)
SELECT
    ticket_id,
    customer_id,
    product_type,
    ai_sentiment(ticket_text),
    ai_classify(ticket_text, ARRAY['Billing Dispute', 'General Inquiry', 'Complaint', 'Product Feedback', 'Claims Issue']),
    ai_extract(ticket_text, ARRAY['Amount Involved', 'Customer Request']),
    ai_summarize(ticket_text)
FROM fin_customer_tickets
WHERE ticket_id NOT IN (SELECT ticket_id FROM fin_ticket_analysis_result);

Recomendações de melhores práticas

Recomendação

Detalhes

Prefira funções especializadas

ai_sentiment é mais rápida, consistente e econômica do que ai_complete('analyze sentiment...')

Processe em lote com INSERT INTO SELECT

Evite chamadas de AI function linha a linha. Grave os resultados em lote em uma tabela de destino e consulte essa tabela posteriormente.

Persista os resultados

Para textos estáticos, grave os resultados de IA em uma tabela de resultados ou materialized view para evitar computação redundante.

Pré-filtre com ai_filter

Reduza o conjunto de dados com ai_filter primeiro e execute funções mais pesadas apenas no conjunto resultante menor.

Monitore o consumo de tokens

Textos longos (por exemplo, contratos completos) consomem mais tokens por chamada. Considere usar ai_summarize antes de analisar o resumo.

Padronize rótulos de classificação

Adote uma taxonomia consistente e alinhada ao negócio para o parâmetro categories de ai_classify.

Resumo

As AI Functions do StarRocks oferecem uma abordagem em que os dados permanecem no mecanismo para análise inteligente de textos no setor financeiro. Com funções especializadas como ai_sentiment, ai_classify, ai_extract, ai_redact e ai_filter, as organizações realizam análise de sentimentos de clientes, classificação de chamados, extração de elementos contratuais e omissão de PII diretamente em SQL, sem service externo de NLP, sem exportação de dados e com total integração ao mecanismo de análise de alto desempenho do StarRocks.