Включение многоходового диалога с памятью
Вы почти готовы поделиться обновлённым чат-ботом с администрацией школы! Чтобы студенты могли комфортно пользоваться им, важно дать им возможность задавать уточняющие вопросы. Если первый ответ чат-бота окажется неполным, студенты смогут скорректировать вопрос в ходе диалога. Сейчас вы адаптируете функцию потоковой передачи так, чтобы поддерживать несколько ходов разговора: чат-бот будет выводить как вопрос пользователя, так и свой ответ. Для включения памяти LangGraph будет отправлять языковой модели полную историю переписки при каждом уточняющем вопросе. Параметры config уже заданы для одного пользователя:
config = {"configurable": {"thread_id": "1"}}
Это упражнение является частью курса
Проектирование агентных систем с LangChain
Инструкции к упражнению
- Для каждого хода диалога выведите вопрос пользователя
queryиз спискаqueries. - Выполните итерацию по
msgиmetadataс помощьюapp.stream(), передавqueryв качествеcontentобъектаHumanMessageвместе сconfig, и объедините значенияmsg.content. - Чтобы извлечь ответы чат-бота, выведите
msg.content, исключив все сообщенияmsgтипаHumanMessage, и добавьте новую строку перед следующим вопросом.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Print the user query first for every interaction
def user_agent_multiturn(queries):
for ____ in ____:
print(f"User: {____}")
# Stream through messages corresponding to queries, excluding metadata
print("Agent: " + "".join(____.____ for ____, ____ in app.____(
{"messages": [____(____=_____)]}, config, stream_mode="messages")
# Filter out the human messages to print agent messages
if ____.____ and not isinstance(____, ____)) + "____")
queries = ["Is `stressed desserts?` a palindrome?", "What about the word `kayak`?",
"What happened on the May 8th, 1945?", "What about 9 November 1989?"]
user_agent_multiturn(queries)