0Pricing
AI Agents · Pelajaran

Asisten SQL untuk DB Anda

Berikan skema kepada model, biarkan model menulis SQL, jalankan SQL pada DB terisolasi, lalu jelaskan hasilnya.

Asisten SQL untuk DB Anda adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Tujuan Proyek

Buat agen yang mengubah pertanyaan bahasa alami menjadi SQL, mengeksekusinya terhadap basis data berpasir, dan menjelaskan hasilnya.

Agen "berbicara dengan basis data saya" yang paling mendasar.

Arsitektur

  1. Pengguna: "Berapa banyak pengguna aktif bulan ini?"
  2. Agen memanggil list_tables dan describe_table untuk mempelajari skema
  3. Agen memanggil run_sql dengan kueri yang dihasilkan
  4. Agen menjelaskan hasilnya dalam bahasa alami

Step 1: Schema Tools

import psycopg

conn = psycopg.connect(DATABASE_URL)

def list_tables():
    with conn.cursor() as cur:
        cur.execute("SELECT table_name FROM information_schema.tables WHERE table_schema='public'")
        return [r[0] for r in cur.fetchall()]

def describe_table(name):
    with conn.cursor() as cur:
        cur.execute('''
            SELECT column_name, data_type FROM information_schema.columns
            WHERE table_name = %s
        ''', (name,))
        return cur.fetchall()

Langkah 2: Alat run_sql yang SAFE

Anda harus membatasi tindakan yang dapat dilakukan agen — hanya baca, batas waktu kueri, dan batas baris:

import re

def run_sql(query: str, limit: int = 100):
    q = query.strip().rstrip(';').lower()
    if not q.startswith('select'):
        return {'error': 'Only SELECT statements are allowed.'}
    if any(bad in q for bad in [' drop ', ' delete ', ' update ', ' insert ', ' alter ', ' truncate ']):
        return {'error': 'Statement contains a disallowed keyword.'}
    with conn.cursor() as cur:
        cur.execute(f'SET statement_timeout = 5000')   # 5 seconds
        cur.execute(f'SELECT * FROM ({query}) sub LIMIT {limit}')
        cols = [c.name for c in cur.description]
        rows = cur.fetchall()
        return {'columns': cols, 'rows': rows}

Tool Definitions

tools = [
    {'type': 'function', 'function': {'name': 'list_tables', 'description': 'List tables in the database', 'parameters': {'type': 'object', 'properties': {}}}},
    {'type': 'function', 'function': {'name': 'describe_table', 'description': 'Get columns of a table', 'parameters': {'type': 'object', 'properties': {'name': {'type': 'string'}}, 'required': ['name']}}},
    {'type': 'function', 'function': {'name': 'run_sql', 'description': 'Execute a SELECT query (read-only, max 100 rows, 5s timeout)', 'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}}}
]
import json
print(json.dumps(tools, indent=2))

System Prompt

system = '''
You are a SQL analyst assistant for a Postgres database.
First use list_tables and describe_table to learn the schema.
Then write a single SELECT query to answer the user.
Never modify data.
After receiving results, explain them in plain language.
'''
print(system.strip())

Teruskan Skema dalam Instruksi Sistem

Untuk latensi yang lebih baik, ambil skema sekali saat memulai dan masukkan ke dalam instruksi sistem — ini menghemat perjalanan bolak-balik alat:

schema = ''
for t in list_tables():
    cols = describe_table(t)
    schema += f'{t}: {cols}\n'
system = system + f'\nSchema:\n{schema}'

Pengguna Basis Data Hanya-Baca

Bahkan dengan pemeriksaan kode, buat juga pengguna basis data hanya-baca dengan izin yang hanya berlaku pada skema analitik. Gunakan pertahanan berlapis.

Penyamaran PII

Beberapa kolom (email, telepon) tidak boleh bocor. Samarkan kolom tersebut dalam hasil sebelum mengembalikannya:

PII_COLS = {'email', 'phone'}
for row in rows:
    for i, col in enumerate(cols):
        if col in PII_COLS:
            row[i] = '[REDACTED]'

Estimasi Biaya Kueri

Gunakan EXPLAIN untuk memperkirakan biaya kueri; tolak kueri dengan biaya > ambang batas (mencegah pemindaian seluruh tabel secara tidak sengaja pada tabel yang sangat besar).

Contoh Percakapan

Pengguna: "5 pelanggan teratas berdasarkan pembelanjaan bulan lalu"

Agen:

  1. list_tables -> [users, orders, ...]
  2. describe_table(orders) -> [id, user_id, total, created_at]
  3. run_sql("SELECT user_id, SUM(total) ...")
  4. Mengembalikan: "Alice ($1240), Bob ($910), ..."

Grafik Output

Untuk pengalaman pengguna yang lebih kaya, tambahkan alat render_chart yang menerima kolom + baris dan mengembalikan URL gambar grafik. Agen dapat memanggilnya setelah kueri.

Gagal dengan Anggun

Kesalahan SQL sering terjadi. Kembalikan pesan kesalahan Postgres secara verbatim — model sangat baik dalam memperbaiki SQL-nya sendiri yang rusak ketika diperlihatkan kesalahannya.

Audit Setiap Kueri

Catat pengguna, pertanyaan dalam bahasa alami, SQL yang dihasilkan, dan jumlah hasil. Audit tidak dapat ditawar untuk agen yang mengakses basis data.

Mengapa Membatasi pada SELECT?

Mengapa agen harus dikodekan agar hanya menjalankan pernyataan SELECT?

Ringkasan

Agen SQL langsung memberikan manfaat. Bangun dengan hati-hati — pengguna hanya-baca, batas waktu pernyataan, batas baris, daftar putih jenis kueri, dan log audit.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Asisten SQL untuk DB Anda” gratis?

Ya — teks lengkap “Asisten SQL untuk DB Anda” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Asisten SQL untuk DB Anda”?

Berikan skema kepada model, biarkan model menulis SQL, jalankan SQL pada DB terisolasi, lalu jelaskan hasilnya. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Asisten SQL untuk DB Anda” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Bot Tanya Jawab untuk Dokumen Anda
  2. Agen Penjelas Kode
  3. Agen Riset Penjelajahan Web
  4. Asisten SQL untuk DB Anda
← Kembali ke AI Agents