Es posible que haya oído hablar del famoso Neurosama, o Mu Jimeng de China. ¿También quieres tener tu propia imagen virtual de IA para acompañarte a transmitir, chatear y jugar juegos? ¡El robot Live de código abierto Zerolan está trabajando para realizar tus sueños! ¡Y esto solo requiere una tarjeta gráfica de consumo!
Zerolan Live Robot es un robot de transmisión en vivo multifuncional (AI Vtuber), que puede leer automáticamente el bombardeo en la sala de transmisión de Bilibili Live, observa las ventanas designadas de la pantalla de la computadora, comprender el contenido de la pantalla, manipular los personajes del juego en Minecraft y hacer respuestas de chat de voz emocional.
Sus proyectos asociados Konekominecraftbot, Zerolan-Core, Zerolan-Data, Zerolan-UI.
Nota
Este proyecto está en desarrollo continuo, la versión actual es 2.0 . Puede seguir la cuenta de Bilibili del desarrollador akagawa tsurumi_channel. Es capacitar a Ai Cat Girl basado en este proyecto, y transmitirá el último progreso de vez en cuando.
Lo siguiente enumera brevemente lo que admite este proyecto:
| Artículos de soporte | Contenido compatible |
|---|---|
| Plataforma de transmisión en vivo | Bilibili | Contracción nerviosa |
| Modelo de lenguaje grande | Thudm/GLM-4 | Thudm/ChatGlm3 | QWEN/QWEN-7B-CHAT | 01ai/yi-6b-chat | augmxnt/shisa-7b-v1 |
| Modelo de reconocimiento de voz automático | IIC/Speech_paraformer_asr |
| Modelo de síntesis del habla | RVC-Boss/GPT-Sovits |
| Modelo de subtítulo de imagen | Salesforce/Blip-Image-Large |
| Modelo de reconocimiento de caracteres ópticos | Paddlepaddle/padtleocr |
| Modelo de subtítulo de video | iic/multi-modal_hitea_video-captioning_base_en |
| Herramientas externas llamables | Navegador Firefox, Enciclopedia de Baidu, Enciclopedia de Mengniang |
| Complemento del juego | Minecraft |
Precaución
La versión Zerolan Live Robot 2.0 es incompatible con las versiones más antiguas 1.0, por lo que es posible que deba reconfigurar el entorno e instalar dependencias.
El marco Zerolan consiste en Zerolan Live Robot, Zerolan Core, Zerolan Data y Zerolan UI. La siguiente tabla describe brevemente los usos de cada proyecto:
| Nombre del proyecto | usar |
|---|---|
| Robot en vivo zerolan | El marco de control del robot de transmisión en vivo hace las respuestas de acción mediante la recopilación de datos ambientales y análisis integrales. |
| Núcleo zerolan | Los módulos centrales que proporcionan servicios de inferencia de IA para robots de transmisión en vivo, como la API web basada en servicios de modelos de idiomas grandes. |
| Datos de Zerolan | Define el formato de datos para el intercambio entre servicios utilizando solicitudes de red. |
| UI Zerolan | La interfaz GUI basada en PYQT6 incluye ventanas emergentes superiores y sonidos rápidos, etc. |
Importante
¡Este paso es imprescindible !
Muévase aquí para completar la implementación de Zerolan Core, que depende en gran medida de este servicio central.
Ejecute el comando, que crea un entorno virtual y lo activa, y luego instala automáticamente los paquetes de dependencia requeridos por este proyecto:
conda create --name ZerolanLiveRobot python=3.10
conda activate ZerolanLiveRobot
pip install -r requirements.txt Si se encuentra en la rama de desarrollo dev , es posible que deba instalarla manualmente:
pip install git+https://github.com/AkagawaTsurunaki/zerolan-ui.git@dev
pip install git+https://github.com/AkagawaTsurunaki/zerolan-data.git@dev Encuentre el archivo de configuración de resources/config.template.yaml , cámbielo a config.yaml y luego modifíelo a la configuración que necesita de acuerdo con los comentarios en el archivo de configuración.
En el elemento de configuración pipeline , debe tener en cuenta que server_url debe contener el protocolo, el número de IP y el puerto, como http://127.0.0.1:11001 , https://myserver.com:11451 , etc. Esta es la dirección de red donde implementa Zerolan Core. Cada tipo de modelo puede tener un puerto diferente.
Consejo
¿El servidor solo puede tener un puerto? Luego intente reenviar su solicitud con NGINX.
En el elemento de configuración service , debe tener en cuenta que host solo debe incluir la dirección IP, y port solo debe incluir el número de puerto.
game.platform admite minecraft , y el campo live_stream admite bilibili , twitch y youtube .
Consejo
Obtenga la documentación que puede utilizar la tecla API de la plataforma de transmisión en vivo:
Bilibili: Obtenga la información requerida para la clase de credencial
Twitch: desarrolladores de twitch - autenticación
YouTube: obteniendo credenciales de autorización
El valor del character.chat.filter.strategy puede ser default .
character.chat.filter.bad_words puede completar una serie de palabras de filtro.
character.chat.injected_history La matriz debe ser de un número uniforme, es decir, debe ser el final del mensaje al que responde la IA.
character.chat.max_history especifica cuántos mensajes se conservan como máximo, es decir, el tamaño de la ventana del mensaje.
character.speech.prompts_dir indica dónde se almacenan sus archivos de audio TTS, y el nombre de su archivo debe estar en el formato de [语言][情感标签]文本内容.wav . Por ejemplo [zh][开心]哇!今天真是一个好天气.wav , donde el "lenguaje" solo admite zh , en y ja ; Las "etiquetas emocionales" son arbitrarias, siempre que se pueda distinguir el modelo de lenguaje grande; "Contenido de texto" es el contenido de texto representado por las voces en este audio.
Precaución
Puede haber una fuga de memoria en el navegador de Microsoft Edge, por lo que este proyecto no es compatible.
El valor opcional de external_tool.browser.driver es firefox .
external_tool.browser.profile_dir es asegurarse de que bajo el control de Selenium, el inicio de sesión de su cuenta y otra información no se pierdan. Dejar un programa en blanco detectará automáticamente la ubicación (pero no significa que definitivamente lo encontrará).
Consejo
Se recomienda utilizar herramientas de prueba API como Postman antes de comenzar a probar si la conexión entre la computadora que ejecuta este proyecto y Zerolan Core es normal. Zerolan Live Robot proporciona algunos consejos cuando los errores de conexión de la tubería, que aún requieren que resuelva los problemas manualmente.
Use el siguiente comando para ejecutar el programa principal de Zerolan Live Robot:
python main.pyNota
Este paso es opcional .
Este proyecto y Konekominecraftbot implementan un conjunto de interfaces que pueden controlar los robots en los juegos de Minecraft de este proyecto. Si lo necesita, muévase aquí para ver los detalles.
La versión anterior de Zerolan Live Robot 1.0 utilizó una encuesta simple por segundo para leer la información del entorno de las listas de caché en cada módulo de servicio. En la versión anterior de Zerolan Live Robot 2.0, se convirtió en un patrón de diseño basado en eventos .
En este proyecto, el robot se ejecuta durante el envío y el procesamiento de una serie de eventos. En otras palabras, sin un evento, el robot no responderá.
Cada Event de evento contiene un nombre de evento, que es esencialmente una cadena. Todos los nombres de eventos utilizados en este proyecto se definen en common.enumerator.EventEnum , y también puede expandir y agregar sus propios nombres de eventos. Tomemos el evento de procesar la voz de entrada del usuario como ejemplo, su evento se llama EventEnum.SERVICE_VAD_SPEECH_CHUNK .
emitter es un objeto global utilizado para manejar el envío de eventos y la ejecución del oyente. emitter siempre tiene el hilo principal. Sin embargo, múltiples hilos se ejecutarán al mismo tiempo durante todo el sistema en ejecución, porque cada hilo puede tener su propia instancia de EventMitter.
Use el decorador @emitter.on(EventEnum.某个事件) para registrar rápidamente un oyente. El oyente puede ser una función sincrónica o una función asincrónica. Cuando necesitamos enviar un evento, podemos usar el método asíncrono emitter.emit(EventEnum.某个事件, *args, **kwargs) .
Por ejemplo, cuando el sistema detecta una voz humana, se enviará el evento SERVICE_VAD_SPEECH_CHUNK , y todos los oyentes que registren este evento serán llamados a realizar algún procesamiento:
@ emitter . on ( EventEnum . SERVICE_VAD_SPEECH_CHUNK )
async def on_service_vad_speech_chunk ( speech : bytes , channels : int , sample_rate : int ):
response = ... # 假设这里获得了语音识别的结果
await emitter . emit ( EventEnum . PIPELINE_ASR , response ) # 发送自动语音识别事件El oyente aquí es on_service_vad_speech_chunk , que es esencialmente una función que se llamará cuando SERVICE_VAD_SPEECH_CHUNK ocurre y acepta varios parámetros. Los parámetros aquí están completamente especificados por el remitente del evento.
La tubería es una implementación importante de la comunicación con Zerolan Core. El uso de tuberías es muy simple. Solo necesita pasar en un objeto de configuración para obtener un objeto de tubería disponible. Luego llame al método predict o stream_predict en el objeto de tubería para usar el modelo AI en el núcleo de Zerolan.
Tomando el modelo de idioma grande como ejemplo, especifique la dirección del servidor de destino (la dirección de su puerto abierto de Core Zerolan), pase en LLMPipelineConfig a LLMPipeline para establecer la tubería.
config = LLMPipelineConfig ( server_url = "..." )
llm = LLMPipeline ( config )
query = LLMQuery ( text = "你好,你叫什么名字?" , history = [])
prediction = llm . predict ( query )
print ( prediction . response )Esto debería obtener una respuesta del modelo.
Si desea conocer más detalles de implementación, puede verificar la definición de datos en los datos de Zerolan, que también es posible que deba entenderse en combinación con la implementación de la tubería y los contenidos en el archivo app.py en Zerolan Core. En pocas palabras, todos están basados en HTTP.
| Módulo | efecto | Contenido compatible |
|---|---|---|
| navegador | Control del navegador basado en selenio | El navegador de Firefox abierto, búsqueda y cierre del navegador |
| dispositivo | Micrófono, captura de pantalla, control de altavoces | Probado solo en Windows |
| filtrar | Bloqueador del diálogo | Filtro de juego simple |
| juego | Complemento de control de juegos | Ver Konekominecraftbot para más detalles |
| live_stream | Lectura de bombardeo de la plataforma de transmisión en vivo | Bilibili, twitch, youtube |
| vad | Detección de audio de voz humana | Mecanismo de detección de audio basado en el umbral de energía |
Después del inicio, el registro muestra "en su contexto, la dirección solicitada no es válida".
Solución: verifique si la configuración del host es correcta en el archivo de configuración. Si solo desea acceso nativo, especifique '127.0.0.1' .
Este proyecto utiliza la licencia MIT, por favor no use este software con fines ilegales.
¡No dude en disfrutar de la imprenta abierta!
Licencia de MIT
Copyright (c) 2024 Akagawatsurunaki
Correo electrónico : [email protected]
Github : Akagawatsurunaki
Bilibili : Akagawa tsurumi_channel