Открыть меню
Платформа Эра. Документация
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Задание 10. Обработка данных: различия между версиями

Материал из Платформа Эра. Документации
Нет описания правки
Нет описания правки
 
(не показаны 4 промежуточные версии этого же участника)
Строка 5: Строка 5:
= Задание =
= Задание =


Данное задание состоит из трёх отдельных пунктов:


* Отправка email-уведомлений при изменении статуса Обращения
* Разработка сервиса для создания обращений из внешних систем
* Базовая интеграция с YandexGPT<br />


=== Отправка уведомлений ===
Необходимо разработать сервис, который будет подписываться на события по изменению статуса в обращении (поле Ticket.state), и при изменении статуса, будет отправлять контакту Email-уведомление.


В рамках данного задания, отправка email-уведомлений должна быть реализована с помощью служебного сценария.


Перед началом работ, необходимо добавить в класс Контакт (Contact) новое свойство - Адрес Email (тип base/String).
Созданный сервис должен реализовывать следующую логику:
# Сервис подписывается на события изменения объекта Ticket,
# При получении события, сервис достает из Invocation информацию, отличается ли значение State в старой и новой версии данных
# Если значение State было изменено, сервис получает значение адреса email из объекта Contact по идентификатору, сохраненному в Ticket
# Сервис запускает служебный сценарий, передавая в него текущий статус и email для отправки нотификации<br />
После разработки сервиса, необходимо реализовать служебный сценарий, который в зависимости от статуса будет отправлять разный текст нотификации - для перевода в статусы "В работе", "Закрыто" и "Отменено". Для отправки Email-сообщения в служебном сценарии предусмотрен специальный компонент.
=== Сервис для создания обращений ===
Необходимо реализовать сервис, который будет принимать три параметра:
* Номер телефона
* Тема обращения
* Описание обращения
При получении запроса, сервис должен найти контакт (Contact) по полю PhoneNumber (оно должно быть добавлено в объект Contact в рамках [[Задание 6. Интеграция звонков в карточку|задания 6]]).
После того как контакт был найден (или не найден), сервис должен создать новое обращение, заполнив следующие свойства:
* contact_id - идентификатором контакта, если он найден
* client_id - идентификатором client_id из найденного объекта Contact, если контакт найден, а значение client_id в нем заполнено
* state - Открыто
* subject - переданной в сервис темой обращения
* description - переданным в сервис описанием обращения
После созания обращения сервис должен вернуть идентификатор нового обращения, а также два признака:
* contactFound (bool) - найден ли контакт по номеру телефона
* clientFound (bool) - найден ли контрагент через связь с контактом
=== Интеграция с YandexGPT ===
<blockquote>Для выполнения данного подзадания, необходимо иметь аккаунт в Yandex Cloud. Можно использовать trial аккаунт, который позволяет бесплатно пользоваться сервисами с некоторыми ограничениями, либо использовать платный доступ, пополнив биллинг на минимальные 10 рублей (этого количества хватит на любые тесты).</blockquote>Необходимо реализовать сервис, который будет выполнять простую интеграцию с YandexGPT - резюмирование текста обращения и генерация ИИ-подсказки по обращению.
Перед началом работы, в классе Ticket необходимо добавить два свойства - "ИИ-резюме" и "ИИ-подсказка", оба свойства с типом base/String. Поля не должны отображаться на карточке, если они пустые.
Сервис должен принимать на вход в качестве параметра идентификатор обращения.
В рамках разработки сервиса необходимо реализовать обращение к методу [https://yandex.cloud/ru/docs/foundation-models/text-generation/api-ref/TextGeneration/completion completion API YandexGPT]
Также, необходимо реализовать Bearer-аутентификацию ([https://yandex.cloud/ru/docs/foundation-models/api-ref/authentication#yandex-account_1 документация Yandex Cloud]), ключ для аутентификации необходимо хранить в проектных параметрах.
При выполнении запросов к LLM не требуется указывать каких-либо дополнительных параметров, кроме modelURI и одного элемента в массиве messages
При получении запроса, сервис должен отправить в YandexGPT два запроса на completion:
# Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Резюмируй текст данного обращения. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должно использоваться только резюме обращения: [Ticket.description]
# Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Предложи решение по данному обращению. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должна использоваться только подсказка по решению обращения: Тема обращения: [Ticket.subject]. Описание обращения: [Ticket.description]
Запросы представлены в качестве примера, для получения качественных результатов их необходимо модифицировать.
Пример итогового JSON запроса:<syntaxhighlight lang="json">
{
  "modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite/latest",
  "messages": [
    {
      "role": "system",
      "text": "Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Резюмируй текст данного обращения. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должно использоваться только резюме обращения: {Ticket.description}"
    }
  ]
}
</syntaxhighlight>
После получения результата, необходимо из result.alternatives получить одно из сообщений, и использовать его свойство text для заполнения, соответственно, резюме или подсказки.
Последним шагом в данном задании является создание действия (Action) "Обработать с помощью ИИ" в классе Ticket, которое будет запускать данный сервис и передавать в него идентификатор обращения.


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

Текущая версия от 17:27, 12 марта 2025

Предыдущая статья курса: Работа с внешними системами. Возможности интеграции
Предыдущее задание курса: Задание 9. Пользовательские действия в карточке

Задание

Данное задание состоит из трёх отдельных пунктов:

  • Отправка email-уведомлений при изменении статуса Обращения
  • Разработка сервиса для создания обращений из внешних систем
  • Базовая интеграция с YandexGPT

Отправка уведомлений

Необходимо разработать сервис, который будет подписываться на события по изменению статуса в обращении (поле Ticket.state), и при изменении статуса, будет отправлять контакту Email-уведомление.

В рамках данного задания, отправка email-уведомлений должна быть реализована с помощью служебного сценария.

Перед началом работ, необходимо добавить в класс Контакт (Contact) новое свойство - Адрес Email (тип base/String).

Созданный сервис должен реализовывать следующую логику:

  1. Сервис подписывается на события изменения объекта Ticket,
  2. При получении события, сервис достает из Invocation информацию, отличается ли значение State в старой и новой версии данных
  3. Если значение State было изменено, сервис получает значение адреса email из объекта Contact по идентификатору, сохраненному в Ticket
  4. Сервис запускает служебный сценарий, передавая в него текущий статус и email для отправки нотификации

После разработки сервиса, необходимо реализовать служебный сценарий, который в зависимости от статуса будет отправлять разный текст нотификации - для перевода в статусы "В работе", "Закрыто" и "Отменено". Для отправки Email-сообщения в служебном сценарии предусмотрен специальный компонент.

Сервис для создания обращений

Необходимо реализовать сервис, который будет принимать три параметра:

  • Номер телефона
  • Тема обращения
  • Описание обращения

При получении запроса, сервис должен найти контакт (Contact) по полю PhoneNumber (оно должно быть добавлено в объект Contact в рамках задания 6).

После того как контакт был найден (или не найден), сервис должен создать новое обращение, заполнив следующие свойства:

  • contact_id - идентификатором контакта, если он найден
  • client_id - идентификатором client_id из найденного объекта Contact, если контакт найден, а значение client_id в нем заполнено
  • state - Открыто
  • subject - переданной в сервис темой обращения
  • description - переданным в сервис описанием обращения

После созания обращения сервис должен вернуть идентификатор нового обращения, а также два признака:

  • contactFound (bool) - найден ли контакт по номеру телефона
  • clientFound (bool) - найден ли контрагент через связь с контактом

Интеграция с YandexGPT

Для выполнения данного подзадания, необходимо иметь аккаунт в Yandex Cloud. Можно использовать trial аккаунт, который позволяет бесплатно пользоваться сервисами с некоторыми ограничениями, либо использовать платный доступ, пополнив биллинг на минимальные 10 рублей (этого количества хватит на любые тесты).

Необходимо реализовать сервис, который будет выполнять простую интеграцию с YandexGPT - резюмирование текста обращения и генерация ИИ-подсказки по обращению.

Перед началом работы, в классе Ticket необходимо добавить два свойства - "ИИ-резюме" и "ИИ-подсказка", оба свойства с типом base/String. Поля не должны отображаться на карточке, если они пустые.

Сервис должен принимать на вход в качестве параметра идентификатор обращения.

В рамках разработки сервиса необходимо реализовать обращение к методу completion API YandexGPT

Также, необходимо реализовать Bearer-аутентификацию (документация Yandex Cloud), ключ для аутентификации необходимо хранить в проектных параметрах.

При выполнении запросов к LLM не требуется указывать каких-либо дополнительных параметров, кроме modelURI и одного элемента в массиве messages

При получении запроса, сервис должен отправить в YandexGPT два запроса на completion:

  1. Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Резюмируй текст данного обращения. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должно использоваться только резюме обращения: [Ticket.description]
  2. Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Предложи решение по данному обращению. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должна использоваться только подсказка по решению обращения: Тема обращения: [Ticket.subject]. Описание обращения: [Ticket.description]

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


Пример итогового JSON запроса:

{
  "modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite/latest",
  "messages": [
    {
      "role": "system",
      "text": "Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Резюмируй текст данного обращения. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должно использоваться только резюме обращения: {Ticket.description}"
    }
  ]
}


После получения результата, необходимо из result.alternatives получить одно из сообщений, и использовать его свойство text для заполнения, соответственно, резюме или подсказки.

Последним шагом в данном задании является создание действия (Action) "Обработать с помощью ИИ" в классе Ticket, которое будет запускать данный сервис и передавать в него идентификатор обращения.

Следующая статья курса: Работа с универсальным источником данных
Следующее задание курса: Задание 11. Разработка кастомного отчета
Предыдущая статья курса: Работа с внешними системами. Возможности интеграции
Предыдущее задание курса: Задание 9. Пользовательские действия в карточке