Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. LangChain и LangGraph: от новичка до профессионала
AI / ML·15 тем·204 вопроса·уровень Junior, Middle, Senior

LangChain и LangGraph: от новичка до профессионала

Практический курс по созданию агентов на языковых моделях: цикл агента и инструменты, мидлварь, графовая оркестрация LangGraph, стриминг, память и прерывания, управление контекстом, мультиагентные схемы, тестирование и вывод в продакшен. Примеры сверены с актуальной документацией 2026 года.

Начать курс

LangChain и LangGraph

Агент — это цикл. Модель решает, какой инструмент вызвать; инструмент отрабатывает; результат возвращается модели; так до ответа. Вся остальная сложность — про управление этим циклом: где его прервать и спросить человека, что помнить между запусками, как не дать ему крутиться бесконечно и что показывать пользователю, пока он крутится. LangChain даёт цикл, LangGraph — управление им.

Пятнадцать тем. Начало — единый интерфейс к моделям: invoke, stream, batch, типы сообщений, мультимодальный ввод, структурированный вывод и привязка инструментов. Затем первый агент: инструменты через декоратор @tool, сборка через create_agent, передача контекста. Дальше middleware — хуки before_model, after_model, wrap_model_call, wrap_tool_call и досрочный выход через jump_to: это способ менять поведение агента, не переписывая его.

Вторая половина — LangGraph. Состояние, узлы и рёбра, редукторы, MessagesState. Условная маршрутизация, Command для одновременного обновления состояния и перехода, Send для параллельных ветвей. Потоковая передача событий, включая обнаружение прерываний. Сохранение состояния: чекпоинтеры (InMemorySaver, PostgresSaver) и долговременное хранилище — то, что превращает агента из функции в процесс, переживающий перезапуск. Управление контекстным окном: суммаризация и вытеснение. Человек в цикле: прерывания, одобрение и редактирование действий перед выполнением.

Дальше функциональный API (@entrypoint, @task) как альтернатива графам, мультиагентные схемы с передачей управления, кэширование узлов, наблюдаемость через LangSmith. Отдельная тема — тестирование: подмена модели заглушкой, имитация инструментов, проверка маршрутизаторов, наборы примеров для оценки. Финал — вывод в продакшен: FastAPI, Docker, мониторинг, чек-лист и типичные ошибки.

Примеры сверены с документацией 2026 года. Нужен Python и представление о том, как работает вызов LLM по API.

  1. 1

    Введение в экосистему LangChain

    Обзор экосистемы LangChain, установка, единый интерфейс моделей, выбор провайдера.

    13 вопросов6.0(1)
  2. 2

    Модели, сообщения и структурированный вывод

    Вызов моделей через invoke, stream и batch, типы сообщений, content_blocks, мультимодальный ввод, bind_tools, with_structured_output, учёт токенов.

    13 вопросов
  3. 3

    Инструменты и первый агент

    Создание инструментов через декоратор @tool, конфигурация агента с create_agent, структурированный вывод, контекст выполнения.

    14 вопросов7.0(1)
  4. 4

    Мидлварь: как менять поведение агента

    Хуки before_model, after_model, wrap_model_call и wrap_tool_call, досрочный выход через jump_to, собственные поля состояния, встроенные мидлвари.

    14 вопросов
  5. 5

    Основы LangGraph: состояние, узлы, рёбра

    Графовый подход к оркестрации, StateGraph, редукторы, MessagesState, узлы и рёбра.

    14 вопросов
  6. 6

    Условная маршрутизация и команда Command

    Условные рёбра, команда Command для обновления состояния и маршрутизации, Send для параллельных веток.

    13 вопросов
  7. 7

    Потоковая передача данных

    Стриминг с stream_events, асинхронный стриминг, обнаружение прерываний в потоке.

    13 вопросов
  8. 8

    Память и сохранение состояния

    Контрольные точки (чекпоинтеры), долговременная память (хранилище), InMemorySaver, PostgresSaver, Store.

    14 вопросов
  9. 9

    Управление контекстом

    Суммаризация, память, навыки, middleware для управления контекстным окном.

    13 вопросов
  10. 10

    Человек в цикле

    Прерывания (interrupts), паттерны одобрения и редактирования, валидация ввода, правила прерываний.

    14 вопросов
  11. 11

    Функциональный API

    Точки входа (@entrypoint), задачи (@task), сравнение графового и функционального API, параллельная обработка.

    13 вопросов
  12. 12

    Мультиагентные системы

    Паттерны мультиагентных систем: субагенты, передача управления, навыки, маршрутизатор, пользовательские рабочие процессы.

    14 вопросов
  13. 13

    Продвинутые темы

    Deep Agents, кэширование узлов, обработка ошибок, наблюдаемость с LangSmith.

    14 вопросов
  14. 14

    Тестирование и оценка агентов

    Тесты инструментов, узлов и маршрутизаторов, подмена модели заглушкой, имитация инструментов, наборы примеров и эксперименты в LangSmith, программные оценщики и модель-судья.

    14 вопросов
  15. 15

    Продакшен: развёртывание и лучшие практики

    Развёртывание агентов, Docker, FastAPI, мониторинг, чеклист перед продакшеном, типичные ошибки.

    14 вопросов
  16. Зачёт

    Доступен после всех тем (0 из 15)

  17. Экзамен

    Доступен после зачёта

78 / 78

Агент

Агенты и инструменты

Модель, вызывающая инструменты в цикле, пока задача не решена. Состоит из модели и обвязки: промпта, инструментов, мидлварей.

Пример

agent = create_agent(model='openai:gpt-4o-mini', tools=[search], system_prompt='Ты помощник.')

Связанные термины

Обвязка (harness)

Основные понятия

Всё, что окружает цикл вызовов модели: системный промпт, набор инструментов, мидлварь, память и лимиты. Формула: агент — это модель плюс обвязка.

Пример

create_agent(model=..., tools=..., system_prompt=..., middleware=[...])

Связанные термины

Цикл агента

Агенты и инструменты

Повторяющаяся последовательность: модель получает историю и описания инструментов, возвращает вызовы, фреймворк их выполняет и снова обращается к модели. Цикл заканчивается ответом без вызовов инструментов.

Пример

result = agent.invoke({'messages': [{'role': 'user', 'content': 'Погода в Казани?'}]})

Связанные термины

Рабочий процесс и агент

Основные понятия

Рабочий процесс — это фиксированная последовательность шагов, агент сам решает, что делать дальше. Если порядок шагов известен заранее, агент лишь добавляет недетерминированность и стоимость.

Пример

builder.add_edge('extract', 'classify') # фиксированный порядок вместо агента

Связанные термины

init_chat_model

Основные понятия

Единая фабрика моделей: принимает идентификатор вида «провайдер:модель» и возвращает объект с одинаковым интерфейсом для всех провайдеров.

Пример

model = init_chat_model('anthropic:claude-sonnet-4-6', temperature=0)

Связанные термины

Провайдер модели

Основные понятия

Часть идентификатора модели до двоеточия. Определяет, какой пакет интеграции будет загружен: openai, anthropic, google_genai, ollama.

Пример

init_chat_model('openai:gpt-4o-mini') # нужен пакет langchain-openai

Связанные термины

Инструмент (tool)

Агенты и инструменты

Функция, которую модель может запросить к вызову. Имя, описание и схема аргументов становятся частью промпта, поэтому качество docstring напрямую влияет на корректность вызовов.

Пример

@tool def search(query: str) -> str: """Поиск информации по запросу.""" return f'Результаты для: {query}'

Связанные термины

Вызов инструмента (tool call)

Агенты и инструменты

Структура с именем инструмента и аргументами, которую возвращает модель. Сам код модель не выполняет: вызов исполняет фреймворк.

Пример

response.tool_calls # [{'name': 'search', 'args': {'query': '...'}, 'id': 'call_1'}]

Связанные термины

ToolMessage

Агенты и инструменты

Сообщение с результатом инструмента. Связано с вызовом через tool_call_id, и каждый вызов обязан быть закрыт таким сообщением, иначе провайдер отклонит следующий запрос.

Пример

ToolMessage(content='Готово', tool_call_id=runtime.tool_call_id)

Связанные термины

ToolRuntime

Агенты и инструменты

Параметр инструмента, который фреймворк подставляет сам и не показывает модели. Даёт доступ к состоянию, контексту запуска, хранилищу и идентификатору вызова.

Пример

@tool def get_pref(name: str, runtime: ToolRuntime) -> str: return runtime.state.get('prefs', {}).get(name, '')

Связанные термины

Контекст запуска (context)

Агенты и инструменты

Неизменяемые данные запуска: идентификатор пользователя, роль, язык. Задаются снаружи через context_schema и недоступны для подмены моделью.

Пример

agent.invoke(payload, context=Context(user_id='u-42'))

Связанные термины

Структурированный вывод

Агенты и инструменты

Ответ модели по заданной схеме вместо свободного текста. В агенте задаётся через response_format, у модели через with_structured_output.

Пример

agent = create_agent(model=..., tools=[], response_format=Answer)

Связанные термины

response_format

Агенты и инструменты

Параметр create_agent со схемой финального ответа. Провалидированный объект попадает в ключ structured_response итогового состояния.

Пример

result['structured_response'].temperature_c

Связанные термины

Сообщение

Основные понятия

Единица диалога с ролью: SystemMessage задаёт правила, HumanMessage содержит запрос, AIMessage ответ модели, ToolMessage результат инструмента.

Пример

messages = [SystemMessage('Ты помощник.'), HumanMessage('Привет')]

Связанные термины

content_blocks

Основные понятия

Нормализованное представление содержимого сообщения в виде типизированных блоков: текст, рассуждения, изображения. Одинаково для всех провайдеров, в отличие от сырого поля content.

Пример

for block in response.content_blocks: print(block['type'])

Связанные термины

Блок рассуждений

Основные понятия

Часть ответа рассуждающих моделей с ходом мысли. У разных провайдеров называется по-разному, но content_blocks приводит их к общему типу reasoning.

Пример

[b for b in response.content_blocks if b['type'] == 'reasoning']

Связанные термины

usage_metadata

Эксплуатация и качество

Метаданные расхода токенов у ответа модели. По ним считают стоимость запуска и замечают распухание контекста.

Пример

response.usage_metadata # {'input_tokens': 8, 'output_tokens': 10}

Связанные термины

bind_tools

Агенты и инструменты

Метод модели, добавляющий описания инструментов к запросу. Возвращает модель, которая умеет просить вызовы, но не выполняет их.

Пример

model_with_tools = model.bind_tools([get_weather])

Связанные термины

Ограничитель частоты

Эксплуатация и качество

Компонент, задающий темп отправки запросов к провайдеру. Помогает против ошибок 429 надёжнее, чем увеличение числа повторов.

Пример

model = init_chat_model('openai:gpt-4o-mini', rate_limiter=InMemoryRateLimiter(requests_per_second=0.5))

Связанные термины

Кэширование промпта

Эксплуатация и качество

Скидка провайдера за повторяющееся начало запроса. В агенте окупается тем, что системный промпт и описания инструментов отправляются на каждом шаге цикла.

Пример

# стабильная часть промпта идёт первой, изменяемая последней

Связанные термины

Состояние (state)

Графовая оркестрация

Общая структура данных графа, которую читают и обновляют узлы. Описывается через TypedDict, dataclass или Pydantic-модель.

Пример

class State(TypedDict): messages: Annotated[list[AnyMessage], add_messages] step: int

Связанные термины

Узел (node)

Графовая оркестрация

Функция графа: принимает состояние и возвращает частичное обновление. Может быть синхронной или асинхронной и запрашивать конфигурацию и рантайм.

Пример

def my_node(state: State): return {'step': state['step'] + 1}

Связанные термины

Ребро (edge)

Графовая оркестрация

Связь между узлами, задающая порядок выполнения. Обычное ребро всегда ведёт в один узел, условное вызывает маршрутизатор.

Пример

builder.add_edge(START, 'node_a') builder.add_conditional_edges('node_a', route)

Связанные термины

Маршрутизатор

Графовая оркестрация

Функция условного ребра: получает состояние и возвращает имя следующего узла. Аннотация Literal в возвращаемом типе сообщает графу список достижимых узлов.

Пример

def route(state: State) -> Literal['search', 'answer']: return 'search' if state['needs_search'] else 'answer'

Связанные термины

Редуктор

Графовая оркестрация

Правило объединения нового значения со старым. По умолчанию замена, для накопления указывают operator.add или add_messages через Annotated.

Пример

documents: Annotated[list[str], operator.add]

Связанные термины

add_messages

Графовая оркестрация

Редуктор для списка сообщений: добавляет новые и заменяет существующие по идентификатору. Позволяет редактировать историю, не пересобирая список.

Пример

messages: Annotated[list[AnyMessage], add_messages]

Связанные термины

MessagesState

Графовая оркестрация

Готовое состояние с полем messages и редуктором add_messages. Наследуется, когда нужны дополнительные поля.

Пример

class State(MessagesState): user_id: str

Связанные термины

StateGraph

Графовая оркестрация

Строитель графа: принимает схему состояния, накапливает узлы и рёбра, а методом compile превращается в исполняемый объект.

Пример

builder = StateGraph(State, input_schema=InputState, output_schema=OutputState)

Связанные термины

Компиляция графа

Графовая оркестрация

Проверка структуры и создание исполняемого графа. На этом шаге задают чекпоинтер, кэш и статические точки останова.

Пример

graph = builder.compile(checkpointer=checkpointer, cache=InMemoryCache())

Связанные термины

Супершаг (superstep)

Графовая оркестрация

Одна итерация по узлам графа. Параллельные узлы принадлежат одному супершагу, последовательные разным. Контрольная точка сохраняется по завершении супершага.

Пример

# цикл из трёх узлов расходует лимит рекурсии втрое быстрее одиночного

Связанные термины

Команда (Command)

Графовая оркестрация

Примитив управления выполнением: обновляет состояние и выбирает следующий узел в одном шаге. С параметром graph=Command.PARENT переводит выполнение в родительский граф.

Пример

return Command(update={'category': 'billing'}, goto='billing')

Связанные термины

Send

Графовая оркестрация

Механизм динамического параллелизма: создаёт ветку с собственным входным состоянием. Применяется, когда число веток известно только во время выполнения.

Пример

return [Send('summarize_one', {'doc': d}) for d in state['documents']]

Связанные термины

Подграф

Графовая оркестрация

Скомпилированный граф, используемый как узел другого графа. По умолчанию его события не попадают в поток родителя, а управление возвращается вызывающей стороне.

Пример

builder.add_node('researcher', researcher_graph)

Связанные термины

Лимит рекурсии

Эксплуатация и качество

Максимальное число супершагов за запуск. Защищает от бесконечных циклов, но срабатывает уже после того, как агент долго крутился вхолостую.

Пример

graph.invoke(inputs, config={'recursion_limit': 25})

Связанные термины

Контрольная точка (checkpoint)

Память и состояние

Снимок состояния графа на конкретном шаге. Даёт возобновление диалога, восстановление после сбоя и возврат к прошлому состоянию.

Пример

checkpointer = InMemorySaver() graph = builder.compile(checkpointer=checkpointer)

Связанные термины

Поток (thread)

Память и состояние

Диалог, идентифицируемый через thread_id. Тот же идентификатор продолжает разговор, новый начинает пустой.

Пример

config = {'configurable': {'thread_id': 'user-42-chat-1'}}

Связанные термины

Чекпоинтер

Память и состояние

Хранилище контрольных точек. InMemorySaver для тестов, SqliteSaver для локальной работы, PostgresSaver и его асинхронный вариант для продакшена.

Пример

checkpointer = PostgresSaver.from_conn_string(DB_URL) checkpointer.setup()

Связанные термины

Хранилище (store)

Память и состояние

Долговременная память вне состояния графа, доступная из любого потока. Адресация идёт тройкой из пространства имён, ключа и значения.

Пример

runtime.store.put((user_id, 'preferences'), 'style', {'value': 'кратко'})

Связанные термины

Пространство имён

Память и состояние

Кортеж строк, разделяющий записи в хранилище по пользователям и типам данных. Поиск возможен по префиксу пространства.

Пример

namespace = (user_id, 'memories')

Связанные термины

Семантический поиск в хранилище

Память и состояние

Режим, в котором записи векторизуются при сохранении, и поиск идёт по смыслу запроса, а не по точному ключу.

Пример

store.search((user_id, 'memories'), query='что человек любит есть', limit=3)

Связанные термины

Снимок состояния

Память и состояние

Результат get_state: значения полей, список узлов в next, метаданные и идентификатор контрольной точки. Первое, на что смотрят при разборе остановки.

Пример

snapshot = graph.get_state(config) print(snapshot.next)

Связанные термины

update_state

Память и состояние

Внешнее изменение состояния потока. Создаёт новую контрольную точку, а значения проходят через редукторы.

Пример

graph.update_state(config, {'escalated': True})

Связанные термины

Путешествие во времени

Память и состояние

Возобновление с конкретной контрольной точки по её идентификатору: предыдущие узлы пропускаются, последующие выполняются заново.

Пример

config = {'configurable': {'thread_id': '1', 'checkpoint_id': '...'}} graph.invoke(None, config)

Связанные термины

Режим сохранения (durability)

Память и состояние

Момент записи контрольной точки: sync перед следующим шагом, async параллельно с ним, exit только при завершении или прерывании.

Пример

graph.stream(inputs, config=config, durability='async')

Связанные термины

Прерывание (interrupt)

Продвинутые концепции

Остановка выполнения для получения внешнего ввода. Состояние сохраняется, а узел при возобновлении выполняется с начала.

Пример

approved = interrupt({'question': 'Выполнить перевод?', 'sum': 1000})

Связанные термины

Возобновление (resume)

Продвинутые концепции

Продолжение остановленного графа. Значение Command(resume=...) становится результатом вызова interrupt внутри узла.

Пример

graph.invoke(Command(resume=True), config=config)

Связанные термины

Идемпотентность узла

Продвинутые концепции

Свойство операции давать тот же результат при повторном выполнении. Обязательно для кода до прерывания, потому что узел перезапускается при каждом возобновлении.

Пример

# запись через «создать или обновить» вместо «создать»

Связанные термины

HumanInTheLoopMiddleware

Продвинутые концепции

Мидлварь, которая ставит вызовы указанных инструментов на подтверждение человеком. Решения: одобрить, изменить аргументы, отклонить, ответить вместо инструмента.

Пример

HumanInTheLoopMiddleware(interrupt_on={'write_file': True, 'read_data': False})

Связанные термины

Потоковая передача (streaming)

Основные понятия

Получение промежуточных результатов по ходу выполнения: токены ответа, вызовы инструментов, снимки состояния.

Пример

stream = agent.stream_events(payload, version='v3') for message in stream.messages: ...

Связанные термины

Режим потока

Основные понятия

Выбор того, что приходит в поток графа: values для полных снимков, updates для изменений узла, messages для токенов, custom для собственных событий.

Пример

graph.stream(inputs, stream_mode=['updates', 'custom'], version='v2')

Связанные термины

Писатель потока

Основные понятия

Функция для отправки собственных событий из узла, например прогресса долгой операции. Работает только внутри выполнения графа.

Пример

writer = get_stream_writer() writer({'progress': 'Загружаю страницу 3 из 10'})

Связанные термины

Мидлварь

Продвинутые концепции

Компонент, встраивающийся в известные точки цикла агента: до и после модели, вокруг вызовов модели и инструментов. Позволяет менять поведение без переписывания агента.

Пример

agent = create_agent(model=..., middleware=[SummarizationMiddleware(model=...)])

Связанные термины

Хук мидлвари

Продвинутые концепции

Точка встраивания: before_agent, before_model, after_model, after_agent выполняются в конкретный момент, wrap_model_call и wrap_tool_call оборачивают вызов.

Пример

@before_model def log(state, runtime): return None

Связанные термины

jump_to

Продвинутые концепции

Досрочный переход из мидлвари: end завершает работу агента, model и tools отправляют к соответствующему узлу. Цель объявляется заранее через hook_config.

Пример

return {'messages': [AIMessage('Отказ.')], 'jump_to': 'end'}

Связанные термины

Суммаризация истории

Продвинутые концепции

Замена старой части переписки кратким пересказом при приближении к лимиту окна. Сжатие с потерями, поэтому пороги подбирают осознанно.

Пример

SummarizationMiddleware(model='openai:gpt-4o-mini', trigger=('fraction', 0.8), keep=('messages', 20))

Связанные термины

Очистка контекста

Продвинутые концепции

Удаление старых результатов инструментов с сохранением нескольких свежих. Дешевле суммаризации и не тратит вызов модели.

Пример

ContextEditingMiddleware(edits=[ClearToolUsesEdit(trigger=100_000, keep=3)])

Связанные термины

Контекстное окно

Продвинутые концепции

Максимальный объём данных, который модель принимает за один вызов. В цикле агента вся история отправляется заново на каждом шаге.

Пример

response.usage_metadata['input_tokens']

Связанные термины

Навыки (skills)

Продвинутые концепции

Доменные знания и инструкции, загружаемые по требованию. Агент видит только имена и описания, полный текст подтягивается для подходящей задачи.

Пример

SkillsMiddleware(backend=backend, sources=['./skills/'])

Связанные термины

MemoryMiddleware

Продвинутые концепции

Загрузка постоянных инструкций из файлов AGENTS.md в системный промпт при старте агента. В отличие от навыков, содержимое подставляется всегда.

Пример

MemoryMiddleware(sources=['./AGENTS.md'])

Связанные термины

Субагент

Агенты и инструменты

Агент, вызываемый как инструмент главным агентом. Работает в изолированном контексте и может использовать собственную модель.

Пример

SubAgentMiddleware(subagents=[{'name': 'researcher', 'tools': [search], 'model': 'openai:gpt-4o-mini'}])

Связанные термины

Передача управления (handoff)

Агенты и инструменты

Паттерн, при котором агент отдаёт управление другому через инструмент, возвращающий Command. После передачи новый агент сам ведёт разговор.

Пример

@tool def transfer_to_billing(runtime: ToolRuntime) -> Command: return Command(goto='billing_agent', graph=Command.PARENT, update={})

Связанные термины

Deep Agents

Продвинутые концепции

Высокоуровневая обвязка поверх LangChain с планированием, файловыми инструментами, субагентами и управлением контекстом из коробки.

Пример

agent = create_deep_agent(model='openai:gpt-4o-mini', tools=[search])

Связанные термины

Бэкенд файловой системы

Продвинутые концепции

Место хранения файлов агента: StateBackend в состоянии графа, FilesystemBackend на диске, StoreBackend в долговременном хранилище, CompositeBackend по частям.

Пример

FilesystemMiddleware(backend=StateBackend(), tools=['read_file', 'ls'])

Связанные термины

Точка входа (entrypoint)

Продвинутые концепции

Декоратор функционального API, отмечающий начало рабочего процесса. Принимает ровно один позиционный аргумент и поддерживает внедряемые параметры.

Пример

@entrypoint(checkpointer=InMemorySaver()) def workflow(topic: str) -> dict: return {'essay': write_essay(topic).result()}

Связанные термины

Задача (task)

Продвинутые концепции

Декоратор функционального API для единицы работы. Результат сохраняется в контрольной точке, поэтому при возобновлении задача не выполняется повторно.

Пример

@task def fetch_page(url: str) -> str: return download(url)

Связанные термины

previous

Продвинутые концепции

Внедряемый параметр точки входа со значением, сохранённым предыдущим запуском на том же потоке. Позволяет накапливать данные без объявления состояния.

Пример

def workflow(value: int, *, previous: Any = None) -> int: return (previous or 0) + value

Связанные термины

entrypoint.final

Продвинутые концепции

Способ вернуть вызывающему коду одно значение, а в контрольную точку сохранить другое. Сохранённое придёт в следующий запуск как previous.

Пример

return entrypoint.final(value=result, save=accumulated)

Связанные термины

Политика кэша (CachePolicy)

Эксплуатация и качество

Настройка кэширования узла с временем жизни результата. Ключ считается по входному состоянию, поэтому кэш полезен только при узком входе.

Пример

builder.add_node('search', search_fn, cache_policy=CachePolicy(ttl=60))

Связанные термины

Повтор вызова (retry)

Эксплуатация и качество

Автоматическая повторная попытка при временном сбое, с нарастающей задержкой. Вложенные повторы перемножаются, поэтому их суммарный эффект контролируют.

Пример

ModelRetryMiddleware(max_retries=3)

Связанные термины

Запасная модель (fallback)

Эксплуатация и качество

Переключение на другую модель при отказе основной. Единственная мера, помогающая во время длительной аварии провайдера.

Пример

ModelFallbackMiddleware(first_model, backup_model)

Связанные термины

Лимит вызовов

Эксплуатация и качество

Ограничение числа обращений к модели или инструментам. thread_limit считает вызовы за весь диалог, run_limit за один запуск.

Пример

ModelCallLimitMiddleware(thread_limit=20, run_limit=8)

Связанные термины

Бюджет токенов

Эксплуатация и качество

Расход токенов на запуск как метрика. Растёт быстрее всего из-за объёмных ответов инструментов, которые отправляются модели заново на каждом шаге.

Пример

sum(m.usage_metadata['total_tokens'] for m in ai_messages)

Связанные термины

Трассировка

Эксплуатация и качество

Дерево вызовов запуска с промптами, ответами, аргументами инструментов и задержками. Включается переменными окружения LangSmith без изменения кода.

Пример

export LANGSMITH_TRACING=true export LANGSMITH_API_KEY=...

Связанные термины

Оценка (evaluation)

Эксплуатация и качество

Прогон агента по набору примеров с оценщиками. Отвечает на вопрос, стало ли лучше после изменения промпта, чего трассировка не показывает.

Пример

client.evaluate(target, data='support-agent-v1', evaluators=[called_expected_tool])

Связанные термины

Набор примеров (dataset)

Эксплуатация и качество

Список реальных запросов с ожидаемым поведением. Двух-трёх десятков достаточно, чтобы ловить регрессии перед выкладкой.

Пример

client.create_examples(dataset_id=ds.id, examples=[{'inputs': {}, 'outputs': {}}])

Связанные термины

Модель-судья

Эксплуатация и качество

Оценщик на основе модели для качества текста. Недетерминирован, поэтому его оценкам верят в агрегате и формулируют критерии максимально узко.

Пример

def judge(inputs, outputs, reference_outputs) -> bool: ...

Связанные термины

LLMToolEmulator

Эксплуатация и качество

Мидлварь, подменяющая выполнение инструментов сгенерированными ответами. Позволяет проверять поведение агента без обращения к реальным системам.

Пример

LLMToolEmulator(tools=['charge_card', 'send_email'])

Связанные термины

Инъекция промпта

Эксплуатация и качество

Инструкции во внешнем тексте, которые модель принимает за указания разработчика. Ограничивается правами инструментов и подтверждениями, а не формулировками промпта.

Пример

# страница, открытая инструментом, просит отправить переписку по адресу

Связанные термины

Частые вопросы о курсе «LangChain и LangGraph: от новичка до профессионала»

Состав курса, уровни, практика и способы проверки знаний.

Что входит в курс «LangChain и LangGraph: от новичка до профессионала»?

Курс включает 15 тем и 204 вопроса с разбором ответа. Начать можно с первой темы курса.

Для какого уровня рассчитан курс «LangChain и LangGraph: от новичка до профессионала»?

Маршрут охватывает уровни Junior, Middle, Senior. Темы расположены от основы к более сложным инженерным задачам, поэтому можно начать с подходящего места и не пропускать важные зависимости.

Как проверить, что материал усвоен?

После прохождения тем доступен зачёт по курсу «LangChain и LangGraph: от новичка до профессионала» — 20 случайных вопросов с порогом 80%. После зачёта открывается экзамен с развёрнутыми ответами и автоматической оценкой, приближённый к техническому собеседованию.

Курс «LangChain и LangGraph: от новичка до профессионала» бесплатный?

Да, курс полностью бесплатный: все 15 тем доступны без оплаты.