ИИ-маркетинг
Соцсети и PRРуководство

Анализ отзывов нейросетью: промпт и пример

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

Анализ отзывов нейросетью стоит начинать не с просьбы «найди главные жалобы», а с конкретного вопроса и правил подсчёта. Тогда результат можно связать с исходными текстами, проверить по ID и превратить в следующий шаг — не выдавая предположение о причине за установленный факт.

Какие данные собрать и как выбрать помощника

Сначала зафиксируйте, что именно хотите узнать. Например: «В скольких отзывах выбранной выборки упоминается срок ответа и где есть явная отрицательная оценка ожидания?» Укажите площадки или другие источники, период, тип отзывов и критерии включения. Если источник, дата или оценка неизвестны, так и запишите: не просите модель заполнить пропуск догадкой.

Для разбора подготовьте таблицу:

ID Дата Источник Оценка на площадке Текст отзыва Дубликат
R001 дата или «неизвестно» площадка или «неизвестно» значение или «неизвестно» исходный текст без изменений ID исходной записи или пусто

Сохраняйте ID и исходный текст: по ним агент сможет проверить, откуда взята цитата. Точный дубль не удаляйте бесследно — укажите, с какой исходной записью он связан. Для тематических частот считайте уникальные отзывы, а количество исходных записей и связи дублей храните отдельно.

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

Для разового разбора подготовленной таблицы может подойти текстовый чат, если в него можно передать данные в нужном формате и результат удобно проверить. В справке GigaChat указана возможность анализа прикреплённых файлов DOCX, PDF и TXT (документы GigaChat). Это подтверждает работу с перечисленными форматами, но не интеграцию с площадкой отзывов и не пригодность сервиса для любого массива.

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

Порядок работы от исходников до результата

  1. Опишите выборку. Запишите бизнес-вопрос, источники, период, тип отзывов, критерии включения и число исходных записей. Отдельно посчитайте уникальные ID и отметьте дубли.
  2. Подготовьте вход. Передайте агенту таблицу с ID и исходными текстами. Агент может проверить пропуски, формат, повторы и связи дублей по заданным правилам. Неизвестные значения оставьте неизвестными.
  3. Определите темы и тональность. Задайте, что относится к каждой теме, и как различать положительную, отрицательную, нейтральную, смешанную и неясную оценку. Тональность определяйте отдельно для каждого аспекта: в одном отзыве может быть и факт выполненной работы, и отрицательная оценка ожидания.
  4. Попросите разметку с основаниями. Для каждой метки нужны ID, дословная цитата и краткое объяснение. Отделяйте то, что произошло по тексту, от оценки этого события.
  5. Поручите агенту техническую сверку. По исходникам проверьте покрытие уникальных ID, наличие цитат в текстах, учёт дублей и арифметику. Для каждого тематического процента должны быть видны числитель и знаменатель.
  6. Сделайте аудит меток на выбранной подвыборке. Вручную разметьте несколько выбранных ID по тем же определениям тем, передайте эти метки агенту и попросите сопоставить их с результатом модели. Посчитайте совпадения и расхождения по парам «ID — аспект». Это проверка на выбранной подвыборке, а не повод вручную перепроверять каждый отзыв. Агент может выбрать записи и посчитать расхождения; человек задаёт эталонные метки там, где для этого нужны бизнес-критерии.
  7. Запишите следующий шаг. Для повторяющейся темы сформулируйте наблюдение, возможное объяснение и способ проверить его по данным компании. Не выдавайте гипотезу о причине за вывод из текста отзыва.

Технические сбор, сопоставление и проверки агент может выполнять по правилам. Человек уточняет отсутствующие бизнес-условия и принимает решения по исключениям — например, когда непонятно, считать ли конкретное выражение жалобой по принятому в компании критерию.

Готовый промпт и заполненный пример

Разметить отзывы по темам и превратить наблюдения в проверяемые действия. Полный промпт и заполненный учебный результат на раскрытых входных данных.

Промпт и пример

Ниже ровно четыре вымышленные записи: R1 «Ответили на следующий день»; R2 «Цену согласовали до ремонта»; R3 «Молнию заменили, но ждать ответа пришлось долго»; R4 — точный дубль R1. Исходных записей четыре, уникальных отзывов три. Даты, площадки и оценки не заданы. Это учебный пример, не клиентский кейс и не испытание сервиса.

Универсальный промпт ниже не предписывает конкретные метки по этим ID. В рабочем запросе замените значения в фигурных скобках, вставьте исходные записи и, если проводите аудит, добавьте метки выбранной вручную подвыборки. В справке GigaChat для запроса на письмо советуют указать адресата, содержание и важные детали (работа с текстом в GigaChat); здесь тот же принцип конкретизации применён к задаче разметки отзывов.

{
  "task": "Разметить отзывы по темам и тональности, сохранив проверяемую связь с исходными текстами.",
  "scope": {
    "business_question": "{{Вопрос анализа}}",
    "sources": "{{Источники или неизвестно}}",
    "period": "{{Период или неизвестно}}",
    "inclusion_rules": "{{Критерии включения}}",
    "theme_definitions": "{{Определения тем или просьба предложить предварительные метки}}"
  },
  "input_records": [
    {
      "id": "{{ID записи}}",
      "date": "{{Дата или неизвестно}}",
      "source": "{{Источник или неизвестно}}",
      "rating": "{{Оценка или неизвестно}}",
      "text": "{{Исходный текст без изменений}}",
      "duplicate_of": null
    }
  ],
  "audit_reference": [
    {
      "id": "{{ID из выбранной для аудита подвыборки}}",
      "aspect": "{{Аспект}}",
      "theme": "{{Ручная метка темы}}",
      "sentiment": "{{Ручная метка тональности}}"
    }
  ],
  "rules": [
    "Обработай записи по ID. Точный дубль сохрани с указанием duplicate_of, но не включай повторно в тематические счётчики уникальных отзывов.",
    "Не заполняй отсутствующие даты, источники, оценки и контекст предположениями; неизвестное оставляй неизвестным.",
    "Не определяй возраст, личность или автора по тексту. Не представляй описанное в отзыве событие как независимо подтверждённый факт.",
    "Размечай темы отдельно. Для каждого аспекта укажи тональность: положительная, отрицательная, нейтральная, смешанная или неясная.",
    "Отделяй описание события от его оценки. Не называй нейтральное упоминание жалобой без явной отрицательной оценки.",
    "Для каждой метки укажи ID и дословную цитату из исходного текста. Не исправляй цитату и не добавляй сведения, которых в записи нет.",
    "Если аспект или тональность неоднозначны, отметь это и укажи, какого бизнес-условия или контекста не хватает.",
    "Для каждой темы посчитай число уникальных ID с этой темой и процент: число таких ID / число уникальных отзывов в выборке × 100. Один отзыв может входить в несколько тематических счётчиков.",
    "Разделяй наблюдение по тексту, гипотезу о причине и предлагаемое действие.",
    "Если переданы ручные метки audit_reference, сопоставь с ними метки модели по парам ID — аспект и посчитай совпадения и расхождения. Не создавай ручные эталонные метки самостоятельно. Если ручных меток нет, укажи, что аудит не измерен.",
    "Выполни техническую сверку покрытия ID, цитат, дублей и расчётов. Не заявляй, что эта сверка доказывает истинность интерпретаций."
  ],
  "result": {
    "sample": {
      "input_records": "{{Число исходных записей}}",
      "unique_records": "{{Число уникальных отзывов}}",
      "duplicate_links": [
        {
          "id": "{{ID дубля}}",
          "duplicate_of": "{{ID исходной записи}}"
        }
      ]
    },
    "items": [
      {
        "id": "{{ID}}",
        "original_quote": "{{Исходный текст без изменений}}",
        "duplicate_of": null,
        "included_in_unique_counts": true,
        "aspects": [
          {
            "aspect": "{{Тема или аспект}}",
            "sentiment": "{{Положительная / отрицательная / нейтральная / смешанная / неясная}}",
            "interpretation": "{{Что сказано; отдели событие от оценки}}",
            "evidence_quote": "{{Дословная цитата}}"
          }
        ]
      }
    ],
    "summary": {
      "themes": [
        {
          "theme": "{{Тема}}",
          "unique_ids": ["{{ID}}"],
          "count": "{{Число уникальных ID}}",
          "denominator": "{{Число уникальных отзывов}}",
          "percent": "{{count / denominator × 100}}"
        }
      ],
      "audit": {
        "compared_pairs": "{{Число сопоставленных пар ID — аспект или null}}",
        "matches": "{{Число совпадений или null}}",
        "discrepancies": "{{Число расхождений или null}}",
        "agreement_percent": "{{matches / compared_pairs × 100 или null}}",
        "note": "{{Что именно проверено; если эталонных меток нет — аудит не измерен}}"
      },
      "observations": ["{{Наблюдения, подтверждаемые текстами и подсчётами}}"],
      "hypotheses_to_check": ["{{Возможные объяснения, не установленные по текстам}}"],
      "next_checks": ["{{Проверка по данным компании}}"]
    },
    "limits": ["{{Границы вывода}}"]
  }
}

Заполненный результат ниже фиксирует ожидаемую разметку для учебных входных данных. Конкретную модель не запускали; поэтому здесь нет результата сравнения её ответа с ручными метками и нет замера качества.

{
  "task": "Разметить отзывы по темам и тональности, сохранив проверяемую связь с исходными текстами.",
  "scope": {
    "business_question": "В скольких уникальных отзывах упоминается срок ответа и есть ли явная отрицательная оценка ожидания?",
    "sources": "Неизвестно",
    "period": "Неизвестно",
    "inclusion_rules": "Четыре учебные записи; точный дубль хранится, но не включается в счётчики уникальных отзывов.",
    "theme_definitions": "Срок ответа — упоминание срока или ожидания ответа. Жалоба на задержку — явная отрицательная оценка ожидания ответа. Согласование цены и выполнение работы — отдельные аспекты."
  },
  "input_records": [
    {
      "id": "R1",
      "date": "неизвестно",
      "source": "неизвестно",
      "rating": "неизвестно",
      "text": "Ответили на следующий день",
      "duplicate_of": null
    },
    {
      "id": "R2",
      "date": "неизвестно",
      "source": "неизвестно",
      "rating": "неизвестно",
      "text": "Цену согласовали до ремонта",
      "duplicate_of": null
    },
    {
      "id": "R3",
      "date": "неизвестно",
      "source": "неизвестно",
      "rating": "неизвестно",
      "text": "Молнию заменили, но ждать ответа пришлось долго",
      "duplicate_of": null
    },
    {
      "id": "R4",
      "date": "неизвестно",
      "source": "неизвестно",
      "rating": "неизвестно",
      "text": "Ответили на следующий день",
      "duplicate_of": "R1"
    }
  ],
  "audit_reference": [],
  "rules": [
    "R4 сохранён как точный дубль R1 и не включён в тематические счётчики уникальных отзывов.",
    "Тональность указана отдельно для каждого аспекта. Факт без явной оценки не назван положительным или отрицательным.",
    "Цитаты дословные; неизвестные даты, источники и оценки не заполнены предположениями.",
    "Для каждой темы процент рассчитан как число уникальных ID с темой / 3 уникальных отзыва × 100. Один отзыв может входить в несколько тем."
  ],
  "result": {
    "sample": {
      "input_records": 4,
      "unique_records": 3,
      "duplicate_links": [
        {
          "id": "R4",
          "duplicate_of": "R1"
        }
      ]
    },
    "items": [
      {
        "id": "R1",
        "original_quote": "Ответили на следующий день",
        "duplicate_of": null,
        "included_in_unique_counts": true,
        "aspects": [
          {
            "aspect": "Срок ответа",
            "sentiment": "нейтральная",
            "interpretation": "Срок ответа упомянут; явной жалобы или похвалы нет.",
            "evidence_quote": "Ответили на следующий день"
          }
        ]
      },
      {
        "id": "R2",
        "original_quote": "Цену согласовали до ремонта",
        "duplicate_of": null,
        "included_in_unique_counts": true,
        "aspects": [
          {
            "aspect": "Согласование цены",
            "sentiment": "нейтральная",
            "interpretation": "Сообщён факт согласования цены до ремонта; явная оценка не выражена.",
            "evidence_quote": "Цену согласовали до ремонта"
          }
        ]
      },
      {
        "id": "R3",
        "original_quote": "Молнию заменили, но ждать ответа пришлось долго",
        "duplicate_of": null,
        "included_in_unique_counts": true,
        "aspects": [
          {
            "aspect": "Выполнение работы",
            "sentiment": "нейтральная",
            "interpretation": "Сообщён факт замены молнии; явная оценка выполнения работы не выражена.",
            "evidence_quote": "Молнию заменили"
          },
          {
            "aspect": "Срок ответа",
            "sentiment": "отрицательная",
            "interpretation": "Долгое ожидание ответа оценено отрицательно.",
            "evidence_quote": "ждать ответа пришлось долго"
          }
        ]
      },
      {
        "id": "R4",
        "original_quote": "Ответили на следующий день",
        "duplicate_of": "R1",
        "included_in_unique_counts": false,
        "aspects": [
          {
            "aspect": "Срок ответа",
            "sentiment": "нейтральная",
            "interpretation": "Точный дубль R1; запись сохранена для контроля происхождения, повторно в счётчик не включена.",
            "evidence_quote": "Ответили на следующий день"
          }
        ]
      }
    ],
    "summary": {
      "themes": [
        {
          "theme": "Упоминание срока ответа",
          "unique_ids": ["R1", "R3"],
          "count": 2,
          "denominator": 3,
          "percent": "2 / 3 × 100 = 66,7%"
        },
        {
          "theme": "Явная жалоба на задержку ответа",
          "unique_ids": ["R3"],
          "count": 1,
          "denominator": 3,
          "percent": "1 / 3 × 100 = 33,3%"
        },
        {
          "theme": "Согласование цены до ремонта",
          "unique_ids": ["R2"],
          "count": 1,
          "denominator": 3,
          "percent": "1 / 3 × 100 = 33,3%"
        },
        {
          "theme": "Факт выполнения работы без явной оценки",
          "unique_ids": ["R3"],
          "count": 1,
          "denominator": 3,
          "percent": "1 / 3 × 100 = 33,3%"
        }
      ],
      "audit": {
        "compared_pairs": null,
        "matches": null,
        "discrepancies": null,
        "agreement_percent": null,
        "note": "Аудит не измерен: ответа модели и ручных эталонных меток нет."
      },
      "observations": [
        "Упоминание срока ответа есть в двух из трёх уникальных отзывов; явная отрицательная оценка ожидания есть только в R3.",
        "R1 — нейтральное упоминание срока, не жалоба.",
        "В R3 замена молнии описана как факт выполнения без явной оценки этого аспекта."
      ],
      "hypotheses_to_check": [
        "Причина долгого ожидания ответа в этих фразах не указана. Возможные объяснения остаются гипотезами до проверки собственных данных об обращениях."
      ],
      "next_checks": [
        "В собственных данных найти реальные обращения, где первый ответ был позже принятого компанией критерия задержки, и проверить время поступления и первого ответа.",
        "Уточнить, какой критерий задержки принят в компании и какие данные по обращениям доступны для проверки.",
        "Назначить владельца проверки и записать, какое изменение процесса будет оцениваться."
      ]
    },
    "limits": [
      "Все четыре записи вымышленные; это учебный пример, не клиентский кейс и не испытание сервиса.",
      "2 из 3 — доля уникальных отзывов с упоминанием срока ответа только в этой учебной выборке, а не доля недовольных клиентов.",
      "R1 содержит нейтральное упоминание срока; явная жалоба на задержку есть только в R3: 1 из 3 уникальных отзывов.",
      "Один отзыв может входить в несколько тематических счётчиков, поэтому сумма процентов по темам может превышать 100%.",
      "Даты, источники и оценки неизвестны; выводы примера относятся только к трём уникальным записям."
    ]
  }
}

Проверка, ограничения и следующий шаг

Как проверить тематическую разметку. Выберите подвыборку ID и вручную разметьте её по тем же определениям тем и тональности, которые передали модели. Затем поручите агенту сопоставить ручные метки с результатом модели по парам «ID — аспект». Для каждой пары зафиксируйте совпадение или расхождение. Посчитайте число совпадений и расхождений; процент совпадений — число совпавших пар, делённое на число всех сопоставленных пар и умноженное на 100. Если один отзыв содержит несколько аспектов, сравнивайте каждый отдельно. Размер и способ выбора подвыборки укажите рядом с результатом.

Такое сравнение показывает согласованность модели с ручными метками на выбранной подвыборке. Оно не доказывает автоматически, что определения тем подходят бизнес-задаче или что интерпретация верна во всех неоднозначных случаях. Если метки расходятся, агент может показать ID, цитату и применённое правило; человек уточняет бизнес-условие или решает исключение. В учебном примере модель не запускалась, поэтому доля совпадений не рассчитана.

Отдельно поручите агенту проверить целостность результата: каждый уникальный ID учтён, цитаты дословно присутствуют в исходниках, дубли отмечены и не посчитаны повторно, числители и знаменатели соответствуют выборке, проценты пересчитаны. Это техническая сверка исходных данных и вычислений, а не независимое подтверждение смысла каждой метки.

Как считать частоту темы. Для каждой темы отдельно посчитайте число уникальных ID с этой темой, разделите его на число уникальных отзывов в выбранной выборке и умножьте на 100. В учебном примере срок ответа упомянут в двух из трёх уникальных отзывов: 2 / 3 × 100 = 66,7%. Явная жалоба на задержку есть только в R3: 1 / 3 × 100 = 33,3%. R1 входит в счётчик упоминаний срока, но не в счётчик жалоб. Один отзыв может попасть в несколько тематических счётчиков, поэтому сумма процентов по темам может превысить 100%. Показывайте числитель, знаменатель и правило учёта дублей.

Как перейти от наблюдения к действию. «В R3 сказано, что пришлось долго ждать ответа» — наблюдение по вымышленной фразе. Оно не связывает R3 с реальным обращением и не объясняет причину задержки. Для проверки в собственных данных найдите реальные обращения с задержкой по принятому в компании критерию, сопоставьте время поступления и первого ответа, затем назначьте владельца проверки. Если причина подтвердится, запишите, какое изменение процесса будете оценивать. До такой проверки причина остаётся гипотезой.

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

Где заканчиваются выводы. Вывод относится к выбранным источникам, периоду, типам отзывов и критериям включения. В корпусе публичных отзывов не представлены клиенты, которые не оставили отзыв; кроме того, выборка не охватывает площадки и каналы, которые в неё не включили. Поэтому долю темы в таких записях нельзя переносить на всех клиентов или считать долей всех недовольных. По тексту также нельзя определять возраст, личность или автора, а описание события не становится независимо подтверждённым фактом. Если причина важна для решения, проверяйте её по доступным данным компании.

Если следующий шаг — отдельно разобрать аудиторию, см. анализ целевой аудитории с нейросетью. Для работы со связкой данных и показателей пригодится материал об анализе маркетинговых данных с нейросетью.

Валерий Курземнек

Автор метода «Машиночитаемый маркетинг»