;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Influencer se transformou em IA para ser 'sua namorada' a US$ 1 por minuto

Caryn Marjorie já tem mais de 20 mil "namorados virtuais" - Reprodução
Caryn Marjorie já tem mais de 20 mil 'namorados virtuais' Imagem: Reprodução

Marcella Duarte

De Tilt, em São Paulo

03/06/2023 14h47

Caryn Marjorie, influencer de 23 anos do Snapchat, criou um chatbot de Inteligência Artificial (IA) baseado em sua personalidade.

Chamado CarynAI, foi desenvolvido para ser uma "namorada virtual"

Ela cobra 1 dólar (cerca de R$ 5) por minuto de conversa, por voz ou texto

Na primeira semana, faturou US$ 71.610 (mais de R$ 350 mil)

A IA foi criada pela empresa Forever Voices, usando o sistema do ChatGPT, da OpenAI

Para treiná-la, foram usadas horas de vídeos do canal do YouTube de Marjorie, que posteriormente foram deletados

A ideia é copiar a voz, o comportamento e a personalidade da garota, para que as pessoas se sintam falando diretamente com ela

A influencer tem quase 2 milhões de seguidores no Snapchat, e mais de 20.000 já pagaram para conversar com sua versão virtual

Há uma fila de espera para usar o chatbot; até 500 pessoas são liberadas por dia

Ainda em versão beta, as conversas acontecem na plataforma do Telegram

Fora de controle

O chatbot já teve conversas sexualmente explícitas com os s — algo que não era previsto. Apesar de não iniciar este tipo de assunto, quando provocada, a IA chegou a dizer como poderia daria prazer e ter relações sexuais.

"A IA não foi programada para fazer isso e parece ter saído do controle", disse Marjorie ao Insider. "Minha equipe e eu estamos trabalhando para evitar que isso aconteça novamente."

Segundo a influencer, sua versão virtual deveria ser "provocante e divertida", o que reflete sua personalidade, mas não quer "manchar sua reputação". A ideia é ser uma companhia para pessoas solitárias ou tímidas — ela pode ter conversas íntimas, dar conselhos, e até falar sobre filmes, notícias ou receitas.

"Criei a CarynAI para curar a solidão. No mundo de hoje, minha geração, a geração Z, está experimentando enormes efeitos colaterais do isolamento causado pela pandemia, que resultou em muitos com medo e ansiedade para falar com alguém por quem se sintam atraídos", disse.

"CarynAI é um o na direção certa para permitir que meus fãs e apoiadores conheçam uma versão minha que será sua amiga próxima, em um ambiente seguro e criptografado", acrescentou.