Поделиться через


Улучшение сообщений бота, созданных ИИ

Метка ИИ, ссылка, кнопки обратной связи и метка конфиденциальности в сообщениях бота повышают вовлеченность пользователей и повышают прозрачность и доверие.

  • Метка ИИ позволяет пользователям идентифицировать, что сообщение было создано с помощью ИИ.
  • Ссылка позволяет пользователям ссылаться на источник сообщения бота с помощью текстовых ссылок и ссылок.
  • Кнопки обратной связи позволяют пользователям предоставлять положительные или отрицательные отзывы для сообщений бота.
  • Метка конфиденциальности позволяет пользователям понять конфиденциальность сообщения бота.

На следующих снимках экрана показано, как сообщения бота можно улучшить с помощью метки ИИ, ссылки, кнопки обратной связи и метки конфиденциальности.

Примечание.

Метка ИИ

Метка ИИ в сообщении бота указывает, что она создана СИ. Хотя боты на основе ИИ, использующие большие языковые модели (LLM), как правило, надежны, метка помогает предотвратить путаницу в источнике информации.

Снимок экрана: метка ИИ в сообщении бота.

Добавление метки ИИ

Если вы используете библиотеку ИИ Teams для создания бота, метка ИИ автоматически включается для всех сообщений бота на основе ИИ в ai модуле в действии PredictedSayCommand . Дополнительные сведения см. в разделе Интерфейс AIEntity.

Если вы используете пакет SDK для Microsoft Bot Framework для создания ботаentities, добавьте additionalType в массив объекта сущностиmessage. В следующем фрагменте кода показано, как включить метку ИИ в сообщении бота:

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey! I'm a friendly AI bot. This message is generated by AI.`,
  entities: [
    {
     type: "https://schema.org/Message",
     "@type": "Message",
     "@context": "https://schema.org",
     additionalType: ["AIGeneratedContent"], // Enables AI label
    }
  ]
});
Свойство Тип Обязательный Описание
additionalType Array Да Включает метку ИИ в сообщении бота.
Допустимое значение: AIGeneratedContent

После добавления метки ИИ в сообщении бота рядом с именем бота отображается метка, созданная ИИ . При наведении указателя мыши на метку ИИ отображается заявление об отказе от ответственности, указывающее, что содержимое, созданное ИИ, может быть неправильным. Метку ИИ и заявление об отказе от ответственности нельзя настроить для ботов на основе ИИ.

Обработка ошибок

Код ошибки Описание
400 Несколько сущностей корневого сообщения, найденных в массиве entities .
400 Ошибка при синтаксическом анализе сущности сообщения из entities массива.

Цитаты

Цитирование источников в сообщениях бота помогает пользователям задавать дополнительные вопросы или проводить независимые исследования. Цитировать источники данных, такие как файлы, сообщения, сообщения электронной почты и рабочие элементы, чтобы получить ценные аналитические сведения. Ссылки имеют решающее значение для ботов, использующих такие методы, как создание Retrieval-Augmented (RAG).

Цитаты

Снимок экрана: ответ бота на основе ИИ со цитатами.

Модальное окно

Снимок экрана: всплывающее окно модального окна из ссылки в сообщении бота на основе ИИ.

Ссылки в сообщениях бота могут включать следующие:

  • Текстовые ссылки обозначают номера ссылок, добавленные в сообщение бота в формате [#], каждый из которых соответствует ссылке. Ссылку можно вставить в любом месте текста.
  • Сведения о ссылке на ссылку включают заголовок, значок, ключевые слова, абстракт, гиперссылку, сведения о конфиденциальности и кнопку для открытия модального окна с дополнительным содержимым. Ссылки отображаются в виде всплывающих окон для каждой текстовой ссылки.
  • Метки конфиденциальности для ссылок указывают на конфиденциальность ссылочного содержимого и не добавляются автоматически. Сведения о добавлении меток конфиденциальности для ссылок см. в статье Добавление метки конфиденциальности.
  • Модальное окно с дополнительным содержимым отображает адаптивную карточку без интерактивных элементов.

Примечание.

  • В сообщении отображается не более 20 ссылок.
  • Ссылки с адаптивными карточками доступны в общедоступной предварительной версии для разработчиков.
  • Адаптивные карточки не отображаются во всплывающем окне ссылки. Тем не менее адаптивные карточки можно отобразить в сообщении бота или в модальном окне ссылки, доступном во всплывающем окне.

Добавление ссылок

Если вы используете библиотеку ИИ Teams для создания бота, ссылки добавляются в сообщение бота на основе ИИ автоматически с помощью PredictedSayCommand действия. Вы также можете изменить действие, PredictedSayCommand чтобы добавить ссылки на сообщение бота. Дополнительные сведения см. в разделе Интерфейс ClientCitation.

Если вы используете пакет SDK Bot Framework для создания бота, добавьте в citationentities массив. Ниже приведен пример фрагмента кода:

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey I'm a friendly AI bot. This message is generated through AI [1]`, // cite with [1],
  entities: [
  {
    type: "https://schema.org/Message",
    "@type": "Message",
    "@context": "https://schema.org",
    citation: [
    {
      "@type": "Claim",
      position: 1, // Required. Must match the [1] in the text above
      appearance: {
        "@type": "DigitalDocument",
        name: "AI bot", // Title
        url: "https://example.com/claim-1", // Hyperlink on the title
        abstract: "Excerpt description", // Appears in the citation pop-up window
        text: "{\"type\":\"AdaptiveCard\",\"$schema\":\"http://adaptivecards.io/schemas/adaptive-card.json\",\"version\":\"1.6\",\"body\":[{\"type\":\"TextBlock\",\"text\":\"Adaptive Card text\"}]}", // Appears as a stringified Adaptive Card
        keywords: ["keyword 1", "keyword 2", "keyword 3"], // Appears in the citation pop-up window
        encodingFormat: "application/vnd.microsoft.card.adaptive",
        image: {
          "@type": "ImageObject",
          name: "Microsoft Word"
        },
       },
      },
    ],
  },
],
})
Свойство Тип Обязательный Описание
citation Object ✔️ Сведения о ссылке.
citation.@type String ✔️ Объект ссылки.
Допустимое значение: Claim
citation.position Integer ✔️ Отображает номер ссылки.
citation.appearance Объект ✔️ Сведения о внешнем виде ссылки.
citation.appearance.@type String ✔️ Объект внешнего вида ссылки.
Допустимое значение: DigitalDocument
citation.appearance.name String ✔️ Заголовок содержимого, на который ссылается ссылка. Максимальное число символов: 80
citation.appearance.url String URL-адрес содержимого, на который ссылается ссылка.
citation.appearance.abstract String Абстракция содержимого, на который ссылается ссылка. Максимальное число символов: 160
citation.appearance.text String Строка адаптивная карточка с дополнительными сведениями о ссылке. Он отображается в модальном окне, доступном из всплывающего окна.
citation.appearance.keywords Array Ключевые слова из указанного содержимого. Нельзя добавить более трех ключевых слов. Каждая ключевое слово может содержать только 28 символов.
citation.appearance.encodingFormat String Формат citation.appearance.text кодирования поля.
Допустимое значение: application/vnd.microsoft.card.adaptive
citation.appearance.image Объект Сведения о значке ссылки.
citation.appearance.image.@type String ✔️ Объект значка ссылки. Должно быть задано значение ImageObject.
citation.appearance.image.name String ✔️ Имя предопределенного значка. Он отображает значок ссылки в сведениях о ссылке.
Допустимые значения: Microsoft Word, Microsoft Excel, Microsoft PowerPoint, Microsoft OneNote, Microsoft SharePoint, Microsoft Visio, Microsoft Loop, Microsoft Whiteboard, Source Code, Adobe IllustratorSketch, , Adobe InDesignAdobe Photoshop, , Adobe Flash, Image, , GIFVideo, , Sound, , ZIPTextPDF

После включения ссылок сообщение бота содержит текстовые ссылки и ссылки. Текстовые ссылки отображают сведения о ссылке при наведении указателя мыши на ссылку.

Обработка ошибок

Код ошибки Описание
400 Несколько сущностей корневого сообщения, найденных в массиве entities .
400 Ошибка при синтаксическом анализе сущности сообщения из entities массива.
400 Сообщение бота с более чем 20 цитатами.
400 Объект appearance пуст.
400 Ошибка при синтаксическом анализе сущности ссылки с идентификатором: X.

Кнопки обратной связи

Кнопки обратной связи в сообщениях бота необходимы для отслеживания вовлеченности пользователей, выявления ошибок и получения аналитических сведений о производительности бота. Эти аналитические сведения позволяют улучшить возможности общения бота. Включите кнопки обратной связи, чтобы разрешить пользователям любить или не любить сообщения, а также предоставлять подробные отзывы.

Снимок экрана: кнопки обратной связи в боте.

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

Снимок экрана: форма обратной связи по умолчанию в боте.

Примечание.

Настраиваемые формы обратной связи доступны в общедоступной предварительной версии для разработчиков.

Кнопки обратной связи находятся в нижнем колонтитуле сообщения бота и включают кнопку 👍 (большие пальцы вверх) и кнопку 👎 (вниз), которую выбирает пользователь.

Добавить кнопки обратной связи

Для бота, созданного с помощью библиотеки ИИ Teams, Teams включает кнопки обратной связи для всех сообщений бота, если enable_feedback_loop в модуле ai задано значение true .

export const app = new Application<ApplicationTurnState>({
    ai: {
        planner: planner,
        enable_feedback_loop: true
    },

Дополнительные сведения см. в разделе переменная приложения const.

После включения кнопок обратной связи для всех SAY команд бота feedbackLoopEnabled в объекте channelData автоматически задано значение true.

Чтобы включить кнопки обратной связи в боте, созданном с помощью пакета SDK Bot Framework, определите feedbackLoop объект в объекте channelData сообщения бота.

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey! I'm a friendly AI bot!`,
  channelData: {
    feedbackLoop: { // Enable feedback buttons
        type: "custom"
  },
});
Свойство Тип Обязательный Описание
feedbackLoop Object ✔️ Включает кнопки обратной связи в сообщении бота.
feedbackLoop.type String ✔️ Определяет тип формы обратной связи, которая появляется, когда пользователь нажимает кнопки обратной связи.
Допустимые значения: custom, default

Если задано значение feedbackLoop.typedefault, форма обратной связи по умолчанию отображается, когда пользователь нажимает кнопки обратной связи. Если вы хотите отобразить настраиваемую форму обратной связи, задайте для значение feedbackLoop.typecustom. Следующий запрос на вызов отправляется боту для получения пользовательской формы, отображаемой для пользователя:

{
    "type": "invoke",
    "name": "message/fetchTask",
    "value": {
        "actionName": "feedback",
        "actionValue": {
            "reaction": "like" // like or dislike
        }
    }
}

Вы должны отвечать на этот вызов с помощью диалогового окна (называемого модулями задач в TeamsJS версии 1.x) так же, как и на task/fetch вызов. Дополнительные сведения о вызове диалогов в ботах см. в разделе Использование диалогов с ботами.

Обработка отзывов

Бот получает от пользователя входные данные из формы обратной связи через поток вызова бота. Для ботов, созданных с помощью библиотеки ИИ Teams, запрос на вызов бота обрабатывается автоматически. Для обработки обратной app.feedbackLoop связи используйте метод для регистрации обработчика цикла обратной связи, вызываемого при отправке отзывов пользователем.

app.feedbackLoop(async (_context: TurnContext, _state: TurnState, feedbackLoopData: FeedbackLoopData) => {
  // custom logic here...
});

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

Для бота, созданного с помощью пакета SDK Bot Framework, необходимо иметь onInvokeActivity обработчик для обработки отзывов. Убедитесь, что в ответ возвращается код 200 состояния с пустым объектом JSON.

В следующем фрагменте кода показано, как обрабатывать отзывы, полученные при вызове бота, и возвращать ответ с кодом 200состояния .

public async onInvokeActivity(context: TurnContext): Promise<InvokeResponse> {
    try {
      switch (context.activity.name) {
        case "message/submitAction":
           console.log('Your feedback is ' + JSON.stringify(context.activity.value))
           // Your feedback is {"actionName":"feedback","actionValue":{"reaction":"like","feedback":"{\"feedbackText\":\"This is my feedback.\"}"}}
           return CreateInvokeResponse(200, {});
        default:
          return {
            status: 200,
            body: `Unknown invoke activity handled as default- ${context.activity.name}`,
          };
      }
    } catch (err) {
      console.log(`Error in onInvokeActivity: ${err}`);
      return {
        status: 500,
        body: `Invoke activity received- ${context.activity.name}`,
      };
    }
  }

 export const CreateInvokeResponse = (
  status: number,
  body?: unknown
 ): InvokeResponse => {
    return { status, body };
 };

Сохраните отзывы, сохраняя идентификаторы сообщений и содержимое сообщений, которые бот отправляет и получает. Когда бот получает запрос на вызов с отзывом, совпадите идентификатор сообщения с соответствующим отзывом.

Примечание.

Teams не хранит и не обрабатывает отзывы. Он не предоставляет API или механизм хранения.

Если пользователь удаляет бот и по-прежнему имеет доступ к чату бота, Teams удаляет кнопки обратной связи из сообщений бота, чтобы запретить пользователю отправлять отзыв боту.

Обработка ошибок

Код ошибки Описание
400 message/submitAction Ответ invoke не пуст.

Метка конфиденциальности

Ответы бота могут содержать конфиденциальную информацию или быть доступны только определенным лицам в организации. Добавьте метку конфиденциальности, чтобы помочь пользователям определить конфиденциальность сообщения, позволяя им проявлять осторожность при предоставлении общего доступа к нему.

Снимок экрана: метка конфиденциальности бота на основе ИИ.

Примечание.

Добавьте метку конфиденциальности в сообщения бота, только если они содержат конфиденциальную информацию.

Добавление метки конфиденциальности

Для ботов, созданных с помощью библиотеки ИИ Teams, метку конфиденциальности можно добавить с помощью PredictedSayCommand действия. Дополнительные сведения см. в разделе Интерфейс SensitivityUsageInfo.

Для ботов, созданных с помощью пакета SDK Bot Framework, добавьте метку конфиденциальности в сообщение бота, изменив сообщение для включения usageInfo в entities объект .

В следующем фрагменте кода показано, как добавить метки конфиденциальности как в сообщения бота, так и в ссылку на ссылки:

await context.sendActivity({
  type: ActivityTypes.Message,
  text: `Hey, I'm a friendly AI bot. This message is generated through AI [1]`,
  entities: [
    {
      type: "https://schema.org/Message",
      "@type": "Message",
      "@context": "https://schema.org",
      usageInfo: {
        "@type": "CreativeWork",
        name: "Sensitivity title",
        description: "Sensitivity description",
      },
    },
  ],
});
Свойство Тип Обязательный Описание
usageInfo.@type String ✔️ Включает метку конфиденциальности в сообщении бота.
citation.usageInfo.@id String ✔️ Включает метку конфиденциальности в ссылке. Это необходимо при добавлении метки конфиденциальности в ссылку на ссылку.
usageInfo.name String ✔️ Указывает заголовок метки конфиденциальности.
usageInfo.description String Указывает сообщение всплывающего окна, которое появляется при наведении указателя мыши на метку конфиденциальности.

После добавления метки конфиденциальности в сообщении бота отображается значок щита. Пользователи могут навести указатель мыши на значок, чтобы увидеть заявление об отказе от ответственности о конфиденциальности сообщения.

Обработка ошибок

Код ошибки Описание
400 Несколько сущностей корневого сообщения, найденных в массиве entities .
400 Ошибка при синтаксическом анализе сущности сообщения из entities массива.
400 Значение уровня usageInfo.@id цитирования не соответствует уровню usageInfo.@id сообщения по крайней мере в одном экземпляре.
400 Существует несколько свойств уровня usageInfo ссылки с одинаковыми @idсвойствами , но их name свойства и description отличаются.

Модифицировать PredictedSayCommand

Для бота, созданного с помощью библиотеки ИИ Teams, предоставляет контроль над тем, PredictedSayCommand как метка ИИ, ссылка, кнопка обратной связи и метка конфиденциальности добавляются в действия бота. Ниже приведен фрагмент кода для изменения PredictedSayCommand:

app.ai.action<PredictedSayCommand>(AI.SayCommandActionName, async (context, state, data, action) => {
  // custom logic here...
  await context.sendActivity(data.content);
  return "";
});

Дополнительные сведения о PredictedSayCommandсм. в разделе Интерфейс PredictedSayCommand.

Примеры кода

Название примера Описание Node.js .NET
Бот для беседы в Teams Этот пример приложения отображает метку ИИ, ссылку, кнопки обратной связи и метку конфиденциальности в сообщениях. Просмотр Н/Д
Azure OpenAI для ваших данных Этот бот для общения использует библиотеку ИИ Teams и содержит метку ИИ, кнопки обратной связи, метку конфиденциальности и ссылку в созданных сообщениях. Н/Д Просмотр

См. также