AZykov (обсуждение | вклад) Нет описания правки |
AZykov (обсуждение | вклад) Нет описания правки |
||
(не показаны 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).
Созданный сервис должен реализовывать следующую логику:
- Сервис подписывается на события изменения объекта Ticket,
- При получении события, сервис достает из Invocation информацию, отличается ли значение State в старой и новой версии данных
- Если значение State было изменено, сервис получает значение адреса email из объекта Contact по идентификатору, сохраненному в Ticket
- Сервис запускает служебный сценарий, передавая в него текущий статус и 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:
- Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Резюмируй текст данного обращения. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должно использоваться только резюме обращения: [Ticket.description]
- Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Предложи решение по данному обращению. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должна использоваться только подсказка по решению обращения: Тема обращения: [Ticket.subject]. Описание обращения: [Ticket.description]
Запросы представлены в качестве примера, для получения качественных результатов их необходимо модифицировать.
Пример итогового JSON запроса:
{
"modelUri": "gpt://<идентификатор_каталога>/yandexgpt-lite/latest",
"messages": [
{
"role": "system",
"text": "Ты являешься ИИ-помощником по обработке обращений в контакт-центре. Резюмируй текст данного обращения. В ответе не используй вводных конструкций или дополнительного текста, в качестве ответа должно использоваться только резюме обращения: {Ticket.description}"
}
]
}
После получения результата, необходимо из result.alternatives получить одно из сообщений, и использовать его свойство text для заполнения, соответственно, резюме или подсказки.
Последним шагом в данном задании является создание действия (Action) "Обработать с помощью ИИ" в классе Ticket, которое будет запускать данный сервис и передавать в него идентификатор обращения.
Следующая статья курса: Работа с универсальным источником данных
Следующее задание курса: Задание 11. Разработка кастомного отчета
Предыдущая статья курса: Работа с внешними системами. Возможности интеграции
Предыдущее задание курса: Задание 9. Пользовательские действия в карточке