Научим AI краснеть: автоматизация в Adult индустрии

в 11:21, , рубрики: llm-модели

Как известно, интернет был придуман чтобы было куда скидывать фотки ню, и действительно adult media индустрия это хороший индикатор развития какой либо технологии. А что же с ИИ? Использование ИИ в колл-центрах и пользовательской поддержке уже стало обычным делом. Но что, если вы хотите применить его в более специализированной отрасли, например, для создания NSFW-чатботов или автоматизации на платформах вроде OnlyFans или для симуляторов дейтинга?

Нас уже не раз просили помочь в разработке приложений симуляторов, способных в том числе и общаться с пользователем на взрослые темы через голос и текст. Мы обычно разрабатываем чатботов и ассистентов в корпоративном секторе, однако на первый взгляд эта задача не сильно отличается от создания очередного чатбота для отдела продаж. Тем не менее, всё не так просто, как кажется.

Большинство ИИ-моделей довольно зацензурены. Облачные сервисы, такие как OpenAI или даже более расслабленный DeepSeek, прекращают любые попытки вести откровенные разговоры быстрее, чем любое приложение родительского контроля. Конечно, можно попробовать взломать (jailbreak) модель, но это всё равно что научить монахиню ругаться матом. Джейлбрейк — это нестабильное решение, и даже если он удается, сгенерированный контент обычно получается плоским как камбала. Ожидаемо, ведь модели изначально не обучены на подобные вещи, а скорее даже наоборот - обучены их избегать.

Следовательно, главная задача — найти или обучить подходящую нецензурированную модель, способную связно обсуждать взрослые темы на нужном языке. Последняя часть особенно важна, так как большинство SOTA моделей созданы либо в США, либо в Китае и хорошо работают с соответствующими языками, но дают слабый результат при попытке говорить, например, по-испански или по-русски.

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

Но хватит теории — давайте попробуем собрать прототип такого бота.

Прежде всего, нам нужна модель. Существует несколько вариантов, но реалистично мы рассматриваем двух основных кандидатов:

  • Семейство моделей Magnum. Это нецензурированные модели с открытым исходным кодом (Qwen или LLama в зависимости от версии), обученные для ролевых игр и не специально для взрослого контента, но они довольно хорошо справляются и с этим. Существует несколько версий, вплоть до 72 млрд параметров — это лучшая модель, и именно её, вероятно, стоит использовать. 72-миллиардная модель требует мощных GPU, поэтому лучше использовать 8-битную квантизированную версию как минимум с двумя A100, чтобы добиться пропускной способности 10–15 токенов в секунду, иначе бот будет генерировать ответы очень медленно. Можно взять модель поменьше, 30 милилардов и меньше, однако качество генерации на русском языке падает довольно сильно, и придется смириться с регулярными "Я твой дом труба шатал".

  • DeepSex — версия от DeepSeek, специально обученная на взрослом контенте. Она меньше, чем Magnum (всего 14 млрд параметров), поэтому работает гораздо быстрее, и при использовании квантизированной версии её можно запустить даже на одном A100 или чём-то попроще. Однако у неё есть особенности: она хорошо работает с некоторыми языками, например, китайским, но может испытывать трудности с другими — обязательно протестируйте перед выбором.

Разместить модель можно где угодно, но для теста я рекомендую runpod — бюджетный «Airbnb» для аренды GPU. Аренда сервера с двумя A100 PCI обойдётся примерно в 5 долларов в час, что намного дешевле, чем AWS или Azure, и там есть большой выбор GPU.

На runpod вы можете использовать шаблон или ollama для размещения модели. Для производных от DeepSeek сейчас нет хорошего готового шаблона, поэтому просто берите шаблон PyTorch и разворачивайте ollama.

Озвучка для бота

Текст — это хорошо, но именно голос придает «волшебство» в общении. Нужна модель TTS (Text-to-Speech), которая сможет превратить «Hello, human» в «Hello, human» с лёгким поднятием бровей.

Для расшифровки речи наиболее очевидным выбором будет Whisper. К сожалению, Google Colab не предоставляет из коробки полноценного доступа к микрофону. Коллаб-кernel (Python) выполняется на удалённом сервере, поэтому Colab по умолчанию не может напрямую слушать локальный микрофон. Поэтому особо на этом не останавливаюсь.

Куда интереснее — это синтез речи. Можно воспользоваться Amazon или Azure, но, честно говоря, для языков, кроме английского, их варианты далеко не идеальны, а в случае взрослого контента очень важны интонация и тембр голоса. Для английского сейчас доступно множество опенсорс-решений. Лично я считаю, что лучшее качество для большинства языков — у ElevenLabs, и именно её мы и будем использовать, хотя она недешёвая.

Итак, у нас получается такая комбинация. Теперь создадим простой демо-проект в Google Colab, чтобы всё это проверить. Сначала посмотрим, что модель, развернутая на runpod, может сгенерировать. Мы будем использовать Magnum v1 на 72 млрд параметров, основанный на Qwen с 8-битной квантизацией, запущенный через шаблон oobabooga. Его API полностью совместимо с форматом chat completion от OpenAI:

!pip install requests
import requests
import io

RUNPOD_ENDPOINT = "https://YOUR_SERVER.proxy.runpod.net/v1/chat/completions"

def get_bot_response(user_input):
    headers = {
        'Content-Type': 'application/json',
    }

    data = {
      "messages": [
        {
          "role": "user",
          "content": user_input
        }
      ],
      "mode": "chat",
      "model": "Qwen/Qwen2-72B-Instruct"
    }

    response = requests.post(RUNPOD_ENDPOINT, headers=headers, json=data)
    response_json = response.json()
    bot_message = response_json['choices'][0]['message']['content']
    return bot_message

user_input = "Hi, how are you doing?"
bot_response = get_bot_response(user_input)
print("Bot:", bot_response)

Убедившись, что бот отвечает связно, стоит проверить, не ломается ли он при вопросах на взрослую тематику.

Теперь добавим озвучку:

!pip install elevenlabs IPython
from elevenlabs import ElevenLabs
from IPython.display import Audio, display

ELEVENLABS_API_KEY = "sk_KEY"

client = ElevenLabs(api_key=ELEVENLABS_API_KEY)

def text_to_speech(text):
    from elevenlabs import VoiceSettings
    response = client.text_to_speech.convert_as_stream(
        voice_id="21m00Tcm4TlvDq8ikWAM",
        output_format="mp3_22050_32",
        text=text,
        model_id="eleven_turbo_v2_5",  # используем turbo-модель для снижения задержки

        voice_settings=VoiceSettings(
            stability=0.0,
            similarity_boost=1.0,
            style=0.0,
            use_speaker_boost=True,
        ),
    )

    return response

n = 0
def play_audio(audio):
    global n
    n += 1
    filename = f"bot_reply {n}.mp3"
    with open(filename, "wb") as f:
        for chunk in audio:
            if chunk:
                f.write(chunk)
    display(Audio(filename, autoplay=True))


user_input = "Привет, как дела"
bot_response = get_bot_response(user_input)
audio = text_to_speech(bot_response)
play_audio(audio)

Ответы будут сохраняться в виде MP3-файлов, так что вы сможете оценить качество и скорость.

Чтобы всё работало оптимально, лучше не ждать, пока LLM сгенерирует весь ответ целиком, а затем полностью передавать его в TTS. Лучше использовать потоковую передачу (streaming), чтобы значительно сократить время ожидания для пользователя. И, конечно, завернуть всё это в удобный интерфейс.

Сделаем что-то вроде чата:

def chat_loop():
    print("NSFW ChatBot Activated! Type 'exit' to escape!n")
    while True:
        user_input = input("You: ")
        if user_input.lower() in ["quit", "exit"]:
            print("Goodbye!")
            break

        bot_response = get_bot_response(user_input)
        print("Bot:", bot_response)
        audio = text_to_speech(bot_response)
        play_audio(audio)

# Запуск чата
chat_loop()

Результаты генерации весьма неплохие, особенно если задать системный промпт в стиле: «You are [BOT_NAME], an enthusiastic and charismatic conversational partner. Your purpose is to create engaging, flirty, and imaginative interactions.»

Вот и всё — этого уже достаточно, чтобы начать эксперименты и построить что-нибудь более сложное.

Ссылка на collab: https://colab.research.google.com/drive/1rAlXhRLzkUp3AskuxuOB7kAIr2wXmfIP?usp=sharing


Пишете ваши вопросы в комментариях.

Всем добра!

Автор: Squirrelfm

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js