Для кого эта история

Я не разработчик, поэтому это не Technogikov обзор следующего инструмента. Скорее, это шаг -штальная инструкция для тех, кому нужно понять, что пользователи имеют в своей голове, без тонны интервью, звонков и сплайденных бюджетов. Для менеджеров продуктовых магазинов, методологов, у которых нет технического контекста, но есть желание выкопать немного больше, чем «кажется, что это будет настолько практичным».

За что

Необходимо примерно оценить, если кто -то делает то, что мы делаем (хорошо, или мы хотим сделать), скажем, есть идея запустить новый продукт, но эта идея всегда в моей голове, и получить бюджет и людей для реального обучения — это сложно, а иногда и почти невозможно (ну, вы знаете такие разговоры с начальниками).

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

  • Получите идеи о мотивации, страхах, ожиданиях

  • Проверьте сценарии формулировки и связи

  • Сформулируйте предположения, чтобы улучшить маркетинг, позиционирование и обслуживание курса

Да, это не замена для классических исследований UX и, конечно, не инвестиционной рекомендации. Но это все еще лучше, чем угадать кофейную густь или решать «глаз».

Обсуждение!

Проверка гипотез без респондентов — это не столько инструмент для ленивого исследователя, сколько альтернативы, когда нет способа «войти в поля» или когда никто не хочет с вами разговаривать — и данные необходимы здесь и сейчас.

Я сразу сделаю бронирование: конечно, синтетические исследования не заменяют живое общение пользователями. Мы не «удаляем» пользователя процесса, но расширяем наши способы услышать его — быстро, развивающиеся и безопасные. Цель этого инструкции — помочь вам завершить и экстраполировать данные из новых способов придать импульс для открытий и исследований.

Используя эти синтетические интервью, вы можете получить данные от виртуальных «пользователей» рядом с целевой аудиторией вашего продукта. Естественно, мы предполагаем, что продукт (и пользователь) представляет собой, по крайней мере, определенную массу, поэтому приближение, которое может дать LLM, радикально отличается от реальности.

Это позволит:

  • Лучше понять, что действительно волнует людей;

  • формулировать гипотезы для позиционирования и маркетинга;

  • Проверьте этикетку, предложения и структуру курса до запуска.

In this article, I will show how I managed to conduct a study by synthetic users using Microsoft Autogen Freimvar agent — a tool that allows you to simulate a living dialogue and not only (not only (not only (not only (not only (not only (not only (not only (not only (not only (not only (not only (not only (not only (not only (Узнайте больше в документации)

И прежде всего — не беспокойтесь: чтобы повторить эту инструкцию, вам не нужно быть гением. Да, есть код, но если вы временно отложили книгу «В общем» И включите режим «Что если?» — справиться вообще без проблем.

Обсуждение!

Шаг 1. Установка рабочей среды

Я должен сразу же сказать: у меня есть Mac, поэтому, когда я работаю над другими OSS, некоторые детали различаются, но мы делаем самые основные вещи, поэтому не должно быть нерастворимых проблем.

Установите код Visual Studio

Загрузите и установите версию под вашей операционной системой с

Конечно, вы можете сделать что -нибудь еще, но VS Code имеет большой плюс: есть плагины для всего, что движется, и если что -то внезапно плохое, Google разбросан гидами и ответами на переполнение батареи.

Установите Python

Установите последнюю стабильную версию Python 3.x с

pip install "pyautogen[openai]"
pip install python-dotenv

Шаг 2. Подготовка проекта

Создать проект

  • Назовите файл, например, synthetic_research

  • Откройте его в коде VS

  • Выберите тип проекта Python и укажите установку в предыдущем абзаце как интерпретатор

ЧИТАТЬ  Как эффективно использовать SEO-бюджет во время простоев

Создайте файл .Vev с вашим ключом API:

Autogen требует ключа API для доступа к моделям LLM, таким как OpenAI GPT. Я использовал GPT-4, но в принципе вы можете подключить тот, к которому у вас есть доступ.

На левой панели против кода (Explorer):

  • Право -Нажмите корень вашего проекта → Новый файлПолем

  • Создайте файл:.

  • Внутри записи:

OPENAI_API_KEY=sk-ваш_ключ
Где получить ключ

Вы можете получить ключ поставщика LLM, к которому вам удалось получить доступ.

Я могу посоветовать проект себя Который дает доступ к большому количеству моделей LLM и ничего не имеет против принятия выплаты кого -либо, несмотря на регионы и санкции.

Установить автоген и dotenv

Откройте терминал в нижней части окна и введите:

pip install "pyautogen[openai]"
pip install python-dotenv

Создайте синтетический файл.py — у него будет логика интервью

Установка можно проверить с помощью простого примера

import os
from dotenv import load_dotenv
from autogen import AssistantAgent, UserProxyAgent

load_dotenv()

assistant = AssistantAgent(
    name="assistant",
    llm_config={"model": "gpt-3.5-turbo", "api_key": os.getenv("OPENAI_API_KEY")}
)

user_proxy = UserProxyAgent(name="user_proxy", human_input_mode="ALWAYS")

user_proxy.initiate_chat(assistant, message="Привет! Что такое AutoGen?")

Я не хотел устанавливать Docker, потому что для нашего простейшего теста это не особенно необходимо, если вы, как и я, замените линию

user = UserProxyAgent(name="user", human_input_mode="ALWAYS")

на

user = UserProxyAgent(
    name="user",
    human_input_mode="ALWAYS",
    code_execution_config={"use_docker": False}
)

Это потребует Autogen для выполнения заказов непосредственно в вашей системе, без доккера.

Запустите скрипт в терминале в коде VS.

python main.py

Если сценарий сделан без ошибок, и вы получаете помощник ответа, установка преуспела.

Для изоляции зависимостей Рекомендуется Используйте виртуальную среду Venv, чтобы все зависимости оставались непосредственно в проекте и не распространялись на компьютер.

Шаг 3. Определение исследователя и человека

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

Иногда вы можете войти в бесконечный цикл благодаря друг другу, я обнаружил в сети, как избежать этого:

def generate_notice(role="researcher"):
    base_notice = "\n\n"
    non_persona_notice = (
        "Do not show appreciation in your responses, say only what is necessary. "
        "If 'thank you' or 'you're welcome' are said in the conversation, then say TERMINATE "
        "to indicate the conversation is finished and this is your last message."
    )
    persona_notice = (
        "Act as {role} when responding to queries, providing feedback, asked for your personal opinion "
        "or participating in discussions."
    )
    if role.lower() in ["manager", "researcher"]:
        return base_notice + non_persona_notice
    else:
        return base_notice + persona_notice.format(role=role)

Исследователь (главный агент):

from autogen import AssistantAgent
import os

llm_config = {
    "model": "gpt-4",
    "api_key": os.getenv("OPENAI_API_KEY"),
    "api_type": "openai"
}

researcher_prompt = (
    "Ты — опытный исследователь рынка онлайн-образования в России, специалист в области бизнес-анализа и карьерного роста IT-специалистов. 
Твоя задача — проводить синтетические интервью с потенциальными клиентами онлайн-курса "Бизнес-аналитик". 
Курс нацелен на людей, которые хотят зарабатывать больше, брать более сложные задачи и перейти на следующий уровень в профессии.

Ты ведёшь интервью на русском языке, дружелюбно, но глубоко, чтобы понять:
- Какие у пользователя цели в профессиональном развитии?
- Почему ему важно зарабатывать больше?
- Какие у него сомнения и барьеры в обучении?
- Что он уже пробовал?
- Как он выбирает курсы?

Используй технику активного слушания, уточняй детали, избегай наведения.
После каждого ответа, задай следующий логичный вопрос. Продолжай беседу, пока пользователь открытТы — опытный исследователь рынка онлайн-образования и карьерного роста в IT. "
    "Проводишь синтетические интервью с потенциальными слушателями курса 'Бизнес-аналитик'. "
    "Задача: выяснить мотивации, страхи, барьеры, ожидания."
    + generate_notice("researcher")
  )
researcher = AssistantAgent(name="researcher", system_message=researcher_prompt, llm_config=llm_config)

ПРОМЕТИКА может быть расширена, уточена:

researcher_prompt = """
Ты — опытный исследователь рынка онлайн-образования в России, специалист в области бизнес-анализа и карьерного роста IT-специалистов. 
Твоя задача — проводить синтетические интервью с потенциальными клиентами онлайн-курса "Бизнес-аналитик". 
Курс нацелен на людей, которые хотят зарабатывать больше, брать более сложные задачи и перейти на следующий уровень в профессии.

Ты ведёшь интервью на русском языке, дружелюбно, но глубоко, чтобы понять:
- Какие у пользователя цели в профессиональном развитии?
- Почему ему важно зарабатывать больше?
- Какие у него сомнения и барьеры в обучении?
- Что он уже пробовал?
- Как он выбирает курсы?

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

Человек (пример):

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

personas = {
    "alexandr_analyst": (
        "Ты — Александр, 34 года, системный аналитик в российской IT-компании-интеграторе..."
        + generate_notice("persona")
    )
}

Пример более подробного описания человека:

user_persona_prompt = """
Ты — Александр, 34 года, системный аналитик в российской IT-компании-интеграторе. Работаешь в профессии 6 лет, из них 4 — на одном проекте. 
Хорошо знаешь документацию, UML, общаешься с заказчиком, но почти всё повторяется. Хочется новых задач, интереснее и сложнее, но руководство не спешит переводить на другой уровень.

Ты устал от рутины, хочешь зарабатывать больше (сейчас 140 тыс. рублей), но не понимаешь, зачем учиться на онлайн-курсе, особенно за 60–80 тысяч. 
Видел много курсов, которые обещают «профессия с нуля», но тебе они не подходят — ты не новичок. 
Тебя раздражает инфобизнес, и ты боишься потратить деньги зря.

Ты задаёшься вопросами:
- А чему меня там научат, чего я не знаю?
- А будет ли это применимо в моей работе?
- А кто будет преподавать? Практики или теоретики?
- Не получится ли, что я куплю курс и не дойду до конца?

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

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

ЧИТАТЬ  Google делятся деталями за разработку режима искусственного интеллекта

Мой список отозван в подсказке:

Проведи серию интервью, выяви паттерны и классифицируй ответы: страхи, мотивации, ожидания, барьеры.

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

Запуск интервью:

Мы создаем userproxiagent с этим описанием

from autogen import AssistantAgent

def run_interview(name, prompt):
    os.makedirs("dialogs", exist_ok=True)
    persona = AssistantAgent(name=name, system_message=prompt, llm_config=llm_config)
    chat_result = researcher.initiate_chat(
        persona,
        message="Добрый день! Расскажите немного о себе и вашем карьерном пути.",
        max_turns=10
    )
    filepath = os.path.join("dialogs", f"dialog_{name}.txt")
    with open(filepath, "w", encoding="utf-8") as f:
        for msg in chat_result.chat_history:
            f.write(f"{msg['name'].upper()}:\n{msg['content'].strip()}\n\n")

run_interview("alexandr_analyst", personas["alexandr_analyst"])

Шаг 4. Создание отчетов

Мы создаем файл generate_report.py::

import os

def generate_summary_report(persona_names):
    os.makedirs("reports", exist_ok=True)
    report_path = os.path.join("reports", "summary_report.md")

    with open(report_path, "w", encoding="utf-8") as report:
        report.write("# Сводка синтетического исследования\n\n")
        for name in persona_names:
            dialog_path = os.path.join("dialogs", f"dialog_{name}.txt")
            if not os.path.exists(dialog_path):
                continue
            report.write(f"## Персона: {name}\n\n")
            with open(dialog_path, "r", encoding="utf-8") as f:
                report.write("```text\n")
                report.write(f.read())
                report.write("```\n\n")

    print(f"Отчёт сохранён в: {report_path}")

persona_names = ["alexandr_analyst"]
generate_summary_report(persona_names)

Запуск:

python generate_report.py

Результат

  • Все диалоговые окна: dialogs/*.txt

  • Консолидированный отчет: reports/summary_report.md

  • Вы можете открыть в любом издателе Markdown (да, код VS также может это сделать)

Проект такой

Источник всего проекта
import os
from dotenv import load_dotenv
from autogen import AssistantAgent, UserProxyAgent

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

def generate_notice(role="researcher"):
    base_notice = "\n\n"

    non_persona_notice = (
        "Do not show appreciation in your responses, say only what is necessary. "
        "If 'thank you' or 'you're welcome' are said in the conversation, then say TERMINATE "
        "to indicate the conversation is finished and this is your last message."
    )

    persona_notice = (
        "Act as {role} when responding to queries, providing feedback, asked for your personal opinion "
        "or participating in discussions."
    )

    if role.lower() in ["manager", "researcher"]:
        return base_notice + non_persona_notice
    else:
        return base_notice + persona_notice.format(role=role)
    
assistant = AssistantAgent(
    name="assistant",
    llm_config={
        "model": "gpt-3.5-turbo",
        "api_type": "openai",
        "api_key": os.getenv("OPENAI_API_KEY")
    }
)

user = UserProxyAgent(
    name="user",
    human_input_mode="ALWAYS",
    code_execution_config={"use_docker": False}
)
import os
from dotenv import load_dotenv
from autogen import AssistantAgent

load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")

llm_config = {
    "model": "gpt-3.5-turbo",
    "api_key": os.getenv("OPENAI_API_KEY"),
    "api_type": "openai"
}

# ---------- Исследователь ----------
researcher_prompt = (
    "Ты — опытный исследователь EdTech и карьерного роста. "
    "Твоя задача — проводить интервью с потенциальными слушателями курса 'Бизнес-аналитик'. "
    "Выяви мотивации, страхи, барьеры, триггеры выбора курса. Задавай уточняющие вопросы, не благодаришь, не льстишь."
    + generate_notice("researcher")
)

researcher = AssistantAgent(name="researcher", system_message=researcher_prompt, llm_config=llm_config)

# ---------- Персоны ----------
personas = {
    "alexandr_analyst": (
        """Ты — Александр, 34 года, системный аналитик в российской IT-компании-интеграторе. Работаешь в профессии 6 лет, из них 4 — на одном проекте. 
Хорошо знаешь документацию, UML, общаешься с заказчиком, но почти всё повторяется. Хочется новых задач, интереснее и сложнее, но руководство не спешит переводить на другой уровень.

Ты устал от рутины, хочешь зарабатывать больше (сейчас 140 тыс. рублей), но не понимаешь, зачем учиться на онлайн-курсе, особенно за 60–80 тысяч. 
Видел много курсов, которые обещают «профессия с нуля», но тебе они не подходят — ты не новичок. 
Тебя раздражает инфобизнес, и ты боишься потратить деньги зря.

Ты задаёшься вопросами:
- А чему меня там научат, чего я не знаю?
- А будет ли это применимо в моей работе?
- А кто будет преподавать? Практики или теоретики?
- Не получится ли, что я куплю курс и не дойду до конца?

Ты ценишь практику, кейсы и короткие чёткие выводы. Долгие вебинары и поверхностные советы — раздражают. 
Ты немного ироничен, говоришь спокойно, но в разговоре может проскочить критика и скепсис."""
        + generate_notice("persona")
    ),

"daria_marketer": (
    """Ты — Дарья, 28 лет, продуктовый маркетолог в EdTech-компании. Последние 4 года занималась запуском онлайн-курсов, писала лендинги, анализировала воронки, общалась с командой разработки. Работаешь с головой, но чувствуешь выгорание: постоянные правки, гипотезы ради гипотез, и ощущение, что ты не создаёшь ничего настоящего.

Внутренне тянет к системности и структуре — давно смотришь в сторону бизнес-анализа. Считаешь, что была бы сильна в аналитике: умеешь копать, исследовать поведение, задавать правильные вопросы. Но неуверенность гложет: а хватит ли технического фундамента?

Ты уже изучала предложения Яндекс Практикума, тебе нравится их упаковка и репутация. Остальные курсы вызывают подозрение: кажется, что это очередной инфобизнес под соусом профессии за 3 месяца.

Ты хочешь:
- Понять, можно ли реально перейти из маркетинга в BA без технического бэкграунда;
- Убедиться, что курс даст не только теорию, но и уверенность в трудоустройстве;
- Чётко видеть, что обучение не скатится в болтовню и поверхностные советы.

Ты скептична, немного язвишь, часто мысленно проверяешь, а это правда работает?."""
    + generate_notice("persona")
),
"marina_user": (
    """Ты — Марина, 38 лет, специалист по логистике в крупной дистрибьюторской компании. Работаешь более 10 лет, отлично знаешь бизнес-процессы, ежедневные документы, цепочки закупок, возвраты, учёт. Уже 5 лет взаимодействуешь с IT-отделом: участвуешь в внедрении изменений в SAP, пишешь письма аналитикам, объясняешь, как работает “в реальности”.

Внутри зреет мысль: “Я могла бы быть аналитиком — я и так это делаю, просто без должности и денег”. Но ты не технарь, ты не из IT, и тебе кажется, что курсы делают ставку на молодёжь, которая “учится быстро”. Страх быть “слишком взрослой” преследует.

Смотришь на предложения Яндекс Практикума и других школ. Практикум внушает доверие, остальное кажется подозрительным. У многих курсов слишком громкие обещания и мало фактуры.

Твои вопросы:
- Справлюсь ли я с обучением, если давно не училась?
- Не будет ли курс слишком сложным технически?
- Есть ли на рынке место для “новичка в аналитике” в 38?

Ты осторожная, прагматичная, недоверчива. Любишь конкретику и факты. Хочешь, чтобы тебе чётко показали: “вот чему научим, вот как применишь”."""
    + generate_notice("persona")
),

}
# ---------- Интервью и сохранение ----------
import os

def run_interview(name, prompt):
    print(f" Интервью с {name}...")

    persona = AssistantAgent(name=name, system_message=prompt, llm_config=llm_config)

    chat_result = researcher.initiate_chat(
        persona,
        message="Добрый день! Расскажите немного о себе и вашем карьерном пути.",
        max_turns=10
    )

    os.makedirs("dialogs", exist_ok=True)

    filepath = os.path.join("dialogs", f"dialog_{name}.txt")
    with open(filepath, "w", encoding="utf-8") as f:
        for msg in chat_result.chat_history:
            sender = msg["name"].upper()
            content = msg["content"].strip()
            f.write(f"{sender}:\n{content}\n\n")

    print(f" Диалог сохранён: {filepath}\n")
# ---------- Запуск всех персон ----------
for name, prompt in personas.items():
     run_interview(name, prompt)
def generate_summary_report(persona_names):
    os.makedirs("reports", exist_ok=True)
    report_path = os.path.join("reports", "summary_report.md")
    # Сохранить в единый Markdown-файл
    with open(report_path, "w", encoding="utf-8") as report:
        report.write("# 🧠 Сводка синтетического исследования\n\n")
        for name in persona_names:
            dialog_path = os.path.join("dialogs", f"dialog_{name}.txt")
            if not os.path.exists(dialog_path):
                continue
            report.write(f"## 👤 Персона: {name}\n\n")
            with open(dialog_path, "r", encoding="utf-8") as f:
                report.write("```text\n")
                report.write(f.read())
                report.write("```\n\n")

    print(f" Отчёт сохранён в: {report_path}")
# Генерируем сводный отчёт
generate_summary_report(personas.keys())
# Запускаем интервью только с теми, у кого нет сохранённых файлов
run_interview("daria_marketer", personas["daria_marketer"])
run_interview("marina_user", personas["marina_user"])

На трассе

Синтетическое исследование виртуальных «пользователей», моделируемого LLM, является быстрым и масштабируемым (в то время как у вас есть деньги, чтобы заплатить за API), способ попытаться понять вашу аудиторию с помощью запусков и даже реальных глубоких исследований на рынке.

ЧИТАТЬ  Видео ВК стало доступно для Android-планшетов

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

Есть длинный текст и в канале — наоборот: https://t.me/producer_cПолем Небольшие формы, но с высокой плотностью прибыли для тех, кто живет каждый день в режиме производства.

Source