Сохранить предыдущий ответ Chatbot - PullRequest
0 голосов
/ 23 января 2020

У меня есть сборка QnA Bot с Azure Bot framework в C#. Я хочу сохранить предыдущий ответ моего чата, чтобы проверить, не повторил ли мой бот тот же ответ. Если да, следует отправить дополнительное сообщение (спрашивающее, нужно ли взаимодействие с человеком).

Я знаю, как отправить дополнительное сообщение, и я знаю, что это должно быть возможно с ConversationState / пользовательским состоянием. Я тоже использую диалоги, поэтому все примеры, которые я нашел в Интернете, не могли мне помочь (они не используют диалоги, поэтому реализация отличается).

Я просто не понимаю, как сохранить что-то в ConversationState и как получить к нему доступ позже.

1 Ответ

0 голосов
/ 23 января 2020

Полагаю, вы просматривали документы, например Сохранить данные пользователя и беседы ? Если это так, просто помните, что есть несколько предпосылок:

  1. Вам необходимо указать местоположение, чтобы сохранить фактическое состояние. В ссылке используется память (var storage = new MemoryStorage();), но вы можете сохранить ее на диске / в базе данных / хранилище BLOB-объектов / в любом другом месте
  2. Бот принимает объекты диалога и состояния пользователя в своем конструкторе:

    private BotState _conversationState; private BotState _userState;

    publi c StateManagementBot (ConversationState разговорState, UserState userState) {_conversationState = разговорState; _userState = userState; }

  3. После того, как это будет сделано, кодом позже пытаются (а) извлечь объект из состояния , если он существует . Если он не существует, он будет создан тут же.

    var разговорStateAccessors = _conversationState.CreateProperty (nameof (ConversationData));

    var разговорData = await разговорStateAccessors.GetAsyn c (turnContext, () => new ConversationData ());

Таким образом, здесь уместен объект "ConversationData", который является любым типом пользовательского объекта, который вы хотите. Возможно, список или что-то имеет для вас смысл. Следующей является часть "() => new ConversationData()", которая в основном является встроенной функцией, которая просто создает новый экземпляр объекта. Вы бы создали, скажем, новый список. Последующие вызовы «var conversationData =...» в любом месте вашего бота (например, внутри OnMessageActivityAsyn c) вернут (уже существующий) экземпляр List, по которому вы можете проверить историю.

Просто имейте в виду, что это может стать довольно большим, поэтому, возможно, стоило бы убрать время (например, хранить только последние 20 или что-то в этом роде), если вы долго общаетесь с пользователями - это будет зависеть на ваш сценарий, где / как вы используете свои боты, я думаю.

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