Google LangExtract: извлечение данных из текста с помощью LLM
Google выпустила LangExtract — Python-библиотеку для структурированного извлечения данных из неструктурированного текста с помощью LLM и визуализацией.
Google открыла LangExtract: LLM-инструмент для извлечения структурированных данных
Google опубликовала LangExtract — Python-библиотеку, которая использует большие языковые модели (LLM) для извлечения структурированной информации из неструктурированных текстов по пользовательским инструкциям. Она умеет работать с клиническими записями, отчётами и другими документами — находить в них ключевые детали и гарантировать, что каждый извлечённый фрагмент привязан к конкретному месту в исходном тексте. Библиотека была выпущена Google 30 июля 2025 года, а текущая версия — 1.6.0, разработана Акшаем Гоэлем.
Зачем нужен LangExtract?
В отличие от традиционных NLP-инструментов, использующих регулярные выражения или жёсткие правила, LangExtract применяет возможности рассуждения современных LLM для понимания контекста, выявления сущностей и организации информации — при этом сохраняя точную трассируемость к исходному тексту.
Организации часто сталкиваются с проблемой: внутри текстов скрыты ценные данные, но извлекать их надёжно трудно. Ручная проверка медленна и ошибкоопасна, а создание кастомных пайплайнов требует времени и хрупко в поддержке.
Ключевые возможности
| Функция | Описание |
|---|---|
| Precise Source Grounding | Каждая сущность привязана к конкретному месту в исходном тексте |
| Structured Outputs | Гарантированный вывод по заданной схеме через few-shot примеры |
| Long Document Processing | Чанкинг, параллельная обработка и multiple passes для длинных документов |
| Interactive Visualization | Генерация самодостаточного интерактивного HTML для просмотра тысяч сущностей |
| Flexible LLM Support | Поддержка Gemini, OpenAI и локальных моделей через Ollama |
| No Fine-tuning | Адаптация к любой задаче через несколько примеров без дообучения |
Как это работает
graph TD
A[Входной текст] --> B[Описание задачи + few-shot примеры]
B --> C[lx.extract — LLM-модель]
C --> D[Извлечённые сущности с char_interval]
D --> E{Grounded?}
E -- Да --> F[JSONL-файл с результатами]
E -- Нет --> G[char_interval = None, фильтрация]
F --> H[Интерактивная HTML-визуализация]
Быстрый старт
Установка через pip:
pip install langextract
Минимальный пример — определить задачу, дать примеры и запустить извлечение:
import langextract as lx
import textwrap
# 1. Описание задачи
prompt = textwrap.dedent("""
Extract characters, emotions, and relationships in order of appearance.
Use exact text for extractions. Do not paraphrase or overlap entities.
Provide meaningful attributes for each entity to add context.""")
# 2. Few-shot пример
examples = [
lx.data.ExampleData(
text="ROMEO. But soft! What light through yonder window breaks?",
extractions=[
lx.data.Extraction(
extraction_class="character",
extraction_text="ROMEO",
attributes={"emotional_state": "wonder"}
),
]
)
]
# 3. Запуск
result = lx.extract(
text_or_documents="Lady Juliet gazed longingly at the stars, her heart aching for Romeo",
prompt_description=prompt,
examples=examples,
model_id="gemini-3.5-flash",
)
# 4. Только grounded-результаты (без галлюцинаций)
grounded = [e for e in result.extractions if e.char_interval]
char_interval = None. Фильтруйте их через [e for e in result.extractions if e.char_interval].Визуализация
# Сохранить результаты
lx.io.save_annotated_documents([result], output_name="results.jsonl", output_dir=".")
# Сгенерировать HTML
html_content = lx.visualize("results.jsonl")
with open("visualization.html", "w") as f:
f.write(html_content)
Масштабирование на большие документы
Для длинных документов LangExtract использует оптимизированную стратегию: чанкинг текста, параллельную обработку и несколько проходов для повышения полноты извлечения (recall).
Пример обработки целого романа «Ромео и Джульетта» с Project Gutenberg:
result = lx.extract(
text_or_documents="https://www.gutenberg.org/files/1513/1513-0.txt",
prompt_description=prompt,
examples=examples,
model_id="gemini-3.5-flash",
extraction_passes=3, # Несколько проходов для лучшего recall
max_workers=20, # Параллельная обработка
max_char_buffer=1000 # Меньший контекст — выше точность
)
Поддерживаемые модели
LangExtract поддерживает как облачные LLM семейства Google Gemini, так и локальные open-source модели через встроенный интерфейс Ollama.
Рекомендованная по умолчанию модель — gemini-3.5-flash. Gemini 3.5 Flash была выпущена 19 мая 2026 года. Контекстное окно составляет до 1 048 576 входных токенов и 65 536 выходных токенов. Стоимость — $1,50 за миллион входных токенов и $9,00 за миллион выходных, что делает её доступным вариантом для большинства задач.
Лицензия и ограничения
LangExtract распространяется под лицензией Apache 2.0. При этом это не официально поддерживаемый продукт Google. Использование библиотеки бесплатно, однако при работе с Gemini или OpenAI возникают расходы на API. Локальное развёртывание через Ollama позволяет полностью избежать этих затрат.
«LangExtract рассматривает задачу извлечения как инженерную проблему, а не просто AI-задачу» — пользователь из сообщества разработчиков.
Значение для отрасли
LangExtract ориентирован на широкий круг применений: от извлечения лекарств и дозировок из клинических записей до анализа рисков в финансовых аудитах и отношений между персонажами в художественных текстах.
Задачи извлечения можно определять для любого домена, используя лишь несколько примеров — дообучение модели не требуется. Это делает инструмент особенно привлекательным для команд, работающих с медицинской документацией, юридическими текстами и аналитикой, где точность и прослеживаемость результатов критичны.
Исходный код и примеры доступны на GitHub. Интерактивное демо можно запустить прямо в браузере без установки.