Wren AI Text-to-SQL: UI та API, або Як спростити роботу з реляційними базами в застосунках RAG/Agent
Wren AI — це конвеєрний застосунок для штучного інтелекту, який перекладає запити користувача природною мовою на мову SQL, відому як Text-to-SQL (також Natural Language to SQL або NL2SQL), щоб ви могли спілкуватися з вашою базою даних у чаті. Він має як інтерфейс користувача, так і API, що дозволяє генерувати SQL-запити на основі запитів користувача й отримувати дані за допомогою цих запитів. Це значно спрощує роботу зі структурованими табличними даними у ваших застосунках RAG/Agent.
Заздалегідь перепрошую за ламану мову, оскільки живу майже 10 років у Штатах.
📌
Щоб дізнатися більше про застосування конвеєра RAG та Agent, будь ласка, прочитайте мою попередню статтю: Еволюція ботів з ШІ: використовуємо можливості агентів, моделей RAG і LLM..
Як працює Wren AI
Розгортається Wren AI дуже просто, за допомогою офіційного Wren AI Docker Compose локально. Вам знадобиться ключ OpenAI API, а також потрібно вибати модель, яку ви плануєте використовувати. Ви можете використовувати інші рушії штучного інтелекту, сумісні з OpenAI API, як-от LocalAI, встановивши для контейнера змінну оточення LLM_OPENAI_API_BASE
. Команда Wren AI також реалізувала рушій Ollama і рекомендує використовувати модель Llama3 70b-instruct.
Для використання інших моделей, окрім OpenAI, вам потрібно створити файл ~/.wrenai/.env.ai за цим прикладом. Наразі підтримувані бази даних містять BigQuery, DuckDB, PostgreSQL, MySQL, MS SQL, Clickhouse, Google Sheets та Microsoft Excel Add-ins. Ви можете проголосувати за додаткову підтримку баз даних тут.
Майте на увазі, що llama3:70b
потребує дуже великий обʼєм памʼяті, і, можливо, вам буде необхідно поекспериментувати з іншими варіантами цієї моделі, або взагалі спробувати інші моделями меншого розміру. Що, на жаль, буде впливати на якість результату. Hаведу приклад з Ollama також, aле рекомендую спочатку с спробувати з платним OpenAI GPT3.5-turbo, а вже потім тестувати з іншими варіантами:
## Example: Ollama inference LLM_PROVIDER=ollama ## ollama. URL should be reachable from Docker Container!!! OLLAMA_URL=http://host.docker.internal:11434 ##https://ollama.com/library/llama3:70b-instruct-q8_0 GENERATION_MODEL=llama3:70b-instruct-q8_0 ## supported embedding models providers by qdrant: https://qdrant.tech/documentation/embeddings/ ## https://ollama.com/library/mxbai-embed-large:335m-v1-fp16 EMBEDDING_MODEL=mxbai-embed-large:335m-v1-fp16 EMBEDDING_MODEL_DIMENSION=1024 ## DOCUMENT_STORE DOCUMENT_STORE_PROVIDER=qdrant QDRANT_HOST=qdrant
Про розгортання Wren AI у Kubernetes читайте у наступній детальній статті.
Після встановлення програми Wren AI ви зможете отримати доступ до неї за посиланням.
Після підключення до бази даних або після завантаження зразкового набору даних, наприклад, ігрового майданчика НБА, ви потрапите на головну сторінку. Якщо ви хочете переглянути дані зі зразка набору даних, ви можете знайти їх тут, просто замінивши версію в URL-адресі на змінну DATASET_VERSION
, яка міститься в тому ж місці.
Налаштування схеми і додавання описового тексту є критично важливими в меню «Моделювання».
«Моделювання» допомагає як вам, так і вашій великій мовній моделі зрозуміти дані та метадані, що покращує результати запитів. Щоб отримати кращі результати, ви повинні налаштувати зв’язки і надати описи, оскільки API назви стовпців у ваших таблицях можуть бути недостатньо описовими.
Налаштувавши схему зі зв’язками та описами в меню «Моделювання», перейдіть до головного меню, щоб згенерувати свій перший запит Text-to-SQL. Система спробує створити для вас три різні SQL-запити, і ви побачите їхні результати.
Найцікавіше: API
Крім того, ви можете отримати доступ до тієї ж функціональності через API, що робить Wren AI ідеальною платформою для інтеграції структурованих табличних даних у ваші додатки конвеєра RAG/Agent, просто використовуючи Wren AI як сервіс. На жаль, наразі не існує механізму відправки оновлень в реальному часі від Wren AI назад клієнту, такого як WebSocket або Server-Sent-Events, або WebHooks. Вам доведеться використовувати Long Polling, який ініціюється клієнтом, щоб постійно перевіряти наявність оновлень, якщо Wren AI підготував для вас відповіді, але команда працює над цим.
Хоча наразі немає публічної документації API, ви можете ознайомитися з функціоналом за допомогою наступних кроків, використовуючи Інструменти для розробників Chrome -> Мережа, щоб спостерігати за взаємодією API.
Створіть асинхронне завдання, надіславши запитання ШІ за допомогою функції createAskingTask
в GraphQL.
За допомогою запиту askingTask
опитуйте зміну статусу завдання.
Після отримання статусу FINISHED
витягніть три кандидати у відповіді.
Викличте функцію createThread
з отриманим значенням.
Гілка складається з кількох відповідей, кожна з яких містить питання і відповідь. Запитуйте гілку за допомогою thread
.
Поле responses
у кожному потоці містить масив відповідей. Наступні питання додаються до цього масиву.
Безперервно опитуйте API threadResponse
для відстеження змін статусу.
Коли статус стане FINISHED
, перегляньте детальну відповідь у полі detail
.
Поле detail
містить покрокову відповідь, яка відображається в інтерфейсі користувача.
Наразі Wren AI не пропонує прямого способу завантаження або експорту результатів з даними. Як обхідний шлях, розгляньте можливість копіювання вихідного SQL, який можна виконати у вашій базі даних, і виконайте експорт з самої бази даних.
Semantic Layer
Wren AI це до речі непоганий приклад RAG додатку що побудовано із використанням Semantic Layer де замість статичної інструкції яка скормлюється в якості контексту до ЛЛM, інструкція підставляється динамічно із векторної бази даних. Перевірити дуже просто: запустивши додаток, там буде контейнер із qdrant векторною базою даних, якщо прокинути порт 6333, і зайти ось сюди localhost:6333/...ard#/collections/Document у векторній базі будуть збережені динамічні промти для ЛЛМ створені під обрану базу із її полями і описами взятими з «Моделювання», що дозволяє більш якісніше отримати вихідний SQL від LLM і знизити галюцинації.
/* {"description":"A model containing information about review of orders.","alias":"reviews"} */ CREATE TABLE reviews ( -- {"description":"The date when the answer was provided.","alias":"AnswerTimestamp"} AnswerTimestamp TIMESTAMP, -- {"description":"The date when the review was created.","alias":"CreationTimestamp"} CreationTimestamp TIMESTAMP, -- {"description":"A unique identifier assigned to each review entry.","alias":"Id"} Id VARCHAR PRIMARY KEY, -- {"description":"The order id of the order which the review belongs to.","alias":"OrderId"} OrderId VARCHAR, -- {"description":"The score associated with each review entry.","alias":"Score"} Score BIGINT, -- {"condition": "orders".OrderId = "reviews".OrderId, "joinType": ONE_TO_MANY} FOREIGN KEY (OrderId) REFERENCES orders(OrderId) );
Висновки
Платформа Wren AI надзвичайно спрощує для користувача або вашого ШІ-застосунку RAG/Agent роботу зі структурованими даними в реляційних базах даних, перетворюючи запити користувача в коректний SQL. Інтерфейс користувача з меню моделювання має дуже важливе значення для надання додаткових описів метаданих і схем для вашої LLM, щоб краще розуміти вашу базу даних та її дані. Після завершення моделювання Wren AI готовий виступати в ролі посередника перед вашою базою даних. Коротше кажучи, ви просто розмовляєте зі своєю базою даних. Це нечувана простота, недосяжна раніше, яка робить роботу з реляційними БД високоефективною, переводячи ділову бізнес мову безпосередньо в SQL-запити.
Підтримка
Якщо вам сподобалася ця стаття і ви хочете підтримати мене:
- Натисніть «Подобається 👍» та додайте «До обраного ⭐️» мою статтю; це допоможе мені. Також слідкуйте за мною на DOU щоб отримувати останні статті.
- Дайте відгук у коментарях нижче, навіть якщо це просте «дякую» — це допоможе мені розуміти, що моя робота була не марною. Якщо є помилки, скажіть де, а найголовніше як виправити, не претендую на роль всезнайки.
- Шукаю ентузіастів та однодумців, що знаються на Python і хотіли б втілити описані ідеї і моїх статтях у життя, і, можливо, навіть зробити сумісний проєкт: Напишіть мені в LinkedIn. На разі працю над PoC, який використовує описані принципи у моїх статтях. Буду радий поділитись своїми напрацюваннями і знаннями.
- Я готую статтю яка по великому рахунку використовує NLP для побудувати графу знань із вільного тексту, який зберігається у БД для того щоб потім бути використаним в Agentic RAG чатботі. Чи було би вам цікаво стати соовтором? Треба вичитати перевірити, виправити де не правильно, може оновити якщо щось застаріло чи додати нове. Це буде продовженням до цієї та попередньої статті. Прошу написати мені персональне повідомлення LinkedIn / Discord якщо ви хочете по співпрацювати на цю тему.
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів