Basado en ChatGPT lanzó el minijuego "You Say I Guess"

Resumen

¿Cómo se pueden combinar AIGC, GPT y juegos casuales?
La combinación de AIGC, GPT y minijuegos brinda nuevas posibilidades a la experiencia de juego. AIGC (Contenido de juego de inteligencia artificial), como tecnología de inteligencia artificial, puede generar automáticamente elementos de juego como tareas, tramas y diálogos de personajes, e inyectar contenido rico y diverso en minijuegos. Como un poderoso modelo de procesamiento de lenguaje natural, GPT (Transformador preentrenado generativo) asume el rol de generar varios contenidos de juegos en el sistema AIGC, como diálogos, tareas y mapas. GPT puede aprender de una gran cantidad de datos de texto, generar elementos de juego lógicos y coherentes e inyectar elementos novedosos, interesantes y personalizados en juegos pequeños.

1. Introducción

Desde que se lanzó ChatGPT el año pasado, han surgido varias aplicaciones basadas en ChatGPT en un flujo interminable. El autor también ha escrito muchos artículos sobre ChatGPT antes, ayudando a muchos principiantes a usar ChatGPT correctamente. Ha recibido muchos comentarios positivos de los lectores. Recientemente, algunos lectores han comentado si ChatGPT se puede usar para hacer el juego interactivo "You Say I Guess" para salas de transmisión en vivo como Douyin, Kuaishou y Video Account.

Palabras clave: ChatGPT, AIGC, GPT-4, modelo grande, audio y video en tiempo real RTC, juegos casuales

1.jpg

2. Introducción a las herramientas utilizadas en la demostración

Antes de presentar el proceso de implementación de los minijuegos AIGC, primero presentaré las herramientas utilizadas en esta demostración, las herramientas de producción eficientes de IA encabezadas por GPT y el SDK de transmisión en vivo.

  1. Producto en vivo: RTC SDK Android Java proceso de implementación de audio y video en tiempo real - Centro de desarrolladores
  2. GPT4.0: Nuevo bing
  3. GPT3.5: ChatGPT

3. Juegos casuales de sala en vivo de AIGC

Dado que la plataforma de transmisión en vivo de terceros no abre la interfaz de bombardeo, aquí usamos la plataforma Instant RTC para acceder al minijuego, es decir, el documento oficial de desarrollo de RTC Si los lectores necesitan acceder a otras plataformas de transmisión en vivo (como Douyin , Kuaishou, Estación B), etc.), puede buscar la interfaz de chat de viñetas relevante usted mismo y reemplazar la interfaz de chat de viñetas en este artículo.

Según la experiencia práctica, el uso de los servicios de audio y video instantáneos RTC en tiempo real ofrece muchos beneficios . El motor de audio y video de desarrollo propio de enlace completo que se usa en los productos instantáneos RTC tiene un retraso mínimo de 79 ms. ¿Cuál es el concepto de 79 ms? La experiencia del usuario va más allá del cuerpo humano. El desarrollo multiplataforma es la tendencia actual. He estado usando RTC instantáneo para realizar la sala de transmisión en vivo. El proceso de acceso es simple, conveniente y fácil de usar, lo que ayuda a que nuestro proyecto se conecte rápidamente y capte el tráfico del mercado muchas veces. Según el sitio web oficial, los servicios instantáneos de audio y video en tiempo real se pueden adaptar a más de 15 000 dispositivos terminales y son compatibles con los tipos de plataformas de desarrollo 25. El desarrollo único y el lanzamiento multiterminal me han ahorrado mucho desarrollo costes y nos permitió centrarnos en el negocio en sí. También hay estrategias QoS líderes en la industria y potentes capacidades de procesamiento 3A, que se recomiendan para desarrolladores independientes y equipos empresariales.Los desarrolladores pueden obtener rápidamente capacidades de voz en tiempo real a través de SDK instantáneo en los juegos, que es adecuado para verificar rápidamente la viabilidad de los proyectos.

Primero veamos el efecto final de este artículo (la compresión gif es poderosa, los lectores pueden ejecutar directamente el código adjunto o enviar un mensaje privado al autor para obtener la demostración): izquierda: perspectiva del propietario derecha: perspectiva del jugador (perspectiva del espectador
)
2.gif

4 Configuración de las reglas del juego

Más cerca de casa, primero configure el proceso de interacción del juego. Primero cree una pantalla de inicio de sesión donde los usuarios puedan ingresar su número de habitación y apodo. A continuación, el usuario puede hacer clic en los botones [Entrar en la sala] y [Crear sala].

  • Si hace clic en el botón ingresar a la habitación, debe verificar si la habitación existe, si existe, ingrese, si no existe, avise al usuario que la habitación no existe.
  • Si hace clic para crear una sala, debe verificar si la sala existe. Si existe, indica que la creación falló. Si no existe, cree la sala directamente e ingrese.

En la habitación:

  • Si es propietario de una casa, puede configurar palabras de adivinanza, como "taza de agua". Luego reúna las palabras del mensaje: "Por favor, describa la taza de agua, dentro de 10 caracteres, no aparezcan 2 palabras de taza de agua".
  • Después de recibir una respuesta de ChatGPT, use el contenido de la respuesta como "recordatorio de esta ronda" en la sala de transmisión en vivo.
  • El propietario puede hacer clic en el botón Actualizar cada vez, enviar la misma palabra de aviso para solicitar la respuesta de ChatGPT y actualizar el "aviso de la ronda actual".
  • El público adivina las palabras de acuerdo con los "recordatorios de esta ronda", y los avatares de los cuatro usuarios que adivinen las palabras más rápido aparecerán en la pantalla grande en la sala de transmisión en vivo, disfrutando del honor de los ganadores.

Perspectiva del espectador (Perspectiva del jugador)
3.jpg

La interfaz de inicio de sesión del juego y la interfaz de adivinación de palabras se muestran arriba. Los lectores astutos pueden encontrar un error: si el primer usuario responde correctamente y se publica en el muro, los usuarios posteriores pueden plagiar. De hecho, existe este problema La razón principal aquí es que el autor no ha construido un servidor, por lo que no es fácil controlar directamente el bombardeo del usuario. El enfoque correcto debería ser reemplazar la respuesta correcta con un asterisco (*) para evitar que la respuesta sea plagiada. Se deja al lector resolver este pequeño problema aquí. Todo el flujo lógico del juego es el siguiente:

4.png

5 implementación de código

5.1 Conexión con ChatGPT

El código de implementación para acoplarse con ChatGPT está en el frente ** "Todos pueden usar ChatGPT4.0 para hacer una transmisión en vivo de humanos virtuales de Avatar" ** El artículo describe cómo llamar en detalle, por lo que no entraré en detalles aquí. Después de descargar el código fuente en el archivo adjunto, ejecute el siguiente comando para instalar las bibliotecas necesarias:

npm install

A continuación, inicie el servicio http:

node main.js

Todavía use ** "Todos pueden usar ChatGPT4.0 para hacer una transmisión en vivo de humanos virtuales de Avatar" ** La interfaz empaquetada en el artículo (incluidos chatGPT3.5 y BingGPT4.0), aquí usamos ChatGPT3.5 de OpenAI. Como se muestra a continuación, después de introducir la interfaz chatGPT, importe Express para iniciar el servicio Http.

var chatGPT = require("./robot/robot").chatGPT
var express = require('express');
var app = express(); 
app.post('/ask', function (req, res) {
    
    
    let ask = req.query["ask"];  
    chatGPT(ask, function (succ, txt) {
    
    
        if (succ) {
    
    
            res.send({
    
     state: 0, txt });
        } else {
    
    
            res.send({
    
     state: -1, txt: "" });
        }
    })
})

var server = app.listen(8888, function () {
    
    
    var port = server.address().port
    console.log("应用实例,访问地址为 http://%s:%s", '0.0.0.0', port)

})

Solo contiene una interfaz POST /ask, el usuario solo necesita pasar la palabra de solicitud, que se pasa internamente a ChatGPT, y el contenido de respuesta de ChatGPT se devolverá al usuario.

5.2 Acceso a RTC Arquitectónico

Instant RTC es un SDK de audio y video en tiempo real con un retraso mínimo de 79 ms y videollamadas fluidas con una pérdida de paquetes del 70 %. Sobre la base de llamadas de audio y video, proporciona procesamiento avanzado de audio y video, como superresolución, segmentación de fondo y reducción de ruido basada en escenas.Soluciones de mundo virtual.
Cubre usuarios de todo el mundo y sirve más de 3 mil millones de minutos por día. Para obtener más detalles, consulte el documento de desarrollo oficial de Jigou . A continuación, utilizaremos las poderosas capacidades de Instant RTC para desarrollar capacidades de sincronización de bombardeo de voz y en la habitación en tiempo real.El siguiente es el proceso general para acceder a Instant RTC.
5.png

Descargue el SDK más reciente del sitio web oficial y, después de introducir el SDK en el proyecto, cree un motor RTC instantáneo:

public class RTCMngr implements RTCHandler.IRTCEventListener {
    
    

    private static final String TAG = "RTCMngr";
    private ZegoExpressEngine mRTCEngine;
    private static RTCMngr mInstance;
    private RTCHandler mRTCHandler = new RTCHandler(this);
    private ZegoVideoConfig videoCfg = null;
    private IListener msgListener;
    private static Map<String, String> roomInfo = new HashMap<>();

    private RTCMngr(Application app) {
    
    
        mRTCEngine = createRTCEngine(app, mRTCHandler);
    }

    public static RTCMngr getInstance(Application app) {
    
    
        if (null == mInstance) {
    
    
            synchronized (RTCMngr.class) {
    
    
                if (null == mInstance) {
    
    
                    mInstance = new RTCMngr(app);
                }
            }
        }
        return mInstance;
    }

    private ZegoExpressEngine createRTCEngine(Application app, IZegoEventHandler handler) {
    
    
        ZegoEngineProfile profile = new ZegoEngineProfile();
        profile.appID = KeyCenter.APP_ID;
        profile.scenario = ZegoScenario.GENERAL;  // 通用场景接入
        profile.application = app;
        ZegoExpressEngine engine = ZegoExpressEngine.createEngine(profile, handler);
        return engine;
    }

sala de inicio de sesión

A continuación, inicie sesión en la sala. Primero debe obtener la sala de inicio de sesión Token, y Tokenel método de obtención está encapsulado en RunOnServerla clase.

Vale la pena señalar que RunOnServertodas las funciones de la clase requieren que el lector las mueva al servidor para ejecutarlas; de lo contrario, habrá un riesgo de seguridad.

Después de tenerlo Token, la función loginRoom llamada a continuación juzgará si el inicio de sesión es exitoso ZegoExpressEnginea través de los parámetros en la función de devolución de llamada . errorDe error=0lo contrario, el inicio de sesión es exitoso; de lo contrario, debe ir al sitio web oficial para verificar la causa específica del error.

//登录房间
public void loginRoom(User user, CB cb) {
    
    

    ZegoUser zuser = new ZegoUser(user.userId, user.userName);
    ZegoRoomConfig config = new ZegoRoomConfig();
    config.token = RunOnServer.getToken(user.userId, user.roomId); // 请求开发者服务端获取
    config.isUserStatusNotify = true;
    mRTCEngine.loginRoom(user.roomId, zuser, config, (int error, JSONObject extendedData) -> {
    
    
        if (error == 0) {
    
    
            Log.e(TAG, "登录房间:" + user.roomId);
            String hostId = null;
            try {
    
    
                hostId = extendedData.getString("hostId");
            } catch (JSONException e) {
    
    
                hostId = "";
            }
            cb._complete(error == 0, hostId);
        } else {
    
    
            Log.e(TAG, "Login Error, errorCode=" + error);
            cb._complete(error == 0, "login room error code:" + error);
        }
    });

}

salir de la habitación

Si hay un inicio de sesión, habrá un cierre de sesión. Antes de salir de la sala, detenga la transmisión. Si hay transmisión, debe detener la transmisión. Luego llama ZegoExpressEnginea la logoutRoomfunción.

    //离开房间
    public void leaveRoom(String roomId, CB cb) {
    
    
        mRTCEngine.stopPreview();
        mRTCEngine.stopPublishingStream();
        mRTCEngine.logoutRoom(roomId, new IZegoRoomLogoutCallback() {
    
    
            @Override
            public void onRoomLogoutResult(int errorCode, JSONObject extendedData) {
    
    
                cb._complete(errorCode == 0, "");
            }
        });
    }

Enviar chat de viñetas
En la parte anterior, realizamos el inicio de sesión y la salida de la sala. Con el concepto de la sala, podemos enviar el mensaje de chat de viñetas a la sala, para que todos en la sala puedan recibir el mensaje de chat de viñetas. simplemente llame a la función ZegoExpressEnginedirectamente sendBarrageMessage:

    /**
     * 发送弹幕消息
     */
    public void sendMsg(Msg msg, CB cb) {
    
     
        mRTCEngine.sendBarrageMessage(msg.toUID,
                msg.decMsg, new IZegoIMSendBarrageMessageCallback() {
    
    
                    @Override
                    public void onIMSendBarrageMessageResult(int errorCode, String messageID) {
    
    
                        cb._complete(errorCode == 0, messageID);
                    }
                });

    }

    //其他相关代码略.....
}

El código anterior crea funciones como el motor RTC, la sala de inicio de sesión, la salida de la sala, el envío de bombardeos, la transmisión push, etc. Con base en estas capacidades básicas, podemos ensamblar funciones más complejas. A continuación, se encapsula la capacidad de transmisión.Dado que la pantalla de voz en tiempo real es 4un avatar de usuario, no hay necesidad de transmisión de video en tiempo real. Por lo tanto, solo necesita usar la función de voz en tiempo real. Al extraer la transmisión, canvaspase la función que necesita usar el parámetro null. Al transmitir, llame muteVideoPublisha la función para deshabilitar la transmisión de video. Además, antes de llamar startPreview, llama para enableCameracerrar la cámara para evitar que SDK solicite permiso de cámara. O simplemente no solicite los permisos de la cámara para asegurarse de que no se llame a la cámara para enviar las imágenes en tiempo real.

//推流
public void pushStream(String streamId) {
    
    
    Log.e(TAG, "push streamID" + streamId);
    mRTCEngine.startPublishingStream(streamId);
    mRTCEngine.startPreview(null);

}

5.3 Propietario estableciendo el tema

El dueño de la casa tiene derecho a crear preguntas, y el ritmo de todo el juego lo controla el dueño de la casa, como: preguntas cambiantes, recordatorios refrescantes, etc. La interfaz más importante es conectarse con el servicio ChatGPT, el proceso general es el siguiente:

6.png

El código específico es el siguiente:

private void reqGPT() {
    
    
    if (wordAns.length() <= 0) return;
    chatGPT.ask("请描述" + wordAns + ",10个字以内,不要出现" + wordAns + wordAns.length() + "个字", new CB() {
    
    
        @Override
        public void onResult(boolean succ, String res) {
    
    
            if (!succ) {
    
    
                toast(res);
            } else {
    
    
                Msg msg = Msg.newRoundMsg(mUser.roomId, res, mUser.userId);
                rtcMngr.sendMsg(msg, new CB() {
    
    
                    @Override
                    public void onResult(boolean succ, String err) {
    
    
                        onlineIds.clear();
                        onNewRound(msg);
                    }
                });
            }
        }
    });
}

Tenga en cuenta que en la tercera línea de código, se ensamblan las palabras de solicitud de ChatGPT y se agrega un límite de 10 palabras para evitar que ChatGPT devuelva una descripción grande; además, se agrega la palabra clave xx para evitar que ChatGPT adivine en el resultado contenido Las palabras son reveladas.

La respuesta está guardada actualmente por el propietario. Después de recibir el bombardeo de la audiencia, el propietario las compara una por una. Si la respuesta es correcta y no hay más de 4 usuarios que hayan respondido correctamente, el avatar del usuario se mostrará en la pantalla. Aquí, dado que no tenemos un servidor separado conectado a Instant RTC, el propietario envía un mensaje de descarga especial que contiene la información del usuario en la pantalla Después de recibir este mensaje de descarga especial, todos analizan y muestran los datos del usuario en la pantalla.

5.4 Preguntas adivinatorias de la audiencia

La lógica de adivinación de la audiencia es relativamente simple.Después de que el usuario ingresa directamente la respuesta adivinada, él o ella puede enviar directamente un mensaje de bombardeo. Haga clic en el botón Enviar y hay dos lógicas diferentes para propietarios y espectadores:

/**
 * 点击发送按钮
 */
public void onClkSendMsgBtn(View view) {
    
    
    String txt = sendET.getText().toString().trim();
    if (txt.length() <= 0) return;
    Msg msg = Msg.newRoomMsg(mUser.roomId, txt, mUser.userId, mUser.userName);
    if (mUser.isCreator) {
    
    //房主重新设置猜测词
        newRound(txt);
    } else {
    
    //观众发送弹幕
        rtcMngr.sendMsg(msg, new CB() {
    
    
            @Override
            public void onResult(boolean succ, String err) {
    
    
                addBarrageItem(msg);
            }
        });
    }
    sendET.setText("");
}

6. Solución instantánea de juegos sociales RTC

Ahora, cada vez más empresas intentan introducir minijuegos en los productos sociales de pan-entretenimiento para mejorar la diversión de la interacción social del usuario y la permanencia del producto, y al mismo tiempo verificar las nuevas ideas de comercialización de productos. Para pequeñas y medianas empresas con presupuestos reducidos para autodesarrollar minijuegos o empresas que verifican proyectos de minijuegos. El autor recomienda que puede optar por conectarse a un SDK de audio y video de terceros con minijuegos, como la construcción de audio y video en tiempo real RTC.

Se entiende que Jigo ha llegado a la cooperación con una serie de estudios de juegos líderes y ha lanzado una solución social + de juegos pequeños. Actualmente, es compatible con muchos juegos casuales populares como el billar, la batalla de parachoques, quién está encubierto y adivina lo que dibujas. se aplica a escenarios comerciales comunes en la industria del pan-entretenimiento, como transmisión de video en vivo, citas uno a uno, radio de voz y salas de chat Al mismo tiempo, también admite juegos localizados como Ludo, Domino y UNO, proporcionando una nueva competencia de mercado para las empresas chinas que van al extranjero.

Además, la biblioteca de minijuegos instantáneos se expande continuamente. Los desarrolladores solo necesitan acceder a ella una vez para actualizar y lanzar nuevos juegos continuamente. Es adecuado para equipos o desarrolladores que desean verificar rápidamente las preferencias de los usuarios a bajo costo. Incluso si no desea utilizar Instant RTC, le recomendamos encarecidamente que consulte las demostraciones relevantes, que pueden brindarle mucha inspiración empresarial. URL de la lista de demostración del sitio web oficial

7. Extensión del minijuego

Este artículo implementa principalmente el minijuego "Tú dices que adivino" a través del propietario de la casa estableciendo el tema, GPT brindando la descripción correspondiente y la audiencia adivinando la lógica. La descripción de GPT tiene el estímulo de abrir la caja ciega, que es el punto culminante de este juego.

Por supuesto, el juego puede variar. Los bloggers ofrecen varias ideas, tales como:

  1. Preguntas GPT, no es necesario que los propietarios de viviendas, todos los públicos adivinen las preguntas
  2. El público hace preguntas, GPT adivina palabras

Además, no es solo un pequeño juego de "tú dices, supongo", sino también algunos juegos de lenguaje más complejos, como: quién está encubierto, matar hombres lobo y otros juegos populares hoy en día; además, también se puede combinar con Pintura de IA para realizar el minijuego "dibujas, supongo". Solo necesita unas pocas líneas de código para conectarse y crear la capacidad RTC, y casi todos los juegos en tiempo real se pueden conectar fácilmente.

Supongo que te gusta

Origin blog.csdn.net/RTC_SDK_220704/article/details/131723075
Recomendado
Clasificación