__Описание кода__

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

_Основная логика_

AgentState: определяет структуру данных для хранения текущего состояния агента. Это TypedDict с полями для сообщений, вопроса, генерации, состояния веб-поиска и документов.

Agent:
Конструктор __init__ инициализирует систему, инструменты и граф состояния.

Метод retrieve извлекает документы из индексированного хранилища на основе вопроса.

Метод generate генерирует ответ, используя извлеченные документы.

Метод grade_documents оценивает релевантность документов к заданному вопросу.

Метод web_search выполняет поиск в Интернете и добавляет результаты к документам.

Метод route_question определяет, следует ли направить запрос на веб-поиск или векторное хранилище.

Метод decide_to_generate решает, следует ли продолжать генерацию ответа или выполнить веб-поиск.

Метод grade_generation_v_documents_and_question проверяет, корректен ли ответ и соответствует ли он вопросу.