Язык выражений LangChain (LCEL)
Язык выражений LangChain, или LCEL — это декларативный способ объединения компонентов LangChain. В основе LCEL лежит возможность поддержки внедрения прототипов в эксплуатацию без изменений в коде. Это касается как самых простых цепочек «промпт + LLM», так и самых сложных цепочек (есть примеры успешного запуска цепочек LCEL с сотнями шагов в производственном контуре).
Преимущества LCEL
Первоклассная поддержка потоковой передачи
Для некоторых цепочек это означает, что токены передаются напрямую из LLM в потоковый парсер вывода. Вы получаете обратно проанализированные, инкрементальные фрагменты вывода с той же скоростью, с которой LLM передает необработанные токены.
Поддержка асинхронности
Любую цепочку, созданную с помощью LCEL, можно вызвать как с синхронным API (например, с помощью Jupyter-блокнота для прототипирования), так и с асинхронным API (например, на сервере GigaServe). Это позволяет использовать один и тот же код для прототипов и в эксплуатации, с отличной производительностью и возможностью обработки множества одновременных запросов на одном сервере.
Оптимизированное параллельное выполнение
Чтобы задержка была минимальной, шаги цепочки LCEL автоматически выполняются параллельно, если это допустимо (например, для извлечения документов из нескольких ретриверов). Это работает как в синхронных, так и в асинхронных интерфейсах.
Повторы и альтернативные пути
Настройка повторов и альтернативных путей для любой части цепочки LCEL. Это отличный способ для повышения надежности при масштабировании цепочек.
Доступ к промежуточным результатам
Для более сложных цепочек полезно иметь доступ к результатам промежуточных шагов до получения окончательного результата. Промежуточные результаты поддерживают потоковую передачи и работают на любом сервере GigaServe.
Схемы входных и выходных данных
Схемы входных и выходных данных предоставляют каждой LCEL-цепочке схемы Pydantic и JSONSchema, выведенные из структуры вашей цепочки. Схемы можно использовать для валидации входных и выходных данных. Схемы — это неотъемлемая часть GigaServe.
Бесшовная трассировка с LangSmith
По мере усложнения ваших цепочек становится все более важным понимать, что именно происходит на каждом шаге. С LCEL все шаги автоматически записываются в LangSmith для максимальной читаемости и отладки.
Бесшовное развертывание GigaServe
Любую цепочку, созданную с помощью LCEL, можно легко развернуть с помощью GigaServe.
Интерфейс Runnable
Чтобы упростить создание пользовательских цепочек, мы реализовали протокол "Runnable". Многие компоненты GigaChain реализуют протокол Runnable
, включая чат-модели, LLM, парсеры вывода, ретриверы, шаблоны промптов и многое другое. Существуют также несколько полезных примитивов для работы с Runnable, которые описаны ниже.
Runnable — это стандартный интерфейс, который упрощает определение пользовательских цепочек, а также их вызов стандартным способом. Стандартный интерфейс включает:
stream
— потоковая передача фрагментов ответа;invoke
— вызов цепочки с входными данными;batch
— вызов цепочки со списком входных данных.
Эти методы также имеют соответствующие асинхронные версии, которые для параллельного выполнения следует использовать с синтаксисом await
библиотеки asyncio :
astream
— потоковая передача блоков ответа асинхронно;ainvoke
— вызов цепочки с входными данными асинхронно;abatch
— вызов цепочки со списком входных данных асинхронно;astream_log
— потоковая передача промежуточных шагов по мере их выполнения, в дополнение к окончательному ответу;astream_events
— beta потоковая передача событий по мере их выполнения в цепочке (введено вgigachain-core
версии 0.1.14).
Типы входных и выходных данных варьируются в зависимости от компонента:
Компонент | Тип входных данных | Тип выходных данных |
---|---|---|
Промпт | Словарь | PromptValue |
Чат-модель | Одна строка, список сообщений чата или PromptValue | ChatMessage |
LLM | Одна строка, список сообщений чата или PromptValue | Строка |
Парсер вывода | Вывод LLM или чат-модели | Зависит от парсера |
Ретривер | Одна строка | Список документов |
Инструмент | Одна строка или словарь, в зависимости от инструмента | Зависит от инструмента |
Все Runnable предоставляют схемы данных для анализа входов и выходов:
input_schema
— входная модель Pydantic, автоматически сгенерированная из структуры Runnable;output_schema
— выходная модель Pydantic, автоматически сгенерированная из структуры Runnable.