SQL-агент на LangChain для запитів до MySQL природною мовою
Налаштовуємо SQL-агента LangChain із Granite і MySQL: цикл ReAct, закріплені залежності, тестова база Chinook, create_sql_agent, самовиправлення й захисні заходи.
Дані компанії зазвичай сховані за технічним бар'єром. Щоб щось із них дістати, доводилося писати SQL або опановувати негнучкий інструмент із кнопками й формами. Інтерфейс природною мовою прибирає цей прошарок: людина, яка ухвалює рішення, ставить питання сама, і аналізом керує її намір, а не технічні навички. SQL-агент на LangChain — один із практичних способів цього досягти. Нижче — що робить агент, як налаштувати середовище й тестову базу MySQL, як зібрати виконавця і які захисні заходи потрібні, перш ніж підпускати його до справжніх даних.
Як доступ до даних ставав простішим
Кожне нове покоління інструментів ховало дедалі більше складності:
- Консольні клієнти вимагали точного синтаксису й доброго розуміння реляційної алгебри.
- Візуальні конструктори запитів допомогли, але розбиратися в join і зв'язках між таблицями все одно було треба.
- Дашборди легко читати, але вони обмежені тими поданнями, які хтось побудував заздалегідь.
- Інтерфейси природною мовою розуміють зміст, тож знати схему чи мову запитів нікому не потрібно.
ШІ-агент для SQL має кілька конкретних переваг:
- Він сам читає схему й знаходить потрібні таблиці, первинні та зовнішні ключі й шляхи для join.
- Він зіставляє звичайні слова із сутностями в базі, а потім пише й виконує складні запити без будь-чийого втручання.
- Він запитує схему лише для потрібних таблиць, що скорочує витрату токенів і вартість та допомагає продуктивності.
- Він перетворює розмиті питання на кшталт «Як ішли продажі минулого місяця?» на детермінований SQL, виводячи контекст і зіставляючи сутності.
Надійно це працює лише з правильною обв'язкою: фреймворком оркестрації та ізольованим середовищем.
З чого складається SQL-агент на LangChain
Мовній моделі, яка спілкується зі структурованою базою, потрібен посередник, і LangChain дає сполучну тканину: міркування, вибір інструментів і цикли виконання, що перетворюють промпт на безпечну операцію з базою. Агенти LangChain різняться стилем міркування й тим, які моделі підтримують.
У центрі — цикл ReAct, скорочення від reasoning plus acting, «міркування плюс дія»:
- Вибір: агент читає промпт і обирає інструмент, наприклад виконавця SQL.
- Дія: він запускає цей інструмент, наприклад виконує згенерований запит.
- Перевірка: він дивиться на результат і вирішує, чи цього досить, чи потрібен ще один прохід.
- Повтор: цикл триває, доки не з'явиться підсумкова перевірена відповідь.
Ще доведеться обрати між двома архітектурами. Одноразова система обробляє кожне питання окремо: затримка нижча, оптимізувати простіше. Діалогова відстежує стан і веде розмову, тож люди можуть уточнювати пошук додатковими питаннями й знімати неоднозначність за кілька реплік — своєрідний діалог із даними.
Середовище й залежності
Для всього, що рухається до продакшену, ізолюйте середовище й закріпіть версії, щоб оновлення бібліотеки непомітно не зламало конвеєр. Створіть і активуйте віртуальне середовище:
pip install virtualenv
virtualenv my_env
source my_env/bin/activate
Потім встановіть цей стек саме в цих версіях:
ibm-watsonx-ai==1.0.4відповідає за інференс базової моделі.ibm-watson-machine-learning==1.0.357підключає корпоративні LLM.langchain==0.2.1— основний фреймворк оркестрації для логіки агента.langchain-ibm==0.1.7дає обгортки, специфічні для екосистеми IBM.langchain-experimental==0.0.59містить додаткові утиліти для агентів.mysql-connector-python==8.4.0— драйвер бази даних.
База, до якої звертається агент
Агент точний рівно настільки, наскільки добра його база. Він спирається на імена таблиць, описи стовпців і зв'язки ключів, щоб пов'язати питання з даними, тому схема має бути чистою.
Chinook добре підходить для тестів, бо моделює цілий бізнес цифрових медіа:
- У ній 11 таблиць, зокрема Artist, Album, Invoice і Track.
- Первинні та зовнішні ключі дають агентові змогу будувати join за кількома таблицями.
- У ній понад 15 000 записів — досить, щоб перевірити аналіз трендів і складні вибірки.
Агент підключається через URI, який має точно відповідати цьому шаблону:
mysql+mysqlconnector://{mysql_username}:{mysql_password}@{mysql_host}:{mysql_port}/{database_name}
Потрібні п'ять значень: ім'я користувача, пароль, хост, порт (за замовчуванням 3306) та ім'я бази, тут Chinook.
Перш ніж підключати LLM, перевірте з'єднання й схему з MySQL CLI:
-- Verify database existence
SHOW DATABASES;
USE Chinook;
-- Confirm data integrity: This should return exactly 347
SELECT COUNT(*) FROM Album;
Кількість альбомів має бути рівно 347. Перевірена база дає моделі надійну основу й знижує ймовірність помилок прив'язки до даних.
Збираємо виконавця агента
Далі треба обгорнути модель і підключити її до виконавця для бази — саме він визначає, як агент бачить ваші дані й працює з ними.
Налаштуйте параметри моделі на детермінованість. Під час генерації SQL непередбачуваний вивід веде прямо до вигаданого синтаксису, тож тримайте все стабільним.
Агент створюється фабрикою create_sql_agent, а рушієм міркувань слугує ibm/granite-4-h-small. Їй потрібні такі аргументи:
llmприймає модель Granite, обгорнуту в екземплярWatsonxLLM.dbприймає ваше підключенняSQLDatabase.verbose=Trueдає змогу стежити за тим, що він робить.agent_typeзі значеннямZERO_SHOT_REACT_DESCRIPTIONдля звичайних аналітичних питань.
Не вважайте verbose=True просто перемикачем для налагодження. У бізнес-контексті саме він робить можливим аудит. Можна вивчити ланцюжок міркувань і переконатися, що згенерований SQL і кроки міркування відповідають внутрішній логіці даних і вимогам комплаєнсу, ще до того, як відповідь до когось потрапить.
Відновлення після помилок і захисні заходи
Неоднозначні формулювання й зіставлення зі схемою зіб'ють з пантелику навіть сильні моделі, тому в продакшені потрібні автоматичні захисні заходи й контроль з боку людини.
Одна зі справжніх сильних сторін цього агента — самовиправлення. Коли згенерований запит падає, агент:
- Отримує трасування помилки від рушія бази.
- З'ясовує, що пішло не так, наприклад синтаксична помилка чи друкарська помилка в імені стовпця.
- Повторює спробу з виправленим запитом, що підвищує частку успішних складних запитів.
Чотири практики захищають дані компанії:
- Виконуйте кожен запит агента в ізольованій пісочниці, щоб нічого не змінилося випадково.
- Лишайте людину в контурі: експерт має перевіряти висновки, які йдуть у відповідальні звіти.
- Постійно доопрацьовуйте промпти, щоб враховувати різні формулювання й особливості предметної галузі.
- Дайте конектору бази користувача з обмеженими правами, суворим порядковим захистом і межами приватності.
Що в підсумку
Перехід від чистого SQL до запитів природною мовою відкриває дані значно більшій кількості людей. Поєднання точної моделі на кшталт ibm/granite-4-h-small зі структурованою оркестрацією LangChain скорочує розрив між звичайною мовою й корисними висновками. Але систему, якій можна довіряти в продакшені, як і раніше дають постійне тестування й жорстке управління.