Создание функции для возврата ответа LLM
Теперь ваш чат-бот располагает множеством инструментов. Тем не менее иногда полезно обращаться к языковой модели напрямую — например, когда вопрос пользователя не связан ни с одним из доступных инструментов. Вы определите функцию, которая проверяет последнее сообщение в диалоге на наличие вызовов инструментов. Если вызовов нет, чат-бот просто использует языковую модель для формирования ответа. Чтобы обрабатывать как запросы пользователя, так и ответы чат-бота, для вас уже импортированы следующие модули.
from langchain_core.messages import AIMessage, HumanMessage
Это упражнение является частью курса
Проектирование агентных систем с LangChain
Инструкции к упражнению
- Получите последнее сообщение из
stateпо ключу"messages". - Напишите условное выражение, которое проверяет, является ли
last_messageэкземпляромAIMessageи содержит ли это сообщение вызовы инструментовtool_calls. - Если условие выполняется, верните первый
"response"изtool_callsпоследнего сообщенияlast_messageв полеcontentобъектаAIMessage. - Если условие не выполняется, вызовите
.invoke()наmodel_with_tools, чтобы сгенерировать ответ, передав полную историю диалога изstate["messages"].
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Extract the last message from the history
def call_model(state: MessagesState):
____ = ____["____"][____]
# If the last message has tool calls, return the tool's response
if isinstance(____, ____) and ____.____:
# Return only the messages from the tool call
return {"messages": [____(content=____.____[0]["____"])]}
# Otherwise, proceed with a regular LLM response
return {"messages": [____.____(____["____"])]}