Output parsers: структурированный вывод
Урок о том, как превратить свободный текст модели в предсказуемую структуру данных.
Output parser — компонент, который преобразует текстовый ответ модели в нужный тип данных (строку, список, JSON, объект).
Зачем парсить вывод
Модель возвращает текст, а приложению нужны данные: словарь, число, список. Если разбирать ответ регулярками вручную, любая вольность модели ломает код. Парсер решает две задачи: подсказывает модели нужный формат (через инструкции в промпте) и разбирает ответ в структуру, проверяя его корректность.
Виды парсеров
StrOutputParser— просто вытаскивает текст изAIMessage.JsonOutputParser— разбирает ответ как JSON.PydanticOutputParser— валидирует ответ по схеме Pydantic-модели.
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_openai import ChatOpenAI
parser = JsonOutputParser()
prompt = ChatPromptTemplate.from_template(
"Извлеки поля name и city. {format_instructions}\nТекст: {text}"
)
chain = prompt | ChatOpenAI(model="gpt-4o-mini") | parser
result = chain.invoke({
"text": "Меня зовут Аня, я из Казани",
"format_instructions": parser.get_format_instructions(),
})
print(result["city"])Разбор JSON-ответа в Python-словарь — это обычный json.loads:
import json
raw = '{"name": "Аня", "city": "Казань"}'
data = json.loads(raw)
print(data["name"], "из", data["city"])Вывод:
Аня из Казань
Как работает под капотом
У парсера два метода. get_format_instructions() возвращает текст вроде «верни валидный JSON с полями…», который вы вставляете в промпт — так модель узнаёт формат. Второй метод вызывается в конце цепочки: он берёт текст ответа и парсит его. Если модель вернула невалидный JSON, парсер бросит ошибку — это сигнал ужесточить промпт или добавить retry. Pydantic-парсер вдобавок проверяет типы и обязательные поля, поэтому даёт самую строгую гарантию структуры.
Частые ошибки
- Не вставить
format_instructionsв промпт. Тогда модель не знает, какой формат от неё ждут, и парсер падает. - Лишний текст вокруг JSON. Модель любит добавлять «Вот ваш JSON:» — просите вернуть только структуру.
- Считать парсер гарантией. Он проверяет формат, но не истинность данных; модель может выдумать значения.
Итог
- Парсер превращает текст ответа в структуру и подсказывает модели формат.
- Есть
StrOutputParser,JsonOutputParser,PydanticOutputParser(самый строгий). - В промпт обязательно вставляют
format_instructions. - Парсер проверяет формат, но не истинность данных.