0Pricing
AI Agents · Lekcja

Asystent SQL dla Twojej bazy danych

Przekaż modelowi schemat, pozwól mu napisać zapytanie SQL, uruchom je w odizolowanej bazie danych i wyjaśnij wyniki.

Asystent SQL dla Twojej bazy danych to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Cel projektu

Zbuduj agenta, który przekształca pytania w języku naturalnym w SQL, wykonuje je na izolowanej bazie danych i wyjaśnia wyniki.

To podstawowy agent do „rozmowy z własną bazą danych”.

Architektura

  1. Użytkownik: „Ilu aktywnych użytkowników było w tym miesiącu?”
  2. Agent wywołuje list_tables i describe_table, aby poznać schemat
  3. Agent wywołuje run_sql z wygenerowanym zapytaniem
  4. Agent wyjaśnia wynik w języku naturalnym

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()

Krok 2: BEZPIECZNE narzędzie run_sql

Należy ograniczyć działania, które agent może wykonywać — dostęp tylko do odczytu, limit czasu zapytania i limit wierszy:

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())

Przekazywanie schematu w prompcie systemowym

Aby zmniejszyć opóźnienie, pobierz schemat raz podczas uruchamiania i umieść go w prompcie systemowym — pozwala to uniknąć dodatkowych wywołań narzędzi:

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

Użytkownik bazy danych tylko do odczytu

Nawet przy sprawdzaniu kodu należy dodatkowo utworzyć użytkownika bazy danych tylko do odczytu, z uprawnieniami wyłącznie do schematu analitycznego. To obrona wielowarstwowa.

Maskowanie danych osobowych

Niektóre kolumny (e-mail, telefon) nie powinny nigdy wyciec. Zamaskuj je w wynikach przed ich zwróceniem:

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

Szacowanie kosztu zapytania

Użyj EXPLAIN do oszacowania kosztu zapytania; odrzucaj zapytania o koszcie większym niż ustalony próg (zapobiega to przypadkowemu skanowaniu całych ogromnych tabel).

Przykładowa rozmowa

Użytkownik: „5 klientów o największych wydatkach w zeszłym miesiącu”

Agent:

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

Wykresy w danych wyjściowych

Aby zapewnić bogatszy interfejs użytkownika, dodaj narzędzie render_chart, które przyjmuje kolumny i wiersze oraz zwraca adres URL obrazu wykresu. Agent może wywołać je po wykonaniu zapytania.

Elegancka obsługa błędów

Błędy SQL są częste. Zwracaj komunikat błędu Postgresa bez zmian — model doskonale radzi sobie z poprawianiem własnego błędnego SQL, gdy otrzyma komunikat błędu.

Audytowanie każdego zapytania

Rejestruj użytkownika, pytanie w języku naturalnym, wygenerowany SQL oraz liczbę wyników. Audyty są obowiązkowe w przypadku agentów mających dostęp do baz danych.

Dlaczego ograniczać do SELECT?

Dlaczego na stałe ograniczać agenta do wykonywania wyłącznie instrukcji SELECT?

Podsumowanie

Agenci SQL są od razu bardzo przydatni. Należy budować ich ostrożnie — użytkownik tylko do odczytu, limit czasu instrukcji, limit wierszy, biała lista typów zapytań i dziennik audytowy.

Często zadawane pytania

Czy lekcja „Asystent SQL dla Twojej bazy danych” jest bezpłatna?

Tak — pełny tekst „Asystent SQL dla Twojej bazy danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Asystent SQL dla Twojej bazy danych”?

Przekaż modelowi schemat, pozwól mu napisać zapytanie SQL, uruchom je w odizolowanej bazie danych i wyjaśnij wyniki. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Asystent SQL dla Twojej bazy danych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Bot pytań i odpowiedzi nad Twoimi dokumentami
  2. Agent wyjaśniający kod
  3. Agent badawczy przeglądający sieć
  4. Asystent SQL dla Twojej bazy danych
← Powrót do AI Agents