0Pricing
AI Agents · Урок

SQL-ассистент для вашей DB

Передайте модели схему, позвольте ей написать SQL, выполните его в изолированной DB и объясните результаты.

«SQL-ассистент для вашей DB» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Цель проекта

Создайте агента, который превращает вопросы на естественном языке в SQL, выполняет их в изолированной базе данных и объясняет результаты.

Классический агент для «разговоров с моей базой данных».

Архитектура

  1. Пользователь: "Сколько активных пользователей в этом месяце?"
  2. Агент вызывает list_tables и describe_table, чтобы узнать схему
  3. Агент вызывает run_sql с созданным запросом
  4. Агент объясняет результат на естественном языке

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

Шаг 2: безопасный инструмент run_sql

Необходимо ограничить возможности агента: доступ только для чтения, тайм-аут запроса и ограничение числа строк:

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

Передайте схему в системном промпте

Для уменьшения задержки загрузите схему один раз при запуске и поместите её в системный промпт — это сэкономит повторные обращения к инструментам:

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

Пользователь базы данных только для чтения

Даже при наличии проверок кода создайте также пользователя базы данных только для чтения с разрешениями лишь на аналитическую схему. Это дополнительный уровень защиты.

Маскирование PII

Некоторые столбцы (электронная почта, телефон) никогда не должны раскрывать данные. Маскируйте их в результатах перед возвратом:

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

Оценка стоимости запроса

Используйте EXPLAIN для оценки стоимости запроса; отклоняйте запросы со стоимостью выше порога (это предотвращает случайное полное сканирование огромных таблиц).

Пример диалога

Пользователь: "Пять лучших клиентов по расходам за прошлый месяц"

Агент:

  1. list_tables → [users, orders, ...]
  2. describe_table(orders) → [id, user_id, total, created_at]
  3. run_sql("SELECT user_id, SUM(total) ...")
  4. Возвращает: "Alice ($1240), Bob ($910), ..."

Графики в выходных данных

Для более удобного интерфейса добавьте инструмент render_chart, который принимает столбцы и строки и возвращает URL изображения графика. Агент сможет вызвать его после запроса.

Корректно обрабатывайте ошибки

Ошибки SQL встречаются часто. Возвращайте сообщение об ошибке Postgres без изменений: модель отлично исправляет собственный неверный SQL, если видит ошибку.

Проверяйте каждый запрос

Журналируйте пользователя, вопрос на естественном языке, созданный SQL и количество результатов. Аудит обязателен для агентов, работающих с базами данных.

Зачем ограничиваться SELECT?

Зачем жёстко ограничивать агента выполнением только операторов SELECT?

Повторим

Агенты SQL сразу приносят пользу. Создавайте их осторожно: пользователь только для чтения, тайм-аут оператора, ограничение числа строк, список разрешённых типов запросов и журнал аудита.

Часто задаваемые вопросы

Урок «SQL-ассистент для вашей DB» бесплатный?

Да — полный текст урока «SQL-ассистент для вашей DB» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «SQL-ассистент для вашей DB»?

Передайте модели схему, позвольте ей написать SQL, выполните его в изолированной DB и объясните результаты. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «SQL-ассистент для вашей DB»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Бот вопросов и ответов по вашим документам
  2. Агент для объяснения кода
  3. Агент-исследователь для веб-поиска
  4. SQL-ассистент для вашей DB
← Назад к AI Agents