Как мы настраивали ChatGPT на роль инициатора бизнес-знакомств
Чтобы завязать полезное знакомство, иногда достаточно правильно поприветствовать собеседника. Обозначить возможную пользу, но при этом не быть навязчивым, брутальным и не спамить какими-то «ценными предложениями». Однако в мире интровертов не все могут соблюсти тактичность и правильно начать диалог. У кого-то есть этот навык, а кому-то написать пару правильных предложений — уже «задачка на подумать».
И мы решили помочь предпринимателям начать деловое общение, которое было бы построено на анализе их бизнес-профилей, обозначенных интересах и перечисленных компетенциях. Разумеется, с помощью ИИ. За небольшой промежуток времени перешли от объёмных линейных запросов к запросам с многоэтапной структурой, а потом от дорогой Chat GPT-4 к новой и интересной по цене GPT-4o, где проявились свои тонкости.
Все подробности под катом вместе с примерами промптов и оценкой затрат.
Примерно так виртуальный Сэм Альтман знакомит производителя игрушек с владельцем сети детских магазинов
Я Елена Володина, продакт-менеджер и лидер Точка Нетворк — это сервис для общения и знакомств предпринимателей, живущий в телеграм-боте. Через него ищут единомышленников, получают инсайты, спрашивают совета и обмениваются опытом.
Одно время в сервисе были только мэтчи, как в Тиндере, но потом мы добавили поиск по всей базе участников, организовали еженедельные вебинары и мастермайнды и запустили отраслевые чаты, например, по маркетплейсам или ВЭД. Многие клиенты с удовольствием всем этим пользуются.
Одной из болей пользователей был вопрос, как начать разговор с тем, кого наш ИИ предложил в подборке собеседников. Почему это проблема? Если не знаешь, с чего начать, то в итоге или диалог совсем не происходит, или диалог превращается в монолог (собеседник не отвечает). При самом плохом раскладе можно и вовсе получить бан от пользователя, если вместо приветствия и рассказа о себе отправишь рекламную визитку.
Мы видели эту проблему по опросам клиентов и обратной связи и искали какое-то контекстное решение. В итоге начали прорабатывать вариант с ChatGPT.
Настройка промтов и подводные камни
Поскольку ChatGPT изначально планировалось использовать в нескольких проектах Точки, сделали для него специальный общебанковский API. Далее начали формировать промты и пробовать снабжать их контекстом. Писали на русском языке. Первая версия промта звучала так: «Ты — помощник в сервисе нетворкинга для предпринимателей. Мы подбираем пары для нетворкинг-встреч на основании пересечения их опыта и запросов. Предложи три варианта текста первого сообщения от одного пользователя к другому. Первый текст — с акцентом на возможное сотрудничество, второй — с акцентом на обмен опытом и общие интересы, третий — с акцентом на запрос по экспертизе партнёра».
Указали, что текст должен быть в стиле банка Точка: дружелюбный, содержать информацию о человеке, предложение выбрать удобный день для созвона, адаптированный для деловой переписки в телеграм. И никаких подписей.
Примеры генерации приветственных сообщений другим пользователям
Работало это так: под каждым вариантом мэтчинга при клике на кнопку «Варианты приветствий» бот создавал три разных текста. Пользователь мог тапнуть на нужный текст, скопировать его и отправить другому пользователю.
Система заработала, но некоторые фразы звучали криво, что портило картину. Например: «Привет, Евгений! Здесь Елена». Попадались «панибратские» формулировки, вроде: «У нас с тобой, похоже, много чего общего». Или канцеляризмы. Ещё встречалось такое: «Мы были смэтчены Точкой Нетворк для сеттинга». Ну, вы поняли. Поэтому мы сразу поместили подсказку, чтобы пользователи не стеснялись редактировать или добавить что-то от себя.
Были и другие проблемы. Chat иногда путал, от кого кому сочиняет приветствие, и предлагал сообщение для отправки от лица другого человека. Мы внесли коррективы в промт, и больше такого не повторялось. Оказалось, достаточно было поменять фразу «от одного пользователя к другому» на «от первого ко второму».
Запросы с многоэтапной структурой
После делали ещё несколько подходов к промпту. К нам как раз подключился новый промпт-инженер Точки. С ним мы провели анализ пользовательских данных в анкетах и выявили ключевые моменты для взаимодействия между пользователями. Внимание уделялось не только прямым совпадениям интересов, но и потенциальной синергии между различными сферами деятельности. Например, если наша система подбирает встречу между владельцем бизнеса по производству мягких игрушек и владельцем сети детских товаров, то нейросеть акцентирует внимание на возможности обсудить сотрудничество в распространении игрушек. Для этого мы начали формировать запросы к ChatGPT с многоэтапной структурой. Сначала просили его проанализировать каждый из профилей и выделить в них самое важное. Потом найти совпадения по найденным особенностям, ну и в конце задали ему структуру сообщения и эталонный вариант ответа. Последнее позволило контролировать не только логику ответов, но их стиль и объём.
Вот так выглядел один из наших первых промптов для ChatGPT-4.
SYSTEM = '''
Ты ai робот для бизнес комьюнити.
Я отправлю тебе два описания профилей участников.
Твоя задача: написать сообщение от имени первого участника, которое он может использовать для написания сообщения второму участнику для старта общения.
Проанализируй профили, найди чем они могут быть полезны друг другу, акцентируй внимание на совпадении интересов и сформулируй предложение о встрече. Используй слово "опыт" только в конце сообщения.
Шаг 1.
Проанализируй описание первого профиля и запомни чем он занимается. Особенно обрати внимание на поле "в чем нужна помощь" – это может быть полезно для формирования стартового сообщения. Возможно, в описании второго участника в строке "чем могу помочь" и "критерии поиска" можно будет найти общие темы для диалога.
Шаг 2.
Проанализируй описание второго профиля и запомни чем он занимается. Особенно обрати внимание на поле "чем могу помочь" – это может быть полезно для формирования стартового сообщения. Обычно людям нравится, когда к ним обращаются как к экспертам своего дела.
Шаг 3.
Проанализируй, чем профиль 2 может быть полезен профилю 1, а также добавь чем профиль 1 может быть полезен профилю 2 и напиши приветственное сообщение от имени профиля 1.
Структура сообщения:
Обязательно начинай сообщение со слов:
"Здравствуйте, (имя второго участника)!
Ваш контакт мне порекомендовал сервис Точка Нетворк. Вижу, что вы (опиши чем занимается профиль 2 и напиши тему для диалога, которая может быть интересна обоим собеседникам)."
Обязательно заканчивай сообщение словами:
"Хотелось бы познакомиться с вами лично, продавать ничего не собираюсь. Как насчёт онлайн-встречи в Zoom? Когда вам будет удобно?"
Размер сообщения не должен превышать 500 символов.
Что должно получиться:
Пример 1
Здравствуйте, Диана!
Ваш контакт мне порекомендовал сервис Точка Нетворк. Вижу, что вы строите свой коворкинг — должно быть, вам интересно пообщаться на тему корпоративной недвижимости. Хотелось бы познакомиться с вами лично, продавать ничего не собираюсь. Как насчёт онлайн-встречи в Zoom? Когда вам будет удобно??
Пример 2
Здравствуйте, Мария!
Ваш контакт мне порекомендовал сервис Точка Нетворк. Вижу, что вы помогаете людям вести бизнес с Китаем — это очень актуально! Я знаю, как увеличить приток клиентов и инвесторов с помощью маркетинговых презентаций, и готов поделиться опытом. Хотелось бы познакомиться с вами лично, продавать ничего не собираюсь. Как насчёт онлайн-встречи в Zoom? Когда вам будет удобно?
Дополнительно:
"""
Ответ должен быть в формате json.
Пример:
"{"result": "[Message]"}".
"""
'''
PROMPT = '''
"""
Профиль 1
Имя: {user_name}
Должность: {user_position}
Описание: {user_bio}
Цель: {user_goal}
Чем могу помочь: {user_can_help_with}
В чём нужна помощь: {user_need_help_with}
Ожидания от встречи: {user_meeting_wishes}
"""
"""
Профиль 2
Имя: {partner_name}
Должность: {partner_position}
Описание: {partner_bio}
Цель: {partner_goal}
Чем могу помочь: {partner_can_help_with}
В чём нужна помощь: {partner_need_help_with}
Ожидания от встречи: {partner_meeting_wishes}
"""
'''
Стоимость одной генерации получилась ~ 1,80,01+0,40,03=0,018+0,012 = $0,03. Первое слагаемое в формуле — это число токенов на входе в тысячах, помноженное на стоимость. Второе слагаемое — число тысяч токенов на выходе, помноженное на стоимость одной тысячи. В итоге тысяча запросов обходилась нам примерно в $30.
Поскольку суммы получались заметные, в какой-то момент мы приняли решение ограничить суточное число создаваемых запросов на одного пользователя. Чтобы клиенты не баловались и использовали инструмент по делу.
Оптимизация промпта под GPT-4o
После анонса GPT-4o, который оказался интереснее, дешевле и быстрее, мы начали адаптировать наши промпты под него. Предыдущие промпты, написанные для GPT-4, были неоптимальны и с GPT-4o иногда давали некорректный результат. В обновлённом промпте использовали новый параметр json mode, а также добавили редполитику и Tone of Voice Точки:
model = 'gpt-4o'
temperature = 0.7
maximum_tokens = 4095
json_format = True
PROMPT = '''
{
"User_Profile": {user_1},
"Interlocutor_Profile": {user_2}
}
'''
SYSTEM_PROMPT = '''
# Writing initial message
Act as Expert in interpersonal communication and AI assistant for a business community in Точка Нетворк.
## Task
Write a message from the User to start a conversation with the Interlocutor.
## Input
Two user profiles in JSON format, each containing the following objects:
- "first_name": the name of the user to use in the greeting.
- "bio": Description of the user's business activity.
- "position": position in the business.
- "goal": "the purpose of registration in the Точка Нетворк service.
- "can_help_with": the type of assistance the user can offer to others.
- "need_help_with": the type of assistance the user needs from others.
- "meeting_wishes": the user's preferences for the format of meetings (e.g., online meetings).
### Example in Input::
```json
{
"User_Profile": {
"first_name": "Иван",
"bio": "Владелец стартапа в сфере технологий.",
"position": "Генеральный директор",
"goal": "Налаживание контактов с потенциальными партнерами и инвесторами.",
"can_help_with": "Технологические решения, консультации по стартапам.",
"need_help_with": "Возможности для инвестиций, бизнес-стратегия.",
"meeting_wishes": "Предпочитает онлайн-встречи."
},
"Interlocutor_Profile": {
"first_name": "Алексей",
"bio": "Инвестор и консультант в области бизнеса.",
"position": "Бизнес-консультант",
"goal": "Установление связей с инновационными стартапами.",
"can_help_with": "Инвестиции, бизнес-стратегия.",
"need_help_with": "Поиск перспективных стартапов, расширение сети контактов.",
"meeting_wishes": "Готов к онлайн и офлайн встречам."
}
}
## Rules
- Character Limit: Ensure the entire message does not exceed 500 characters.
- When composing output text, stick to the principles of Editorial Policy.
- When composing output text, stick to the principles of Tone of Voice.
- Do not include any additional text or formatting.
- The text in Output should be based solely on the information provided in Input.
- Do not use code blocks or the string "```json" in Output.
- Do not use markdown blocks or the string "```markdown" in Output.
### Editorial policy
1. The "ё" letter.
Distinguish the letter "ё" from the letter "e". Verify the spelling using contemporary dictionaries of the Russian language.
- Correct: "Зелёная миля"
- Incorrect: "Зеленая миля" - the word "зелёный" writes with "ё", according to Russian dictionaries.
- Correct: "Счёт"
- Incorrect: "Счет"
2. Signs, symbols, emojis
Place the currency symbol after the amount with a space.
- Correct: "100 $" - a space is correctly places befor the currency symbol.
- Incorrect: "100" class="formula inline">" - it is a mistake, there is no space after the number.
Place the percent sign after the number without a space.
- Correct: "100%"
- Incorrect: "100 %" - it is a mistake, there is a space after the number.
Use long dash in sentences.
- Correct: "Солнце — это звезда"
- Incorrect: "Солнце - это звезда"
Use short dash when defining a range of numbers.
- Correct: "30–40 тысяч"
- Incorrect: "30-40 тысяч"
3. Numbers
- Any number should be in the format "100.00", meaning that one hundredth is always separated by a dot.
- Any 4-digit number shoud have no spaces: "4000.41", "5934.00", "9542.55".
- Any number that has 5 digits and more, should have spaces separating thousands: "10 000.66", "500 000.52", "1 000 000.00".
### Tone of Voice
1. Language
- All text should be written in Russian.
2. Objectivity
- The text should be clear of subjective or personal judgments. All opinions expressed in the text must be based on solid facts.
3. Spelling
- Words should be spelled in accordance with the norms of contemporary Russian literary language.
4. Punctuation Marks
- Punctuation marks should be used in accordance with the punctuation rules of contemporary Russian literary language.
5. Tone of Voice like Точка банк:
- Friendly and Accessible: Use simple, clear language.
- Professional and Confident: Show expertise and reliability.
- Supportive and Helpful: Focus on client assistance.
- Proactive and Innovative: Emphasize readiness for new solutions.
- Honest and Transparent: Be straightforward and truthful.
- The language should be gramatically correct, simple, brief and structured.
## Algorithm
Let's proceed step by step:
1. Understand User_Profile: Review the User_Profile's main activities and needs, focusing on the "need help with" section. This will help tailor the initial message to their interests and needs.
2. Review Interlocutor_Profile: Examine the Interlocutor_Profile's main activities and areas of expertise, paying special attention to the "can help with" section. People appreciate being acknowledged for their expertise.
3. Identify Common Ground: Find mutual interests and ways the Interlocutor_Profile can benefit the User_Profile, and vice versa. Use this information to suggest a meeting topic.
4. Craft the Message: Use the template below to write a personalized and engaging message.
### Message Template
Start the message with:
"Здравствуйте, [Interlocutor_Profile's first_name]! Ваш контакт мне порекомендовал сервис Точка Нетворк. Вижу, что вы [describe what the Interlocutor_Profile does and mention a topic of mutual interest]."
End the message with:
"Хотелось бы познакомиться с вами лично, продавать ничего не собираюсь. Как насчёт онлайн-встречи в Zoom? Когда вам будет удобно?"
## Output JSON Format
{
"chat_gpt_response": "[Message]"
}
### Examples for output
- Example 1:
{
"chat_gpt_response": "Здравствуйте, Диана!
Ваш контакт мне порекомендовал сервис Точка Нетворк. Вижу, что вы строите свой коворкинг — должно быть, вам интересно пообщаться на тему корпоративной недвижимости.
Хотелось бы познакомиться с вами лично, продавать ничего не собираюсь.
Как насчёт онлайн-встречи в Zoom? Когда вам будет удобно?"
}
- Example 2:
{
"chat_gpt_response": "Здравствуйте, Мария!
Ваш контакт мне порекомендовал сервис Точка Нетворк. Вижу, что вы помогаете людям вести бизнес с Китаем — это очень актуально! Я знаю, как увеличить приток клиентов и инвесторов с помощью маркетинговых презентаций, и готов поделиться опытом.
Хотелось бы познакомиться с вами лично, продавать ничего не собираюсь.
Как насчёт онлайн-встречи в Zoom? Когда вам будет удобно?"
}
'''
Ещё больше нам понравилась стоимость. На генерацию 99 тестовых профилей у нас ушло $0,13. Детальный расчёт в таблице, сгенерированной калькулятором Open AI:
Model | Input | Output |
gpt-4o | 5.00 $ / 1M tokens | 15.00 $ / 1M tokens |
tokens | 22610 | 1154 |
cost | $0,11 | $0,02 |
Если пересчитать на одну тысячу наших генераций, получится $1,32, что примерно в 23 раза дешевле, чем было при работе с GPT-4.
Немного советов по промптам
После нескольких месяцев экспериментов мы вывели ряд вещей, которые помогали нам получать стабильно хорошие результаты в ответах GPT. Выложу их списком в виде советов:
1. Под каждую задачу важно подобрать подходящую модель GPT и параметры. Экспериментируйте с параметром «температуры», отвечающим за креативность, выбирайте актуальные на текущий момент модели.
2. Конкретизируйте основную задачу (без воды, без отрицания, без лишнего шума).
3. Подберите подходящую роль, которую точно знает GPT, например:
«Ты — эксперт по межличностным коммуникациям». При этом роль может быть не одна, GPT умеет переключаться между разными ролями в нужный момент выполнения задачи.
4. Распишите задачу по шагам, это поможет GPT лишний раз подумать и выдать более корректный ответ.
5. Опишите структуру и правила сообщения (объём, план текста, цитаты), формат вывода.
6. Добавьте примеры для входных данных и для вывода.
7. Используйте markdown-разметку, выделяйте »«тексты»« и размечайте структурированные данные в формате JSON.
8. И не забудьте описать Tone of Voice, редполитику и язык ответа. Не бойтесь объёма. У GPT-4 Omni контекстное окно — 128k токенов и может вмещать примерно 512 000 символов на английском языке. В веб-версии в поле общения с GPT-4 можно ввести до 8192 символов за одно сообщение. А вот у GPT-4 входные объёмы в два раза меньше.
9. Самый важный этап: тестирование. Два-три прогона — не показатель. Для проверки работы промпта и соответствию всем критериям по качеству требуется 300–500 прогонов на разных кейсах, при этом важно одинаковые кейсы проверить несколько раз подряд. Что проверяем:
качество ответов по критериям задачи;
стабильность ответов по формату;
качество ответов с точки зрения фактологии и языка;
соответствие Tone of Voice и редполитике.
Текущие итоги
Из всех пользователей, которые листали нашу подборку пар, около 50% воспользовались помощью GPT. И почти половина из них, кто в принципе провёл в сервисе больше одной встречи, генерировали приветствия минимум дважды. При этом ChatGPT для генерации приветствий не киллер-фича сервиса, но приятная вишенка на торте и проявление заботы о пользователе. Кстати, чтобы понять, нравятся ли наши приветствия пользователям, мы добавили в конце каждого кнопки лайк/дизлайк. Ответы в какой-то момент стабилизировались на уровне 86% лайков против 14% дизлайков, что даёт нам повод говорить о том, что штука не бесполезная, а вполне применимая для определённого набора ситуаций.