All Products
Search
Document Center

E-MapReduce:Panggil API EMR AI Assistant

Last Updated:Aug 21, 2026

EMR AI Assistant adalah layanan asisten AI percakapan. Anda dapat menggunakan bahasa alami untuk mengirim permintaan melalui API guna secara otomatis mendiagnosis SQL lambat dan melakukan pemeriksaan kesehatan pada instans Serverless StarRocks Anda, serta menerima saran optimasi. Topik ini menjelaskan cara memanggil API EMR AI Assistant menggunakan Python SDK.

Fitur

EMR AI Assistant menyediakan fitur inti berikut:

  • Diagnosis SQL lambat: Mengidentifikasi kueri dengan waktu eksekusi terlama, menentukan hambatan performa, dan memberikan saran optimasi.

  • Pemeriksaan kesehatan: Melakukan pemeriksaan komprehensif pada instans Anda, lalu menghasilkan skor kesehatan, daftar masalah, dan saran perbaikan.

Anda dapat mengirim permintaan dalam bahasa alami tanpa perlu membuat panggilan API atau mengonfigurasi parameter tugas secara manual.

Langkah 1: Instal dependensi

Jalankan perintah berikut untuk menginstal Alibaba Cloud OpenAPI SDK:

pip install alibabacloud_tea_openapi alibabacloud_tea_util

Langkah 2: Konfigurasikan AccessKey Anda

Konfigurasikan AccessKey Alibaba Cloud Anda menggunakan variabel lingkungan:

export ALIBABA_CLOUD_ACCESS_KEY_ID=<your_access_key_id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your_access_key_secret>
Penting
  • EMR AI Assistant menggunakan identitas akun ini untuk mengakses data dan hanya dapat mengakses instans yang dimiliki oleh akun tersebut. Pastikan layanan EMR AI Assistant telah diaktifkan untuk akun ini dan memiliki izin untuk mengakses instans target.

  • Jangan menyematkan AccessKey Anda secara langsung dalam kode. Kami menyarankan agar kredensial diberikan melalui variabel lingkungan demi keamanan yang lebih baik.

Langkah 3: Tulis kode klien

Ganti ENDPOINT pada kode berikut dengan titik akhir (endpoint) sesuai wilayah instans Anda.

Wilayah yang didukung

Wilayah

ID Wilayah

Endpoint

Tiongkok (Hangzhou)

cn-hangzhou

emrassistant.cn-hangzhou.aliyuncs.com

Tiongkok (Shanghai)

cn-shanghai

emrassistant.cn-shanghai.aliyuncs.com

Tiongkok (Qingdao)

cn-qingdao

emrassistant.cn-qingdao.aliyuncs.com

Tiongkok (Beijing)

cn-beijing

emrassistant.cn-beijing.aliyuncs.com

Tiongkok (Hohhot)

cn-huhehaote

emrassistant.cn-huhehaote.aliyuncs.com

Tiongkok (Ulanqab)

cn-wulanchabu

emrassistant.cn-wulanchabu.aliyuncs.com

Tiongkok (Shenzhen)

cn-shenzhen

emrassistant.cn-shenzhen.aliyuncs.com

Tiongkok (Chengdu)

cn-chengdu

emrassistant.cn-chengdu.aliyuncs.com

Singapura

ap-southeast-1

emrassistant.ap-southeast-1.aliyuncs.com

Kode klien lengkap

import json
import os
import sys

from alibabacloud_tea_openapi.client import Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models

# ENDPOINT: Titik akhir (endpoint) untuk wilayah instans Anda.
# Untuk daftar lengkapnya, lihat tabel di atas.
ENDPOINT = "emrassistant.cn-hangzhou.aliyuncs.com"


def create_client() -> Client:
    return Client(open_api_models.Config(
        access_key_id=os.environ["ALIBABA_CLOUD_ACCESS_KEY_ID"],
        access_key_secret=os.environ["ALIBABA_CLOUD_ACCESS_KEY_SECRET"],
        endpoint=ENDPOINT,
    ))


_PARAMS = open_api_models.Params(
    action="ChatCompletion", version="2025-07-23", protocol="HTTPS",
    method="POST", pathname="/v1/chat/completions",
    auth_type="AK", style="ROA", req_body_type="json", body_type="json",
)


def chat(client: Client, question: str, session_id: str = None) -> str:
    """Mengirim pertanyaan ke asisten dan mengalirkan respons secara real-time. Mengembalikan ID sesi untuk pertanyaan lanjutan."""
    body = {"stream": True, "messages": [{"role": "user", "content": question}]}
    if session_id:
        body["sessionId"] = session_id

    request = open_api_models.OpenApiRequest(body=body)
    runtime = util_models.RuntimeOptions(connect_timeout=10_000, read_timeout=300_000)

    try:
        for resp in client.call_sseapi(_PARAMS, request, runtime):
            data = resp.event.data if resp.event else None
            if not data or data == "[DONE]":      # [DONE]: Menandai akhir aliran respons.
                continue
            msg = json.loads(data)
            if msg.get("type") == "run_started":
                session_id = msg.get("sessionId")        # Tangkap ID sesi.
            elif msg.get("type") == "text":
                sys.stdout.write(msg.get("text", ""))    # Tampilkan output secara real-time.
                sys.stdout.flush()
    except Exception as e:
        print(f"\n[Pemanggilan API gagal] {e}", file=sys.stderr)
        print("Periksa apakah AccessKey Anda benar, layanan EMR AI Assistant telah diaktifkan, "
              "dan endpoint sesuai dengan wilayah instans Anda.", file=sys.stderr)
        return session_id
    print()
    return session_id

Contoh penggunaan

Sertakan ID instans (dimulai dengan c-) dan wilayahnya dalam pertanyaan Anda. Asisten akan menggunakan informasi ini untuk secara otomatis menemukan instans target.

Diagnosis SQL lambat

client = create_client()
chat(client,
     "Instans Serverless StarRocks saya c-xxxxxxxx (cn-hangzhou) belakangan ini lambat. "
     "Bantu saya mendiagnosis kueri SQL lambat teratas, identifikasi hambatan, dan berikan saran optimasi.")

Asisten secara otomatis mengidentifikasi kueri dengan waktu eksekusi terlama, menemukan pola SQL yang mengonsumsi sumber daya tinggi, menganalisis tren, dan memberikan saran optimasi untuk kueri lambat tertentu.

Pemeriksaan kesehatan

client = create_client()
chat(client,
     "Lakukan pemeriksaan kesehatan pada instans Serverless StarRocks c-xxxxxxxx (cn-hangzhou) dan hasilkan laporan.")

Asisten melakukan pemeriksaan komprehensif pada instans dan menghasilkan skor kesehatan, daftar anomali, serta saran perbaikan.

Contoh output

Contoh berikut menunjukkan output aktual. Informasi instans telah disamarkan demi privasi.

Output diagnosis SQL lambat

Asisten secara otomatis menemukan instans, mengambil kueri yang baru-baru ini paling banyak mengonsumsi sumber daya, dan memberikan diagnosis tingkat profil:

Instans: c-xxxxxxxx (StarRocks 3.2.4, Berjalan)
Kueri paling intensif CPU dalam satu jam terakhir: Kueri metadata information_schema
Diagnosis: Total waktu 102 ms / CPU 43,5 ms / Memori puncak 3,21 MB / Rasio tunggu 80,88%
Operator penyebab hambatan: SCHEMA_SCAN(node 7) 9,26 ms, SCHEMA_SCAN(node 0) 8,16 ms, HASH_JOIN(node 5) 1,28 MB
Kesimpulan: Kueri ini memiliki beban kerja rendah dan tidak perlu dioptimalkan. Jika sering terjadi, kami sarankan Anda menyimpan cache metadata di sisi klien atau menggunakan kolam koneksi.

Output pemeriksaan kesehatan

Instans: c-xxxxxxxx (StarRocks 3.2.4, onBareMetal / lakehouse, Berjalan)
Skor kesehatan: 100/100
Metrik utama: 24 jam terakhir: Kritis 0 / Peringatan 0 / Info 0. Stabilitas keseluruhan sangat baik.
Anomali: Tidak ada
Saran perbaikan: Evaluasi peningkatan versi, aktifkan peningkatan versi minor otomatis, atur pemeriksaan kesehatan dan peringatan berkala, serta evaluasi spesifikasi sumber daya berdasarkan pertumbuhan bisnis.

Percakapan multi-putaran

Fungsi chat() mengembalikan ID sesi. Anda dapat meneruskan ID ini pada pemanggilan berikutnya untuk melanjutkan percakapan dalam konteks yang sama. Misalnya, jika Anda tidak menentukan instans pada permintaan pertama, asisten akan menanyakannya, dan Anda dapat memberikan informasi tersebut pada putaran berikutnya:

client = create_client()

# Putaran 1: Tidak ada instans yang ditentukan, sehingga asisten menanyakan instans mana yang akan didiagnosis.
sid = chat(client, "Bantu saya mendiagnosis kueri SQL lambat di StarRocks.")

# Putaran 2: Kirim kembali ID sesi dan berikan informasi instans.
chat(client, "Instansnya adalah c-xxxxxxxx, di cn-hangzhou", session_id=sid)

Praktik terbaik

Tentukan tugas dan target

Asisten menentukan apakah akan memanggil API diagnosis berdasarkan prompt Anda. Sertakan tindakan dan target:

  • Tindakan: Gunakan kata kerja yang jelas, seperti periksa, diagnosa, identifikasi, atau optimalkan.

  • Target: ID instans (yang dimulai dengan c-) dan wilayahnya.

Jika Anda menyediakan keduanya, asisten akan memicu diagnosis. Jika salah satu tidak tersedia, permintaan akan dialihkan ke mode tanya jawab berbasis pengetahuan, dan data instans tidak akan diambil.

Jenis

Contoh prompt

Perilaku asisten

Diagnosis instans

"Lakukan pemeriksaan kesehatan pada instans c-xxxxxxxx (cn-wulanchabu)."

Terhubung ke instans dan mengambil data aktual.

Tanya jawab berbasis pengetahuan

"Apa perbedaan antara arsitektur shared-data dan arsitektur tanpa berbagi di StarRocks?"

Menjawab berdasarkan pengetahuan produk tanpa memanggil API diagnosis.

Pahami respons

Data yang dikumpulkan dan hasil yang dikembalikan bervariasi tergantung permintaan Anda:

Permintaan

Data yang dikumpulkan

Output

Pemeriksaan kesehatan

Event kesehatan dan metrik pemantauan, seperti CPU, memori, JVM, I/O disk, dan performa kueri.

Skor kesehatan, daftar masalah, dan saran perbaikan.

Diagnosis SQL lambat

Log audit FE dan data agregat pola SQL.

Kueri lambat teratas, identifikasi hambatan, dan saran optimasi.

Interpretasikan hasil kosong dengan benar

Jika suatu instans memiliki volume kueri rendah, diagnosis SQL lambat mungkin mengembalikan "tidak ditemukan kueri lambat signifikan", dan pemeriksaan kesehatan mungkin melaporkan "beban kerja rendah dan sumber daya mencukupi". Hal ini berarti instans dalam kondisi sehat dan bukan menunjukkan kegagalan pemanggilan API.

Tingkat lanjut: Arahkan langsung ke agen StarRocks

Secara default, EMR AI Assistant terlebih dahulu mengidentifikasi maksud Anda lalu meneruskan permintaan ke sub-asisten yang sesuai. Jika alur kerja Anda hanya melibatkan Serverless StarRocks, Anda dapat menentukan ServerlessStarrocksV3Agent sebagai nilai parameter model dalam badan permintaan. Hal ini melewati proses perutean maksud, sehingga meningkatkan stabilitas diagnosis:

# Tambahkan bidang model ke badan yang sudah ada.
body = {
    "stream": True,
    "model": "ServerlessStarrocksV3Agent",   # Arahkan permintaan langsung ke agen StarRocks.
    "messages": [{"role": "user",
                  "content": "Lakukan pemeriksaan kesehatan pada instans c-xxxxxxxx (cn-wulanchabu) dan hasilkan laporan."}],
}

Parameter model

Deskripsi

Tidak ditentukan atau diatur ke emr-assistant

Menggunakan perutean maksud default. Cocok untuk skenario di mana sulit menentukan agen target.

ServerlessStarrocksV3Agent

Permintaan dikirim langsung ke agen StarRocks. Cocok untuk alur kerja khusus yang hanya melibatkan diagnosis atau pemeriksaan kesehatan StarRocks.