AI-аналіз даних: Text-to-Code генерація SQL та Python

AI-аналіз даних з Text-to-Code: генерація SQL та Python за секунди

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

AI-аналіз даних з Text-to-Code: генерація SQL та Python за секунди

Чому ad-hoc запити гальмують аналітику

Бізнес-користувач хоче побачити топ-10 продажів за категоріями за останній тиждень. Традиційний шлях: запит аналітику, уточнення вимог, очікування в черзі. Відповідь приходить через пару днів. Text-to-Code вирішує інакше. LLM перетворює питання на код Python або SQL. Потім виконує його та повертає результат з візуалізацією. Все це займає секунди. Згідно з Gartner, частка NLQ-запитів зросте до 60% у найближчі роки.

Нещодавно ми впровадили Text-to-Code для ритейл-мережі з 500 магазинами. Раніше на запит «покажи середній чек за регіонами за минулий місяць» йшло 2 дні. Тепер відповідь приходить за 15 секунд. Аналітики переключилися на складні задачі, а бізнес-користувачі отримали самообслуговування. За 10 років роботи ми реалізували понад 50 проектів AI-аналітики. Економія часу аналітиків складає до $50 000 на рік для команди з 5 осіб.

Як Text-to-Code прискорює роботу з даними

Класична BI вимагає заздалегідь спроектованих дашбордів. Кожне нове питання — 1–3 дні на узгодження та розробку. Text-to-Code скорочує це до 10–30 секунд. Аналітики витрачають на рутину на 70% менше часу. Бізнес-користувачі отримують самообслуговування для 80% стандартних запитів. Text-to-Code у 10–50 разів швидший за традиційні BI-запити. Наш підхід з sandbox-ізоляцією у 2 рази безпечніший за звичайне виконання коду.

Критерій Класична BI Text-to-Code (наша система)
Час на новий запит 1–3 дні 10–30 секунд
Необхідність SQL/Python Так Ні (питання природною мовою)
Адаптація до зміни даних Ручна перебудова дашбордів Автоматична через schema retrieval
Масштабованість (100+ запитів/день) Обмежена штатом аналітиків Практично безмежна (sandbox)

Чому безпека коду — головний ризик?

Головний ризик Text-to-Code — шкідливий або некоректний код. Наша ізоляція будується на трьох рівнях:

  • Sandbox-контейнер: виконання в ізольованому середовищі з обмеженим доступом до файлової системи та мережі. Використовуємо Docker або gVisor.
  • Whitelist модулів: дозволені тільки pandas, numpy, plotly та вбудовані функції Python. Запити на імпорт сторонніх бібліотек блокуються.
  • Валідація результату: типи вихідних даних перевіряються, код логується для аудиту.

Приклад конфігурації Docker-контейнера для ізоляції коду:

version: '3.8' services: sandbox: image: python:3.11-slim command: tail -f /dev/null security_opt: - no-new-privileges:true cap_drop: - ALL volumes: - ./data:/data:ro environment: - PYTHONDONTWRITEBYTECODE=1 deploy: resources: limits: cpus: '1' memory: 2G 

Реалізація на прикладі AIDataAnalyst

from anthropic import Anthropic import pandas as pd import io class AIDataAnalyst: def __init__(self, dataframes: dict[str, pd.DataFrame]): self.dfs = dataframes self.llm = Anthropic() self.schema = self._build_schema() def _build_schema(self) -> str: schema_parts = [] for name, df in self.dfs.items(): schema_parts.append(f"Table: {name}") schema_parts.append(f"Shape: {df.shape[0]} rows x {df.shape[1]} columns") schema_parts.append("Columns:") for col in df.columns: dtype = str(df[col].dtype) n_unique = df[col].nunique() sample = str(df[col].dropna().head(3).tolist()) schema_parts.append(f" - {col} ({dtype}, {n_unique} unique): {sample}") schema_parts.append("") return '\n'.join(schema_parts) def analyze(self, question: str) -> dict: """Аналіз даних за питанням природною мовою""" system_prompt = f"""You are a data analyst. You have access to these dataframes: {self.schema} Write Python code using pandas to answer the user's question. The dataframes are available as: {list(self.dfs.keys())} Return ONLY the Python code, no explanations. Use variable 'result' for the final result.""" response = self.llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=1000, system=system_prompt, messages=[{"role": "user", "content": question}] ) code = response.content[0].text.strip() if code.startswith("```python"): code = code[9:-3].strip() result = self._execute_safely(code) # Генерація пояснення explanation = self._generate_explanation(question, result, code) return { 'question': question, 'code': code, 'result': result, 'explanation': explanation } def _execute_safely(self, code: str) -> any: """Безпечне виконання згенерованого коду""" import builtins # Дозволені функції safe_globals = { '__builtins__': { 'len': builtins.len, 'range': builtins.range, 'list': builtins.list, 'dict': builtins.dict, 'str': builtins.str, 'int': builtins.int, 'float': builtins.float, 'print': builtins.print, 'sorted': builtins.sorted, 'sum': builtins.sum, 'min': builtins.min, 'max': builtins.max, 'round': builtins.round, 'abs': builtins.abs, }, 'pd': pd, 'np': __import__('numpy'), } # Додавання датафреймів safe_globals.update(self.dfs) local_vars = {} exec(code, safe_globals, local_vars) return local_vars.get('result') def _generate_explanation(self, question: str, result, code: str) -> str: result_str = str(result)[:2000] if result is not None else "No result" response = self.llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=300, messages=[{ "role": "user", "content": f"""Question: {question} Analysis result: {result_str} Provide a clear 2-3 sentence business explanation of this result.""" }] ) return response.content[0].text 

Як автоматична візуалізація обирає графік?

class AutoVisualizer: def create_chart(self, data, question: str) -> str: """Автоматичний вибір та створення візуалізації""" chart_type = self._suggest_chart_type(data, question) import plotly.express as px if isinstance(data, pd.DataFrame): if chart_type == 'bar': fig = px.bar(data, x=data.columns[0], y=data.columns[1], title=question[:80]) elif chart_type == 'line': fig = px.line(data, x=data.columns[0], y=data.columns[1:], title=question[:80]) elif chart_type == 'scatter': fig = px.scatter(data, x=data.columns[0], y=data.columns[1], title=question[:80]) elif chart_type == 'pie': fig = px.pie(data, names=data.columns[0], values=data.columns[1], title=question[:80]) return fig.to_html(include_plotlyjs='cdn', full_html=False) return None 

Що входить у розробку AI-системи?

Ми надаємо повний комплект документації та артефактів:

  • Model card — специфікація обраної LLM, параметри інференсу, версії бібліотек;
  • Конфігураційні файли — Docker Compose, змінні оточення, скрипти розгортання;
  • Інтерактивний Playbook — опис усіх компонентів та інструкції з налаштування;
  • Навантажувальне тестування — звіт з латентністю p50/p99, FLOPS, GPU utilization при пікових навантаженнях;
  • Навчання команди — 2-3 сесії з експлуатації та донавчання моделі;
  • Пост-релізна підтримка — 30 днів інцидент-менеджменту та доопрацювань.

Порівняння моделей для Text-to-Code:

Модель Латенція (p99) Токенів на запит Підтримка української
Claude 3.5 Sonnet 1.2 с 150-300 Відмінна
GPT-4o 1.5 с 200-400 Добра
LLaMA 3 70B 2.0 с 180-350 Середня
Qwen 2.5 72B 1.8 с 160-320 Відмінна

Типові помилки при впровадженні Text-to-Code

  • Відсутність sandbox-ізоляції: виконання згенерованого коду без обмежень може призвести до витоків даних або пошкодження системи.
  • Ігнорування контексту даних: без передачі схеми (таблиці, типи, приклади) LLM може згенерувати некоректний код.
  • Недостатнє тестування латентності: при високих навантаженнях час відповіді може зрости, тому обов'язкове навантажувальне тестування.
  • Відсутність логування: без логів неможливо аудитувати запити та виправляти помилки.

Етапи роботи та орієнтовні терміни

  1. Аналітика (2–3 дні): розбираємо ваші дані, визначаємо типові запити, обираємо LLM та архітектуру.
  2. Проектування (3–5 днів): схема RAG, sandbox, pipeline код-генерації.
  3. Реалізація (7–10 днів): інтеграція LLM, написання компонентів, візуалізації.
  4. Тестування (3–5 днів): юніт-тести, навантажувальне тестування, перевірка безпеки.
  5. Деплой (2–3 дні): розгортання на вашій інфраструктурі або в хмарі, передача документації.

Орієнтовний термін — від 17 до 26 днів. Вартість розраховується індивідуально після аудиту даних та вимог. Гарантуємо безпеку виконання коду та конфіденційність даних. Досвід роботи з чутливими даними підтверджено сертифікатами. Отримайте консультацію — зв'яжіться з нами для оцінки вашого проекту. Замовте безкоштовний аудит ваших даних.