La creación de aplicaciones de IA sofisticadas con modelos de lenguaje grandes (LLM), especialmente aquellas que manejan entradas multimodales y requieren capacidad de respuesta en tiempo real, a menudo se siente como armar un rompecabezas complejo: estás uniendo diversos pasos de procesamiento de datos, llamadas de API asíncronas y lógica personalizada. A medida que crece la complejidad, esto puede conducir a un código frágil y difícil de mantener.
Hoy presentamos GenAI Processors, una nueva biblioteca Python de código abierto de Google DeepMind diseñada para brindar estructura y simplicidad a estos desafíos. GenAI Processors proporciona una capa de abstracción, que define una interfaz de procesador
coherente para todo, desde el manejo de entradas y el procesamiento previo hasta el procesamiento de llamadas y salidas de modelos.
En esencia, GenAI Processors trata todas las entradas y salidas como flujos asincrónicos de ProcessorParts
(es decir, transmisión bidireccional). Considéralo como partes de datos estandarizados (por ejemplo, un fragmento de audio, una transcripción de texto, un marco de imagen) que fluyen a través de tu flujo de procesamiento junto con los metadatos asociados. Esta API basada en flujo permite el encadenamiento y la composición sin interrupciones de diferentes operaciones, desde la manipulación de datos de bajo nivel hasta las llamadas a modelos de alto nivel.
Por ejemplo, puedes crear fácilmente un “Agente en vivo” capaz de procesar transmisiones de audio y video en tiempo real utilizando la API de Gemini Live con solo unas pocas líneas de código. En el siguiente ejemplo, puedes observar cómo se combinan las fuentes de entrada y los pasos de procesamiento utilizando el operador +
, creando un flujo de datos claro (código completo en GitHub):
from genai_processors.core import audio_io, live_model, video
# Procesador de entrada: combina flujos de cámara y de audio
input_processor = video.VideoIn() + audio_io.PyAudioIn(...)
# Procesador de salida: reproduce las partes de audio, controla las interrupciones y pausa
# la salida de audio cuando el usuario está hablando.
play_output = audio_io.PyAudioOut(...)
# Procesador de la API de Gemini Live
live_processor = live_model.LiveProcessor(...)
# Componer el agente: mic+camera -> API de Gemini Live -> reproducir audio
live_processor = live_model.LiveProcessor(...)
live_agent = input_processor + live_processor + play_output
async for part in live_agent(streams.endless_stream()):
# Procesa las partes de salida (por ejemplo, imprimir transcripción, resultado del modelo, metadatos)
print(part)
También puedes crear tu propio agente en vivo, aprovechando un LLM estándar basado en texto, utilizando la capacidad de transmisión bidireccional de la biblioteca del procesador GenAI y la API de Google Speech (código completo en GitHub):
from genai_processors.core import genai_model, realtime, speech_to_text, text_to_speech
# Procesador de entrada: recibe entrada de audio (mic) y la transcribe a texto
input_processor = audio_io.PyAudioIn(...) + speech_to_text.SpeechToText(... )
play_output = audio_io.PyAudioOut(...)
# El modelo principal se usará para generar la respuesta.
genai_processor = genai_model.GenaiModel(...),
# Procesador de TTS que se usará para convertir la respuesta de texto en audio. Nota
# el límite de velocidad del procesador de audio que se usará para volver a transmitir un audio breve
# fragmento para el cliente a la misma velocidad a la que se reproduce.
tts = text_to_speech.TextToSpeech(...) + rate_limit_audio.RateLimitAudio(...)
# Crea un agente como:
# mic -> voz a texto -> conversación de texto -> texto a voz -> reproducir audio
live_agent = (
input_processor
+ realtime.LiveModelProcessor(turn_processor=genai_processor + tts)
+ play_output
)
async for part in live_agent(streams.endless_stream()):
…
Anticipamos una creciente necesidad de aplicaciones LLM proactivas donde la capacidad de respuesta sea crítica. Incluso para los casos de uso que no son de streaming, el procesamiento de datos tan pronto como estén disponibles puede reducir significativamente la latencia y el tiempo hasta el primer token (TTFT), lo cual es esencial para crear una buena experiencia de usuario. Si bien muchas API de LLM priorizan las interfaces sincrónicas y simplificadas, los GenAI Processors, al aprovechar las características nativas de Python, ofrecen una forma de escribir aplicaciones receptivas sin hacer que el código sea más complejo. Los ejemplos de planificadores de viajes y agentes de investigación demuestran cómo los agentes por turnos pueden usar la función de concurrencia de los GenAI Processors para aumentar la capacidad de respuesta.
En el corazón de GenAI Processors, se encuentra el concepto de procesador
: un bloque de construcción fundamental que encapsula una unidad de trabajo específica. Toma un flujo de entradas, realiza una operación y genera un flujo de resultados. Esta API simple y coherente es una piedra angular del poder y la flexibilidad de la biblioteca.
A continuación, se describen las principales decisiones de diseño y sus beneficios para los desarrolladores:
procesador
autónomas. Esto garantiza la reutilización del código, la capacidad de prueba y simplifica significativamente el mantenimiento de flujos de procesamiento intrincados.asyncio
de Python para un manejo eficiente de las tareas vinculadas a I/O y a la computación. Esto permite aplicaciones receptivas sin subprocesos manuales o gestión compleja de la concurrencia.GenaiModel
(para la interacción por turnos) y LiveProcessor
(para la transmisión en tiempo real) simplifican la interacción con la API de Gemini, incluidas las complejidades de la API en vivo. Esto reduce el código predeterminado y acelera la integración.ProcessorPart
proporciona una interfaz coherente para manejar diversos tipos de datos (texto, imágenes, audio, JSON, etc.) dentro del flujo de procesamiento.Comenzar a utilizar GenAI Processors es sencillo. La instalación se puede realizar con pip:
pip install genai-processors
Para ayudarte a familiarizarte con la biblioteca, proporcionamos una serie de notebooks de Colab que te guían a través de los conceptos básicos y demuestran cómo construir varios tipos de procesadores y aplicaciones. Recomendamos comenzar con el Colab de la API de contenido y el Colab de introducción a procesadores.
También puedes explorar el directorio examples/ del repositorio para obtener demostraciones prácticas de cómo compilar aplicaciones más complejas, como un agente de investigación y un agente de comentarios en vivo.
GenAI Processors se encuentra actualmente en sus primeras etapas y creemos que proporciona una base sólida para abordar los complejos desafíos de flujo de trabajo y orquestación en las aplicaciones de IA. Si bien el SDK de Google GenAI está disponible en varios idiomas, GenAI Processors actualmente solo admite Python.
El directorio core/ contiene procesadores fundamentales, y alentamos activamente las contribuciones de la comunidad para funcionalidades más especializadas en el directorio contrib/. Nos entusiasma colaborar con la comunidad de desarrolladores para ampliar la biblioteca y crear sistemas de IA aún más sofisticados.
¿Todo listo para compilar apps de Gemini más sólidas y con mayor capacidad de respuesta?
Consulta el repositorio de GenAI Processors en GitHub: https://github.com/google-gemini/genai-processors
¡Ya queremos tus creaciones!
GenAI Processors es el resultado de la dedicación y el arduo trabajo de un equipo fantástico. Nos gustaría reconocer a las siguientes personas que desempeñaron un papel clave en dar vida a esta biblioteca: Juliette Love, KP Sawhney, Antoine He, Will Thompson, Arno Eigenwillig, Ke Wang, Parth Kothari, Tim Blyth, Philipp Schmid, Patrick Löber, Omar Sanseviero, Alexey Kolganov, Adam Langley, Evan Senter, Seth Odoom, Thierry Coppey y Murat Ozturk.