GenAI 프로세서 발표: 강력하고 유연한 Gemini 애플리케이션 개발

2025년 7월 10일
Andre Elisseeff Software Engineer
Alexey Guseynov Software Engineer
Oskar Bunyan Software Engineer
Shrestha Basu Mallick Group Product Manager

대형 언어 모델(LLM)로 정교한 AI 애플리케이션, 특히 멀티모달 입력을 처리하고 실시간 응답성을 요하는 애플리케이션을 개발하는 것은 마치 복잡한 퍼즐 조립처럼 느껴지곤 합니다. 다양한 데이터 처리 단계, 비동기 API 호출, 맞춤 설정 논리를 조합해야 하기 때문입니다. 복잡성이 증가하게 되면 이는 취약하고 유지 관리가 어려운 코드로 가득한 애플리케이션으로 이어질 수 있습니다.

오늘 저희는 이러한 문제에 구조와 단순성을 부여하도록 설계된 Google DeepMind의 새로운 오픈소스 Python 라이브러리인 GenAI Processors를 소개합니다. GenAI Processors는 입력 처리와 전처리부터 모델 호출과 출력 처리까지 모든 작업에 대한 일관된 Processor 인터페이스를 정의하는 추상화 레이어를 제공합니다.

본질적으로 GenAI Processors는 모든 입력과 출력을 ProcessorParts의 비동기 스트림(즉, 양방향 또는 투웨이 스트리밍)으로 처리합니다. 마치 표준화된 데이터 조각들(예: 오디오 조각, 텍스트 스크립트, 이미지 프레임)이 관련 메타데이터와 함께 파이프라인을 따라 흐르는 것이라 생각하면 이해가 쉬울 것입니다. 이 스트림 기반 API를 통해 로우 레벨 데이터 조작부터 하이 레벨 모델 호출까지 다양한 작업을 원활하게 체이닝하고 구성할 수 있습니다.

GenAI Processors library
GenAI Processors 라이브러리는 Processor의 동시 실행을 최적화하도록 설계되었습니다. 이 실행 흐름 예시의 모든 부분은 그래프의 모든 상위 항목이 계산될 때 동시에 생성될 수 있습니다(예: `c'12`는 `a’1`과 동시에 생성될 수 있음). 흐름은 입력 스트림을 기준으로 출력 스트림의 순서를 유지하며 첫 번째 토큰까지의 시간을 최소화하기 위해 실행됩니다(가능하면 `d12`보다는 `a12`를 선호함). 이 동시성 최적화는 자체적으로 수행됩니다. 즉, 입력 스트림에 Processor를 적용하면 가능한 경우 언제든 이 동시 실행이 자동으로 트리거됩니다.

예를 들어, Gemini Live API를 사용하면 몇 줄의 코드로 오디오 및 동영상 스트림을 실시간으로 처리할 수 있는 'Live Agent'를 쉽게 만들 수 있습니다. 다음 예에서는 + 연산자를 사용해 입력 소스와 처리 단계를 결합하고 명확한 데이터 흐름을 만드는 방법을 잘 살펴보세요(전체 코드는 GitHub에서 확인).

from genai_processors.core import audio_io, live_model, video
 
# Input processor: combines camera streams and audio streams
input_processor = video.VideoIn() + audio_io.PyAudioIn(...)
 
# Output processor: plays the audio parts. Handles interruptions and pauses
# audio output when the user is speaking.
play_output = audio_io.PyAudioOut(...)
 
# Gemini Live API processor
live_processor = live_model.LiveProcessor(...)
 
# Compose the agent: mic+camera -> Gemini Live API -> play audio
live_processor = live_model.LiveProcessor(...)
live_agent = input_processor + live_processor + play_output
 
async for part in live_agent(streams.endless_stream()):
  # Process the output parts (e.g., print transcription, model output, metadata)
  print(part)
Python

GenAI Processor 라이브러리와 Google Speech API의 양방향 스트리밍 기능을 통해 표준 텍스트 기반 LLM을 활용하여 나만의 Live 에이전트를 개발할 수도 있습니다(전체 코드는 GitHub에서 확인).

from genai_processors.core import genai_model, realtime, speech_to_text, text_to_speech
 
# Input processor: gets input from audio in (mic) and transcribes into text
input_processor = audio_io.PyAudioIn(...) + speech_to_text.SpeechToText(... )
play_output = audio_io.PyAudioOut(...)
 
# Main model that will be used to generate the response.
genai_processor = genai_model.GenaiModel(...),
 
# TTS processor that will be used to convert the text response to audio. Note
# the rate limit audio processor that will be used to stream back small audio
# chunks to the client at the same rate as how they are played back.  
tts = text_to_speech.TextToSpeech(...) + rate_limit_audio.RateLimitAudio(...)
 
 
# Creates an agent as:
# mic -> speech to text -> text conversation -> text to speech -> play audio
live_agent = (
     input_processor
     + realtime.LiveModelProcessor(turn_processor=genai_processor + tts)
     + play_output
 )
async for part in live_agent(streams.endless_stream()):
     …
Python

응답성이 중요한 혁신적인 LLM 애플리케이션에 대한 수요가 증가할 것으로 예상됩니다. 비(非)스트리밍 사용 사례에서도 사용 가능해지는 즉시 데이터를 처리하면 지연 시간과 첫 번째 토큰까지의 시간(Time to First Token: TTFT)을 크게 줄일 수 있고, 이는 우수한 사용자 경험을 만드는 데 필수입니다. 많은 LLM API가 단순화된 동기식 인터페이스를 우선시합니다. 그러나 GenAI Processors는 네이티브 Python 기능을 활용하여 코드를 복잡하게 만들지 않고도 반응형 애플리케이션을 작성하는 방법을 제공합니다. Trip Planner와 Research Agent 사례에서는 턴 기반 에이전트가 GenAI Processors의 동시성 기능을 사용하여 응답성을 높이는 방법을 보여줍니다.


핵심 설계 원칙

GenAI Processors의 핵심은 특정 작업 단위를 캡슐화하는 기본적인 구성 요소인 Processor의 개념입니다. Processor는 입력 스트림을 받아 연산을 수행하고 결과 스트림을 출력합니다. 이 간단하고 일관된 API가 바로 이 라이브러리가 지닌 힘과 유연성의 토대입니다.

개발자를 위한 핵심적인 설계 결정 사항과 그 이점에 대해 알아보겠습니다.

  • 모듈식 설계: 복잡한 워크플로를 독립적인 Processor 단위로 세분화합니다. 이를 통해 코드 재사용성과 테스트 가능성을 보장하고 복잡한 파이프라인 유지 관리를 대폭 간소화합니다.

  • 비동기 및 동시성: Python의 asyncio를 최대한 활용해 I/O 중심 작업과 컴퓨팅 중심 작업을 효율적으로 처리합니다. 이를 통해 수동 스레딩이나 복잡한 동시성 관리 없이도 반응형 애플리케이션을 구현할 수 있습니다.

  • Gemini API와 통합: GenaiModel(턴 기반 상호작용용)과 LiveProcessor(실시간 스트리밍용) 같은 전용 프로세서는 Live API의 복잡성을 포함하여 Gemini API와의 상호작용을 간소화합니다. 이를 통해 상용구 코드를 줄이고 통합 속도를 가속화할 수 있습니다.

  • 확장 가능: 기본 클래스를 상속하거나 데코레이터를 사용하여 맞춤 설정 프로세서를 쉽게 만들 수 있습니다. 자체 데이터 처리 논리, 외부 API 또는 특수 작업을 파이프라인에 원활하게 통합할 수 있습니다.

  • 통합 멀티모달 처리: ProcessorPart 래퍼는 파이프라인 내에서 다양한 데이터 유형(텍스트, 이미지, 오디오, JSON 등)을 처리하기 위한 일관된 인터페이스를 제공합니다.

  • 스트림 조작 유틸리티: 비동기 스트림을 분할, 연결, 병합하기 위한 기본 제공 유틸리티입니다. 이를 통해 복잡한 파이프라인 내의 데이터 흐름을 세밀하게 제어할 수 있습니다.


시작하기

GenAI Processors는 간단하게 시작할 수 있습니다. 다음과 같이 pip로 설치하면 됩니다.

pip install genai-processors
Python

라이브러리를 익히실 수 있도록 핵심 개념을 안내하고 다양한 유형의 프로세서와 애플리케이션을 개발하는 방법을 보여주는 Colab 노트북을 시리즈로 제공합니다. Content API ColabProcessor Intro Colab부터 시작하는 것이 좋습니다.

또한 리서치 에이전트와 실시간 해설 에이전트 등 보다 복잡한 애플리케이션을 개발하는 방법을 보여주는 실용적인 데모를 보려면 저장소의 examples/ 디렉터리를 탐색하세요.


전망

GenAI Processors는 현재 초기 단계에 있습니다. 하지만 저희는 GenAI Processors가 AI 애플리케이션에서 복잡한 워크플로 및 오케스트레이션 문제를 해결하기 위한 견고한 토대를 제공한다고 믿습니다. Google GenAI SDK는 여러 언어로 제공되지만 GenAI Processors는 현재 Python만 지원합니다.

core/ 디렉터리에는 기본 프로세서가 포함되어 있으며, 특수한 기능은 개발자 커뮤니티가 contrib/ 디렉터리를 통해 참여해 주시길 적극 장려합니다. 라이브러리를 확장하고 훨씬 더 정교한 AI 시스템을 개발할 수 있도록 개발자 커뮤니티와 협력하게 되어 기쁩니다.

더욱 강력하고 응답성이 뛰어난 Gemini 애플리케이션을 개발할 준비가 되셨나요?

GitHub에서 GenAI Processors 저장소를 확인해 보세요. https://github.com/google-gemini/genai-processors

여러분이 무엇을 만드실지 기대가 큽니다!


감사의 말

GenAI Processors는 환상적인 팀의 헌신과 노고가 결실을 빚은 소중한 성과물입니다. 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, Murat Ozturk 등, 이 라이브러리에 만드는 데 핵심적인 역할을 해주신 분들에게 감사의 마음을 전합니다.