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_utilLangkah 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>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 |
|
Tiongkok (Shanghai) | cn-shanghai |
|
Tiongkok (Qingdao) | cn-qingdao |
|
Tiongkok (Beijing) | cn-beijing |
|
Tiongkok (Hohhot) | cn-huhehaote |
|
Tiongkok (Ulanqab) | cn-wulanchabu |
|
Tiongkok (Shenzhen) | cn-shenzhen |
|
Tiongkok (Chengdu) | cn-chengdu |
|
Singapura | ap-southeast-1 |
|
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_idContoh 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 | 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 | Menggunakan perutean maksud default. Cocok untuk skenario di mana sulit menentukan agen target. |
| Permintaan dikirim langsung ke agen StarRocks. Cocok untuk alur kerja khusus yang hanya melibatkan diagnosis atau pemeriksaan kesehatan StarRocks. |