🤩 Как новенький LangExtract от Google может помочь в AI работе с доками, RAG и не только
Неделю назад Google тихо выпустил библиотеку, которая решает боль production LLM систем: как гарантировать, что извлеченные данные действительно есть в источнике, а не выдуманы моделью. Ты задаешь примеры что хочешь извлечь из текста (например, даты и суммы из контракта), LangExtract находит все такие элементы и показывает где именно каждый находится в документе, гарантируя что ничего не выдумано. Мне как раз надо было что-то подобное, я полез изучать, потом залез в исходники и залип.
Ключевая инновация - Source Grounding
Каждое извлечение привязано к точным координатам в тексте. Парсите контракт на 50 страниц? Система не просто скажет "срок оплаты 30 дней", но и покажет exact char positions где это написано. Под капотом - умный fuzzy matching алгоритм, который находит источник даже если LLM слегка перефразировал. То есть да, это как NER только без обучения, и как structured outputs, но с точным и надежным определением координат цитаты.
А еще на основе моих тестов эта штука поразительно хорошо и быстро работает с длинными документами.
Ботанский кусок (разверните кому интересно):
Покопался в исходниках, рассказываю суть.
По сути LangExtract = Few-shot Information Extraction + Structured Outputs + Automatic Source Grounding.
В отличие от простого использования structured outputs, автоматически находит точное местоположение типа {"startpos": 41, "endpos": 57}.
Общий принцип:
Документ → [Chunking] → [LLM + Schema] → [alignment phase] → Результат с позициями
Трехуровневый alignment (exact → case-insensitive → fuzzy) покрывает все основные кейсы, результаты потом валидируются.
Поддерживает extraction_passes - это механизм множественных независимых проходов извлечения по документу для повышения recall (полноты). LLM могут "пропускать" некоторые сущности при первом проходе, особенно в длинных текстах, поэтому повторные проходы помогают найти больше информации.
На входе использует example-driven подход - вместо написания промптов вы предоставляете несколько примеров того, что хотите извлечь. Из этих примеров автоматически генерируется JSON schema для structured output и создается few-shot промпт. Поддержка разных LLM провайдеров (Gemini, OpenAI, Ollama) с оптимизациями под каждый.
А с длинными доками хорошо работает за счет трех элегантных решений:
- Intelligent chunking с сохранением границ предложений (не тупое разбиение по токенам)
- Multi-pass extraction - несколько независимых проходов, каждый может найти что-то новое, результаты консолидируются
- Массивная параллелизация - десятки чанков обрабатываются одновременно
Есть встроенная HTML-визуализация с подсветкой найденных элементов прямо в исходном тексте (показана на видео).
Некоторые альтернативы: Instructor/Marvin/Outlines.
Use кейсы для вдохновления:
- Контракты на 100+ страниц - находит все суммы и сроки с точной ссылкой на цитату, можно легко интегрировать в UI "подсветку" фактов
- Медкарты с записями - извлекаем дозировки лекарств с гарантией и визуальным указанием источника
- Data Science стал еще доступнее: на вход тысячи не структурированный документов, на выход - CSV с нужными колонками и точными координатами откуда взял
- Извлекаете из корпоративной wiki, email, Slack: люди, проекты, технологии, их связи. Строим графы знаний - Profit!
Главное: LangExtract не просто надежно извлекает, но еще и доказывает откуда взял каждый факт.
Двигаемся еще ближе от "LLM как магический черный ящик" к "LLM как надежный production инструмент".
Блогпост |
Репа
🔥➕🔁
Обсуждение 15
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram