Адзінамі з перакладу з NL на SQL даўжыню адказчыка-асістэнта для аналізу дадзеных у ізольаванай асяроддзя.
Адаптаванне дэманаў з NL у SQL да асістэнта для аналізу дадзеных у ізольаванай асяроддзі: спісы дазволеных схем, статычныя перакананні, ізольаваная експансія, ліміты для рэзультатаў і журналы аўдыту для кожнага запыту.
Крыніцы: From “Natural Language to SQL” to a Secure AI Analytics Assistant: An Architecture Evolution
Дазволаць модэлю мовы пісаць і запускаць код для аналізу — гэта проблема глыбокай захопненасці, а не трук з запітамі.
Пачатковая проблема
Корыстувальнікі бізнесу маюць запітанні — «серэдня цена будынка па гораду», «дэсяць найдорожэйшых нерухомасцей», «максімальная цена за квадратны фут» — але не маюць навыкаў SQL. Вочыважны спосаб рашэння — пераклад з мовы людзей у SQL: запытаць англійскай мовай, створыць запіт і запустыць яго.
Версія першая: просты пераклад з мовы людзей у SQL
Раннія версіі ствараюць SQL на адпаведнасць запытанню і выконваюць яго ў базе дадзеных. Дэманстрацыі захопляюць. Але потым хтось просіць аб вычысленні, якое SQL выражае паслаба, або модэль выдумвае новы столбец, або спецыяльна сформульаваны запіт прабуе выконаць DROP TABLE.
SELECT city, AVG(house_price) AS avg_price
FROM house_pricing
GROUP BY city;
SELECT department, AVG(salary) FROM employees GROUP BY department;
result = (
df.groupby("department")["salary"]
.mean()
.reset_index()
)
import os
os.remove("file.csv")
import subprocess
subprocess.run(…)
Полны адхілэнне ад SQL
Большая гнучкасць: нехай модэль пісвае коракты код на Python для працы з API з обмежэнным дастаткам дадзеных, а не з сырымі стрэлкамі SQL. Гэта дазволяе аналіз у стылі pandas, але таксама павяршчвае рызыкі, калі выконанне не контролюецца.
Стварэнне надзяйных запітоў
Надзяйны запіты означаюць:
- карты схемы, якія паводзяцца толькі дазволенымі табліцамі/столбцамі
- прыклады безпечных шаблонаў у фармаце “некалькі прыкладаў”
- частакова адмова, калі запіт выкарыстоўвае забраныя поля
- структураваны выхід (блокі коду або JSON), які можа распакаваць працоўнік
Найбольш значны проблема: выкананне коду, створанага LLM
Выкананне ёсць межаю безпекі. Ніколы не запускайце код модэлі ў працэсе прыложэння з павнымі правамі. Ожывайце “сандбокс”: без сеткі, з обмежаным CPU/памяцю, толькі дазволеныя імпорты, тайма-ауты і толькі чытальны доступ да затверджаных набораў дадзеных.
Додатковыя захоўні
Мнагаслоўныя механізмы захопу:
- Фаервал — адхоўляе спробы зламу і запыткі, якія не падпадаюць пад дазволены часоўкі
- Спіс дазволеных схем — мадэль бачыць толькі затверджаныя поля
- Статычныя пераказы — забраняеім экспорт, работу з файламі,
eval, падзеі-падпроцесы - Рэжым піску — ізалюець выконанне
- Ліміты рэзультатаў — ліміты роўнаў/байтаў пры вярненні да інтэрфейсу
- Лог аўдыту — хто запытаў, які код быў выкананы, што было вярнуцца
Стварэнне стойкай сістэмы, а не толькі безпечной
Павторныя спробы праз тымчасовыя неудачы, можлівае выкарыстоўванне дэтэрміністычных параметраў, кэшаванне схем, а таксама перадача запытку людзю, калі мадэль не можа адпаведзець без падазроў. Безпека без стойкасці проста дае ввічлівыя паказанні пра адмоўку.
Архітэктура, якая выйшла
Gateway → правілы → планавальнік/запрос → выконвальнік у песчанай коробцы → фарматавальнік → аўдыт. SQL можа застаўцца внутранім інструментам для простых фільтраў, але Python-in-a-box справляецца з складнымі аналітычнымі запітамі, не дазволяючы віконваць будзь-якіе запісі без контролю.
Чаму гэты праект стаў цікавейшым
NL-to-SQL — гэта дэманстрацыя перакладу. Безпечныя аналітычныя асістэнты ўскладнююць працу інжынераў: ўжо існуюць мадэлі абараны, песчаныя коробкі, спісакі дазволенага і інтэрфейсы, якія поясняюць прычыны адмовы. Гэта і работа, яку варта захаваць.
Неабходна створыць «золаты» набор: запіты доброзначныя, запіты для перагляду структуры дадзеных і спробы зловучага імпорту. Збірка праграмы должна зазнаваць невялікіх проблем, калі хоць адна зловучая спроба выконваецца па за межамі песчанай коробкі, або калі доброзначны запіт несправядліва адмовляецца без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковку»: добрашчытныя запіты, запіты на перагляд схемы і злонамеркаваныя спробы імпорту. Забійце працэс будавання, калі хоць адна злонамеркаваная працэўка будзе выканана за межамі сандбокса або калі добрашчытная працэўка неправядзявочна адмовіць без чыстай прычыны.
Адаптуйце «золаты ўпаковкі»: добрашчыныя запіты, запіты для перагляду схемы і злонамеркаваныя спробы імпорту. Забірайце падзею будавання, калі хоць адна злонамеркаваная працэўніца будзе выконвана за межамі сандбокса або калі добрашчынына працэўніца неправядзява адмову без чыстай прычыны.
Адаптуйце «золаты ўпаковкі»: добрашчыныя запіты, запіты для перагляду схемы і злонамеркаваныя спробы імпорту. Забірайце падзею будавання, калі хоць адна злонамеркаваная працэўніца будзе выконвана за межамі сандбокса або калі добрашчынына працэўніца неправядзява адмову без чыстай прычыны.