Предварительный анализ текста
Для анализа текстовых фрагментов и решения задач классификации, маршрутизации или ранжирования использование LLM может быть невыгодно. Чтобы снизить потребление ресурсов, повысить скорость и эффективность при решении таких задач в GigaChat API B2Bank доступна модель FRIDA-Decisions . Для работы с моделью нужно получить доступы .
Модель работает в пилотном режиме и доступна бесплатно только на стенде ИФТ. Количество одновременных потоков — не более двух на время пилота.
В отличие от LLM, эта модель не генерирует текст, а в структурированной форме отвечает на заранее заданные вопросы о переданном тексте: оценивает варианты ответа, возвращает вероятности и, в зависимости от задачи, выбранный вариант, оценку по шкале или ранжированный список. Ответ модели можно использовать, например, для маршрутизации обращений пользователей или оценки пригодности инструмента, выбранного LLM, для решения задачи агента.
Запрос пользователя
Вчера оплатил заказ №5512 картой, деньги списались дважды. Курьер привез заказ с опозданием на три дня, а поддержка двое суток не отвечала. Верните лишнее списание.
Ответ модели
{
"topic": {
"choice": "billing",
"probabilities": {
"account": 0.0000287,
"billing": 0.6600105,
"delivery": 0.3387572,
"product": 0.0012036
}
},
"urgency": {"score": 1.0214},
"complaint": {"probability": 0.9539}
}
Ниже вы узнаете как использовать модель с помощью методов API:
- POST /v1/chat/completions;
- POST /v2/chat/completions;
- POST /openai/v1/chat/completions.
Как работает модель
При обращении к FRIDA Decisions используется генерация структурированных данных.
В запросе, в поле response_format с типом json_schema нужно передать JSON-схему вопросов.
Вопросы оцениваются независимо, поэтому результаты можно комбинировать: определить тему обращения, срочность и наличие жалобы за один запрос.
Каждый вопрос передается в отдельном поле в schema.properties:
{
"model": "frida",
"messages": [
{"role": "user", "content": "Здравствуйте! Вчера оплатил заказ №5512 картой, деньги списались дважды. Курьер привез заказ с опозданием на три дня, а поддержка двое суток не отвечала. Верните, пожалуйста, лишнее списание."}
],
"response_format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"q1": {"title": "noul", "description": "Клиент просит вернуть деньги?", "type": "object", "properties": {"probability": {"type": "number"}}},
"q2": {"title": "noul", "description": "Клиент упоминает доставку?", "type": "object", "properties": {"probability": {"type": "number"}}},
"q3": {"title": "noul", "description": "Клиент упоминает поддержку?", "type": "object", "properties": {"probability": {"type": "number"}}},
"q4": {"title": "noul", "description": "Клиент угрожает уйти?", "type": "object", "properties": {"probability": {"type": "number"}}},
}
}
}
}
Текст для оценки, должен быть короче 384 токенов. Модель не учитывает все, что выше этого ограничения. Поэтому передавайте важную информацию в начале сообщения.
Имя поля становится именем вопроса в ответе, title задает тип вопроса, а description — текст вопроса для модели.
Поле title принимает одно из значений:
choice— выбрать один вариант из нескольких и получить вероятности всех вариантов;score— расположить текст на шкале из нескольких уровней;noul— проверить одно утверждение и получить вероятность ответа «да»;ranking— упорядочить кандидатов от самого важного к наименее важному.
В ответ модель возвращает поле content — строку с JSON-объектом: по одному ключу на каждый вопрос схемы.
{
"choices": [
{
"message": {
"content": "{\"q1\":{\"probability\":0.8815209596207574},\"q2\":{\"probability\":0.7620943162745152},\"q3\":{\"probability\":0.38572241698282184},\"q4\":{\"probability\":0.038442224492629365},\"q5\":{\"probability\":0.9269841713935097},\"q6\":{\"probability\":0.38107537519940016}}",
"role": "assistant"
},
"index": 0,
"finish_reason": "stop"
}
],
"created": 1793974228,
"model": "frida:latest",
"object": "chat.completions",
"usage": {
"prompt_tokens": 369,
"completion_tokens": 0,
"total_tokens": 369,
"precached_prompt_tokens": 48
}
}
Для повышения качества работы модели при составлении схемы придерживайтесь рекомендаций:
| Параметр | Рекомендуемое значение |
|---|---|
| Длина вопроса | до 96 токенов |
| Длина описания варианта | до 256 токенов |
| Вопросов в запросе | до 4 |
| Вариантов ответа | до 16 |
Потоковая передача
При обращении к модели в режиме потоковой генерации ("stream": true), JSON-ответ всегда возвращается в одном фрагменте.
Формат фрагмента зависит от метода.
Приходит событие data с полями content и finish_reason, затем событие data: [DONE]:
data: {"choices":[{"delta":{"content":"{\"complaint\":{\"probability\":0.9538661516142485}}","role":"assistant"},"index":0,"finish_reason":"stop"}],"created":1794226752,"model":"frida:latest","object":"chat.completions","usage":{"prompt_tokens":65,"completion_tokens":0,"total_tokens":65,"precached_prompt_tokens":48}}
data: [DONE]
Приходят событие response.message.delta с ответом модели и response.message.done:
event: response.message.delta
data: {"model":"frida:latest","created_at":1794226754,"messages":[{"role":"assistant","content":[{"text":"{\"complaint\":{\"probability\":0.9538661516142485}}"}]}]}
event: response.message.done
data: {"model":"frida:latest","created_at":1794226754,"messages":[{"role":"assistant","tool_state_id":"01a1c03f-9599-76f2-a69a-69e4ab8e832d"}],"finish_reason":"stop","usage":{"input_tokens":65,"input_tokens_details":{"prompt_tokens":65,"cached_tokens":48},"output_tokens":0,"total_tokens":65}}
Приходят фрагменты chat.completion.chunk: в первом — content, во втором — finish_reason:
data: {"id":"c55ff81a-187b-4d7b-970c-7ba207927725","choices":[{"index":0,"delta":{"role":"assistant","content":"{\"complaint\":{\"probability\":0.9538661516142485}}"}}],"created":1794226755,"model":"frida:latest","object":"chat.completion.chunk","system_fingerprint":"","usage":null}
data: {"id":"c55ff81a-187b-4d7b-970c-7ba207927725","choices":[{"index":0,"finish_reason":"stop","delta":{"tool_state_id":"01a1c03f-98d9-7aab-9e39-e4dfebf5fd38"}}],"created":1794226755,"model":"frida:latest","object":"chat.completion.chunk","system_fingerprint":"","usage":{"prompt_tokens":65,"prompt_tokens_details":{"cached_tokens":48},"total_tokens":65}}
Как составить схему
- Укажите тип вопроса
В поле
titleукажите один из типов:choice— выбор одной из категорий;score— оценка по шкале;noul— вопрос «да/нет»;ranking— упорядочивание кандидатов.
Неизвестное значение приведет к ошибке с кодом 422, под которой приходит ошибка
400 Bad Request. - Сформулируйте вопрос
В поле
descriptionвопроса коротко и однозначно опишите задачу. Например: «Какая тема обращения?». Именно здесь передается инструкция для модели. - Опишите варианты ответа
Если тип вопроса предусматривает варианты, добавьте их в
properties.probabilities.properties. Вdescriptionкаждого варианта поясните, какие случаи к нему относятся. Например: «Оплата, списания и возвраты денег».