Надежная, экономичная система RAG с малой задержкой на основе таблицы SQL, которая сохраняет большие документы в длинных текстовых полях — без изменения существующей схемы?
Это не теоретическая проблема.
На большинстве предприятий критически важные бизнес-знания уже находятся в традиционных реляционных базах данных. Предложения, отчеты, договоры, статьи – все хранится в TEXT Или LONGTEXT Столбцы – предназначены для сопоставления и агрегирования ключевых слов, а не для семантического поиска.
С появлением LLM требования бизнеса превратились в структурированные вычисления, глубокое семантическое понимание и понимание контекста в естественной, разговорной манере.
Например:
- Сколько проектов на сумму более 1 миллиона долларов было одобрено в период с 2023 по 2025 год?
- Обобщить основные тенденции, наблюдаемые в сфере технологий за последние 6 месяцев.
- В чем заключаются отличительные черты предложений-победителей в 2025 году?
Им нужна стратегия поиска, которая может решить, когда выполнять вычисления, когда выполнять семантический поиск, а когда объединять эти два понятия. В этой статье я продемонстрирую агентную архитектуру RAG, которая работает непосредственно поверх традиционной базы данных SQL (без изменений схемы), и обсужу принципы проектирования, необходимые для обеспечения ее надежности в работе.
настройка системы
Для этой иллюстрации я использовал подмножество набора данных Social Animals 10K Articles with NLP, которое содержит большое количество новостных статей и сообщений в блогах с метаданными. Созданная база данных SQL имеет следующие столбцы: URL, название, автор, дата публикации, категория_статьи, количество_слов и полное_содержание.
Заголовок можно считать уникальным идентификатором (первичным ключом) контента. Категории статей: технологии, бизнес, спорт, путешествия, здоровье, развлечения, политика и мода. Статьи распределены практически поровну по всем категориям. Б/у LLM Gemini-2.5-Flash и ФАСС Для индексации и хранения векторных вложений. Дизайн применим к любому выбору LLM или векторной базы данных.
архитектура
Помимо встраивания необработанного текста, мы зеркально отразили метаданные векторного хранилища с теми же полями, которые присутствуют в SQL (за исключением полного содержимого). Это позволяет фильтрацияКак мы увидим по результатам. Для более длинных документов можно использовать стратегию разбивки и внедрения скользящего окна с метаданными, связанными с каждым внедрением.
Фрагмент кода метаданных прилагается.
for idx, row in df_sql.iterrows():
content = str(row['full_content']).strip()
if not content:
continue
metadata = {
"source": row.get('url', ''),
"title": row.get('title', ''),
"authors": str(row.get('authors', '')),
"article_category": str(row.get('article_category', 'unknown')),
"published_date": str(row.get('published_date', '')),
"word_count": int(row.get('content_word_count', 0))
}
doc = Document(page_content=content, metadata=metadata)
documents.append(doc)
Мы создали два специальных интеллектуальных устройства, которые реагирующий агент Вызов может быть выполнен с использованием следующей архитектуры. Агент ReAct (Router) управляет всем конвейером запросов, разумно решая, какой инструмент применить, в зависимости от характера запроса. Он использует метаданные и контекст запроса, чтобы определить, какой из инструментов SQL, векторный инструмент или гибридный подход подходит лучше всего. На следующем рисунке показан поток принятия решения по запросу:

Инструменты следующие:
- search_database (инструмент SQL): обрабатывает запросы, требующие вычислений, агрегирования или сложной логики. Это выполняет SQL-запрос
- search_articles (инструмент векторной обработки): обрабатывает вопросы о содержании, темах или конкретных объектах. Принимает запрос на естественном языке и, при необходимости, фильтрует метаданные для выполнения глобального семантического поиска (например: “статьи о детях”) или найдите подмножество данных
(Пример: «filter_authors=’XYZ’, «query»=”articles”).
Как видно на диаграмме выше, запрос может идти по следующим путям:
- Для вычисление (например, сколько статей…), неравенства/ограничения (например: Статьи, опубликованные в период с января по апрель 2023 г.) или агрегирование (например; Каково среднее количество слов?), используйте только инструменты SQL.
- семантический поискИспользуйте векторный инструмент, как описано выше, с фильтром или без него.
- гибридный запрос: Гибридные запросы необходимы, когда вам нужны как структурированные данные (например, фильтрация по дате), так и неструктурированный контент (например, семантический поиск по статьям). Запрос содержит критерии фильтра метаданных (обычно категория или диапазон дат), для которых инструменты SQL используются для выборки статей. Список заголовков затем отправляется в векторный инструмент для выполнения семантического поиска только по этим статьям. Примером может быть “Есть ли статьи о Дне матери в моде с марта по май 2023 года?“
Результат
Вот результаты для некоторых запросов каждого типа. Было бы интересно отметить траекторию инструмента, принятую в каждом случае.
1. «Какие статьи по годам и категориям?” – это сложный вычислительный запрос, поэтому будут использоваться только инструменты SQL.
результат здесь
QUERY: what are the articles by year and category ?
TOOL SELECTION:
- search_database: {'query': "SELECT strftime('%Y', published_date) AS year, article_category, COUNT(*) FROM articles GROUP BY year, article_category"}
DOCUMENTS SELECTED:
- Tool Output: [('1970', 'business', 1), ('2001', 'politics', 1), ('2013', 'politics', 1), ('2018', 'entertainment', 1), ('2020', 'entertainment', 1), ('2020', 'sports', 1), ('2022', 'fashion', 1), ('2023', 'business', 19), ('2023', 'entertainment', 16), ('2023', 'fashion', 16), ('2023', 'health', 18), ('2023', 'politics', 16), ('2023', 'sports', 16), ('2023', 'technology', 18), ('2023', 'travel', 18)]
RESULT:
Here are the number of articles by year and category:
* 1970: business (1)
* 2001: politics (1)
* 2013: politics (1)
* 2018: entertainment (1)
* 2020: entertainment (1), sports (1)
* 2022: fashion (1)
* 2023: business (19), entertainment (16), fashion (16), health (18), politics (16), sports (16), technology (18), travel (18)
2. «Какие у вас есть статьи о детях?— Это не соответствует ни одной категории метаданных, включенных в схему, поэтому агент решает использовать векторные инструменты с глобальным семантическим поиском.
результат здесь
QUERY: what articles about children do you have
TOOL SELECTION:
- search_articles: {'query': 'children'}
DOCUMENTS SELECTED:
- Tool Output: --- Document 1 ---
Source: https://www.filmcompanion.in/features/indepth-stories/streaming/best-childrens-movies-on-amazon-prime-video-netflix-hotstar-klaus-kung-fu-panda-jagga-jasoos-childrens-day-2020
Title: 10 Films That Children Should Watch
Category: entertainment
Date: 2020-11-14 02:30:36
Content: On this children's day, here's a list of stories designed to help young ones understand the world around them, gain life lessons and be dazzled by colourful imagination. It's a great time to be a...
- https://www.filmcompanion.in/features/indepth-stories/streaming/best-childrens-movies-on-amazon-prime-video-netflix-hotstar-klaus-kung-fu-panda-jagga-jasoos-childrens-day-2020
- https://africabusiness.com/2023/04/07/save-the-children-and-thinkmd-expand-partnership-to-improve-the-lives-of-children-globally/
- https://www.tcpalm.com/story/news/education/st-lucie-county-schools/2023/04/11/books-stay-in-st-lucie-county-schools-but-most-move-to-high-school/70098338007/
RESULT:
Here are some articles about children:
1. 10 Films That Children Should Watch (entertainment)
2. Save the Children and THINKMD Expand Partnership to Improve the Lives of Children Globally (health)
3. St. Lucie County School Board decides to keep challenged books in school libraries (health)
3. «Каковы тенденции в моде?» – Агент находит категорию = мода и выполняет семантическое сопоставление с помощью векторного инструмента с этим критерием фильтра.
результат здесь
QUERY: what are the trends in fashion
TOOL SELECTION:
- search_articles: {'query': 'trends', 'filter_category': 'fashion'}
DOCUMENTS SELECTED:
- Tool Output: --- Document 1 ---
Source: https://www.sightunseen.com/2023/04/the-best-thing-we-saw-in-milan-today-india-mahdavi-for-gebruder-thonet-vienna/
Title: The Best Thing We Saw in Milan Today: India Mahdavi for Gebrüder Thonet Vienna - Sight Unseen
Category: fashion
Date: 2023-04-18 12:00:00
Content: How to Live With Objects
The Best Thing We Saw in Milan Today: India Mahdavi for Gebrüder Thonet Vienna
Sight Unseen is on the ground at the Milan Furniture Fair right now and we’ll be bringing you load...
- https://www.sightunseen.com/2023/04/the-best-thing-we-saw-in-milan-today-india-mahdavi-for-gebruder-thonet-vienna/
- https://themoderndaygirlfriend.com/clean-make-up-skincare-brand-in-2023/
- https://poprazzi.com/the-80s-inspired-jewelry-trend-im-absolutely-fawning-over/
RESULT:
The search results mention the following trends in fashion: India Mahdavi for Gebrüder Thonet Vienna, clean make up & skincare, and 80's-inspired jewelry.
4. «Расскажите мне технологические статьи о криптовалюте в 2023 году” – это гибридный запрос, в котором инструмент SQL будет использоваться для получения названий в 2023 году для категории=Технология, затем будет применен векторный инструмент с запросом=Крипто, и список заголовков найдет результаты в этом подмножестве.
результат здесь
ЗАПРОС: расскажите мне статьи о технологиях о криптографии в 2023 году. Выбор ИНСТРУМЕНТА: - search_database: {'query': "ВЫБЕРИТЕ заголовок ИЗ статей, где статья_категория = 'технология' И опубликованная_дата КАК '2023%'"} - search_articles: {'filter_titles': ['NPR quits Twitter, says Musk-led platform is “undermining our credibility”', 'Crypto.com arena considers rebrand after FTX fallout reignites investor anger', "World's Biggest EV Battery Maker Unveils S", 'What Checks Should You Perform Before Buying a Used Car? - Free Car Mag', 'Preeclampsia Diagnostics Market 2023-2030 Overall Analysis Report | Fortune Business Insights', 'Spanish startup on ‘mission to save planet’s beer’ from climate crisis', 'Best third-party apps for Reddit (2023)', "How Ford's 'driverless' BlueCruise system works", "Save $100 on Apple's M1-Powered iPad Air", 'Media release: Music cassette sales highest in nearly two decades - allmediascotland…media jobs, media release service and media resources for all', 'Software Engineer, Service Platform at Stripe | echojobs.io', 'Driving data to deliver net zero with life cycle assessments', 'The Future of Work: Trends and Predictions for the Next Decade', 'Risks of Outsourcing Software Development to Uruguay', 'Kochie Arrest News Addressed, Affected By Scam', 'Paying attention to employee retention | IRIS', 'Could this foam-filled £7,250 track bike rival the Team GB Hope HB.T?', 'Aave, Chainlink, and Binance are concentrating on enhancing the Shapella, while Big Eyes Coin is aiming for a significant final push']'query': 'crypto'} ВЫБРАННЫЕ ДОКУМЕНТЫ: - Вывод инструмента: [('NPR quits Twitter, says Musk-led platform is “undermining our credibility”',), ('Crypto.com arena considers rebrand after FTX fallout reignites investor anger',), ("World's Biggest EV Battery Maker Unveils S",), ('What Checks Should You Perform Before Buying a Used Car? - Free Car Mag',), ('Preeclampsia Diagnostics Market 2023-2030 Overall Analysis Report | Fortune Business Insights',), ('Spanish startup on ‘mission to save planet’s beer’ from climate crisis',), ('Best third-party apps for Re...
- Tool Output: --- Document 1 ---
Source: https://www.analyticsinsight.net/crypto-com-arena-considers-rebrand-after-ftx-fallout-reignites-investor-anger/
Title: Crypto.com arena considers rebrand after FTX fallout reignites investor anger
Category: technology
Date: 2023-04-19 01:15:52
Content: The Crypto.com Arena, formerly known as the Staples Center, is reportedly considering a rebrand after the recent controversy surrounding FTX, a cryptocurrency exchange. The FTX fallout reignited anger among investors, wh...
- https://www.analyticsinsight.net/crypto-com-arena-considers-rebrand-after-ftx-fallout-reignites-investor-anger/
- https://theprint.in/ani-press-releases/aave-chainlink-and-binance-are-concentrating-on-enhancing-the-shapella-while-big-eyes-coin-is-aiming-for-a-significant-final-push/1527613/
- https://echojobs.io/job/stripe-software-engineer-service-platform-wndr6
RESULT:
Here are some technology articles from 2023 that mention crypto:
1. **Crypto.com arena considers rebrand after FTX fallout reignites investor anger**: This article discusses the possibility of the Crypto.com Arena rebranding due to the controversy surrounding the FTX cryptocurrency exchange.
2. **Aave, Chainlink, and Binance are concentrating on enhancing the Shapella, while Big Eyes Coin is aiming for a significant final push**: This article mentions the Shapella upgrade and its implications for cryptocurrencies on the Ethereum network, including Binance, Aave, and Chainlink.
3. **Software Engineer, Service Platform at Stripe | echojobs.io**: This article mentions Stripe, a financial infrastructure platform that allows businesses to accept payments.
मुख्य विचार
किसी भी वास्तुकला की तरह, एक मजबूत अनुप्रयोग के लिए डिज़ाइन सिद्धांतों पर विचार किया जाना चाहिए। यहां उनमें से कुछ हैं:
- टूल डॉकस्ट्रिंग्स बनाम सिस्टम प्रॉम्प्ट: ये दो प्रकार के निर्देश हैं जो एजेंट के व्यवहार को अलग-अलग तरीकों से निर्देशित करते हैं। विश्वसनीय एजेंट प्रदर्शन के लिए किसी ओवरलैप या विरोध के बिना इच्छित उद्देश्यों के लिए उनका उपयोग करना महत्वपूर्ण है। टूल डॉकस्ट्रिंग, के अंदर स्थित है
@toolडेकोरेटर, वर्णन करता है उपकरण क्या करता है और इसका उपयोग कैसे करना है. टूल नाम के अलावा, यह पैरामीटर, प्रकार और विवरण को परिभाषित करता है।
यहां search_articles टूल डॉकस्ट्रिंग का उदाहरण दिया गया है।
@tool
def search_articles(query: str, filter_category: Optional[str] = Нет, ...): """Полезно для поиска информации по конкретным темам, резюме или подробностям в статьях. Вы можете фильтровать по метаданным для точности: - `filter_category`: 'здоровье', 'технология' и т. д. - `filter_titles`: список точных заголовков для получения (ПАТОЧНЫЙ РЕЖИМ). - `filter_date`: дата публикации (ГГГГ-ММ-ДД) только для ТОЧНОГО или ЧАСТИЧНОГО совпадения. ... """
- С другой стороны, система разумно диктует стратегию маршрутизации агенту подсказок, позволяя ему решать, когда использовать инструменты SQL, векторные инструменты или их комбинацию. Это также самый сложный и деликатный компонент приложения. Он определяет, как инструменты комбинируются в гибридном рабочем процессе, предоставляет примеры правильного использования инструментов и определяет обязательные правила и ограничения. Чтобы адекватно спроектировать системную подсказку, важно начать с хранилища тестовых примеров ожидаемых вопросов пользователя, предоставить примеры в системной подсказке и продолжить ее пополнять, чтобы учесть отклонения, возникающие в крайних случаях во время работы.
Вот пример системного приглашения
system_prompt = (
"1. **LISTING/BROWSING QUERIES** (e.g., 'what articles are in politics'):\n"
" - **ALWAYS use [search_database] to list titles\n"
" - DO NOT use [search_articles] without a semantic query\n"
...
"### MANDATORY RULES\n"
"1. **DATE RANGES & INEQUALITIES**: Use SQL first, then pass titles to vector tool\n"
...
)
- До и после фильтрации векторной базы данных: Это тонкий момент, который может иметь неожиданные и труднообъяснимые последствия для конкретных вопросов. Рассмотрим следующие два запроса, единственная разница в которых заключается в написании имени с ошибкой: “Опубликуйте краткий обзор статей о Ду Ли в журнале «Политика» от 17 апреля 2023 г.” И “Опубликовать краткий обзор статей о Дули в политике 17 апреля 2023 г.“. Оба запроса следуют схожим путям, при этом инструмент SQL успешно выбирает заголовки для этой категории и даты (есть только 1 статья, в которой упоминается судья Дули), затем для этого списка заголовков вызывается векторный инструмент с запросом. Как ни странно, для первого запроса векторный инструмент возвращает
"Tool Output: No documents found matching the criteria."В случае этой незначительной орфографической ошибки, несмотря на то, что в списке можно выбрать только 1 статью, второй запрос возвращает правильную статью.
Вот результат первого запроса
QUERY: QUERY: summarize articles about Doo ley in politics on 17th apr 2023
TOOL SELECTION:
- search_database: {'query': "SELECT title FROM articles WHERE published_date LIKE '2023-04-17%' AND article_category = 'politics'"}
- search_articles: {'query': 'Doo ley', 'filter_category': 'politics', 'filter_titles': ['Judge Dooley Ends Hartford Police Consent Decree Despite Concerns']}
DOCUMENTS SELECTED:
- Tool Output: [('Judge Dooley Ends Hartford Police Consent Decree Despite Concerns',)]
- Tool Output: No documents found matching the criteria.
и второй запрос
QUERY: summarize articles about Dooley in politics on 17th apr 2023
TOOL SELECTION:
- search_database: {'query': "SELECT title FROM articles WHERE published_date LIKE '2023-04-17%' AND article_category = 'politics'"}
- search_articles: {'query': 'Dooley', 'filter_category': 'politics', 'filter_titles': ['Judge Dooley Ends Hartford Police Consent Decree Despite Concerns']}
DOCUMENTS SELECTED:
- Tool Output: [('Judge Dooley Ends Hartford Police Consent Decree Despite Concerns',)]
- Tool Output: --- Document 1 ---
Source: https://www.nbcconnecticut.com/news/local/judge-ends-hartford-police-consent-decree-despite-concerns/3015203/
Title: Judge Dooley Ends Hartford Police Consent Decree Despite Concerns
Category: politics
Date: 2023-04-17 05:36:24
Content: Judge Dooley has ended the nearly 50 years of federal oversight of police in Hartford, despite continued concerns the department still has not hired enough minority officers to reflect the city's large Black and Hispanic populations.
И причина не только в слабом встраивании из-за орфографической ошибки. это потому что ФАСС (и цветность и т. д.) выполняют постфильтрация – Сначала выполните глобальный поиск по запросу, а затем отфильтруйте результаты по метаданным (=список заголовков). В этом случае правильный артикль не включается. топ_к = 3 Статьи после смыслового поиска. А предварительная фильтрация С другой стороны, база данных выполнила бы семантический поиск только по статьям в списке названий и нашла бы правильную статью даже с ошибкой.
- Можно ли удалить все фильтры метаданных из векторного инструмента?:да, это возможно, но это более дорогой вариантПростые семантические запросы с фильтрами метаданных (например, по категории или автору) создадут гибридный запрос, требующий двух вызовов инструментов, что увеличивает использование токена и задержку. Практическим компромиссным вариантом было бы хранить даты (и, возможно, другие числовые метаданные, такие как количество слов в данном случае) только в SQL и зеркально отображать весь текст и категориальные метаданные в векторной базе данных.
заключение
Создание RAG поверх SQL не подразумевает добавление вложений. Все дело в разработке правильной стратегии восстановления.
Когда структурированные метаданные и контент длинной формы находятся в одной таблице, реальной проблемой является оркестровка: принятие решения, когда выполнять вычисления с помощью SQL, когда выполнять семантический поиск, а когда объединять эти два понятия. Такие тонкие детали, как фильтрация метаданных и маршрутизация инструментов, могут отличить надежную систему от системы, которая тихо выходит из строя.
Благодаря хорошо продуманному агентному уровню RAG устаревшие базы данных SQL могут обеспечивать работу семантических приложений без изменений схемы, дорогостоящих миграций или снижения производительности.
Свяжитесь со мной и поделитесь своими комментариями на странице www.linkedin.com/in/partha-sarkar-let’s-talk-AI.
Ссылка
Социальные животные, 10 тысяч статей с НЛП – набор данных Алекса П. (владелец) (CC BY-SA 4.0)
Изображения, использованные в этой статье, были созданы с помощью Google Gemini. Набор данных, используемый под Лицензия CC-BY-SA 4.0. Рисунки и основной код созданы мной.