API промежуточного ПО LangChain


Методы-хуки базового класса AgentMiddleware

МетодСигнатураЧастота выполненияВозвращаемое значение
before_agent(state, runtime) → dict or None1 разОбновление состояния или None
abefore_agent(state, runtime) → dict or None1 разОбновление состояния или None
before_model(state, runtime) → dict or NoneЗа итерациюОбновление состояния или None
abefore_model(state, runtime) → dict or NoneЗа итерациюОбновление состояния или None
wrap_model_call(request, handler) → ModelResponse или AIMessageЗа итерациюРезультат вызова модели
awrap_model_call(request, handler) → ModelResponse или AIMessageЗа итерациюРезультат вызова модели
after_model(state, runtime) → dict or NoneЗа итерациюОбновление состояния или None
aafter_model(state, runtime) → dict or NoneЗа итерациюОбновление состояния или None
wrap_tool_call(request, handler) → ToolMessage или CommandНа каждый вызов инструментаРезультат выполнения инструмента
awrap_tool_call(request, handler) → ToolMessage или CommandНа каждый вызов инструментаРезультат выполнения инструмента
after_agent(state, runtime) → dict or None1 разОбновление состояния или None
aafter_agent(state, runtime) → dict or None1 разОбновление состояния или None

Обзор декораторов

ДекораторParametersОписание
@before_agentstate_schema, tools, can_jump_to, nameВыполняется перед запуском агента
@after_agentstate_schema, tools, can_jump_to, nameВыполняется после завершения агента
@before_modelstate_schema, tools, can_jump_to, nameВыполняется перед вызовом модели
@after_modelstate_schema, tools, can_jump_to, nameВыполняется после вызова модели
@wrap_model_callstate_schema, tools, nameПерехват выполнения модели
@wrap_tool_calltools, nameПерехват выполнения инструмента
@dynamic_promptОтсутствуетДинамически генерировать системный промпт

Ключевые атрибуты ModelRequest

AttributeTypeОписание
modelBaseChatModelТекущая модель
messageslist[AnyMessage]Список сообщений (исключая системные сообщения)
system_messageSystemMessage или NoneТекущее системное сообщение
toolslistСписок доступных инструментов
tool_choiceAnyСтратегия выбора инструмента
response_formatResponseFormat или NoneФормат структурированного вывода
statedictТекущее состояние агента
runtimeВремя выполненияКонтекст выполнения

Метод override() класса ModelRequest используется для создания нового изменённого запроса:

Пример

new_request = request.override(
    model=different_model,
    system_message=SystemMessage(content="new prompt"),
    tools=[new_tool],
)

Структура ModelResponse

AttributeTypeОписание
resultlist[BaseMessage]Список сообщений, возвращаемый моделью
structured_responseAny или NoneРезультат структурированного вывода

Специальное возвращаемое значение ExtendedModelResponse

AttributeОписание
model_responseБазовый ModelResponse
commandНеобязательный объект Command для дополнительных обновлений состояния
Другие расширения