Pipecat es un marco de Python de código abierto para construir voz y agentes de conversación multimodal. Maneja la compleja orquestación de los servicios de IA, el transporte de redes, el procesamiento de audio e interacciones multimodales, lo que le permite concentrarse en crear experiencias atractivas.
¿Buscas construir conversaciones estructuradas? Consulte los flujos de Pipecat para administrar estados y transiciones de conversación complejos.
Puede comenzar con Pipecat ejecutándose en su máquina local, luego mover los procesos de su agente a la nube cuando esté listo. También puedes agregar un? Número de teléfono,? ️ Salida de imagen, entrada de video, use diferentes LLM y más.
# Install the module
pip install pipecat-ai
# Set up your environment
cp dot-env.template .envPara mantener las cosas livianas, solo el marco principal se incluye de forma predeterminada. Si necesita soporte para servicios de IA de terceros, puede agregar las dependencias necesarias con:
pip install " pipecat-ai[option,...] "Las opciones disponibles incluyen:
| Categoría | Servicios | Instalar ejemplo de comando |
|---|---|---|
| Voz a texto | Assemyai, Azure, Deepgram, Gladia, Whisper | pip install "pipecat-ai[deepgram]" |
| LLMS | Antrópico, azure, fuegos artificiales ai, géminis, ollama, opadai, juntos ai | pip install "pipecat-ai[openai]" |
| Texto a voz | AWS, Azure, Cartesia, Deepgram, Elevenlabs, Google, LMNT, OpenAi, Playht, Rime, XTTS | pip install "pipecat-ai[cartesia]" |
| Habla a voz | OpenAI en tiempo real | pip install "pipecat-ai[openai]" |
| Transporte | Diario (WebRTC), WebSocket, local | pip install "pipecat-ai[daily]" |
| Video | Tavus | pip install "pipecat-ai[tavus]" |
| Visión e imagen | Moondream, Fal | pip install "pipecat-ai[moondream]" |
| Procesamiento de audio | Silero Vad, Krisp, Noisereduce | pip install "pipecat-ai[silero]" |
| Análisis y métricas | IA canónica, centinela | pip install "pipecat-ai[canonical]" |
Ver documentación de servicios completos →
Aquí hay un bot Pipecat muy básico que saluda a un usuario cuando se une a una sesión en tiempo real. Usaremos diariamente para el transporte de medios en tiempo real y la carnesia para texto a voz.
import asyncio
from pipecat . frames . frames import EndFrame , TextFrame
from pipecat . pipeline . pipeline import Pipeline
from pipecat . pipeline . task import PipelineTask
from pipecat . pipeline . runner import PipelineRunner
from pipecat . services . cartesia import CartesiaTTSService
from pipecat . transports . services . daily import DailyParams , DailyTransport
async def main ():
# Use Daily as a real-time media transport (WebRTC)
transport = DailyTransport (
room_url = ...,
token = "" , # leave empty. Note: token is _not_ your api key
bot_name = "Bot Name" ,
params = DailyParams ( audio_out_enabled = True ))
# Use Cartesia for Text-to-Speech
tts = CartesiaTTSService (
api_key = ...,
voice_id = ...
)
# Simple pipeline that will process text to speech and output the result
pipeline = Pipeline ([ tts , transport . output ()])
# Create Pipecat processor that can run one or more pipelines tasks
runner = PipelineRunner ()
# Assign the task callable to run the pipeline
task = PipelineTask ( pipeline )
# Register an event handler to play audio when a
# participant joins the transport WebRTC session
@ transport . event_handler ( "on_first_participant_joined" )
async def on_first_participant_joined ( transport , participant ):
participant_name = participant . get ( "info" , {}). get ( "userName" , "" )
# Queue a TextFrame that will get spoken by the TTS service (Cartesia)
await task . queue_frame ( TextFrame ( f"Hello there, { participant_name } !" ))
# Register an event handler to exit the application when the user leaves.
@ transport . event_handler ( "on_participant_left" )
async def on_participant_left ( transport , participant , reason ):
await task . queue_frame ( EndFrame ())
# Run the pipeline task
await runner . run ( task )
if __name__ == "__main__" :
asyncio . run ( main ())Ejecutarlo con:
python app.py Daily proporciona una interfaz de usuario de WEBRTC prebuilt. Mientras la aplicación se está ejecutando, puede visitar en https://<yourdomain>.daily.co/<room_url> y escuche el bot saluda!
WebSockets están bien para la comunicación de servidor a servidor o para el desarrollo inicial. Pero para el uso de la producción, necesitará audio cliente-servidor para usar un protocolo diseñado para el transporte de medios en tiempo real. (Para una explicación de la diferencia entre WebSockets y WebRTC, vea esta publicación).
Una forma de ponerse en funcionamiento rápidamente con WEBRTC es registrarse para una cuenta diaria de desarrollador. Daily le brinda SDK e infraestructura global para el enrutamiento de audio (y video). Cada cuenta tiene 10,000 minutos de audio/video/transcripción gratis cada mes.
Regístrese aquí y cree una habitación en el tablero de desarrolladores.
Tenga en cuenta que es posible que deba configurar un entorno virtual antes de seguir las instrucciones a continuación. Por ejemplo, es posible que deba ejecutar lo siguiente desde la raíz del repositorio:
python3 -m venv venv
source venv/bin/activateDesde la raíz de este repositorio, ejecute lo siguiente:
pip install -r dev-requirements.txt
python -m buildEsto construye el paquete. Para usar el paquete localmente (por ejemplo, ejecutar archivos de muestra), ejecute
pip install --editable " .[option,...] "Si desea usar este paquete desde otro directorio, puede ejecutar:
pip install " path_to_this_repo[option,...] "Desde el directorio raíz, ejecute:
pytest --doctest-modules --ignore-glob= " *to_be_updated* " --ignore-glob= * pipeline_source * src testsEste proyecto utiliza el formato PEP 8 estricto a través de Ruff.
Puede usar el paquete Use para instalar el paquete Emacs Lazy-Ruff y configurar argumentos ruff :
( use-package lazy-ruff
:ensure t
:hook (( python-mode . lazy-ruff-mode))
:config
( setq lazy-ruff-format-command " ruff format " )
( setq lazy-ruff-only-format-block t )
( setq lazy-ruff-only-format-region t )
( setq lazy-ruff-only-format-buffer t )) ruff se instaló en el entorno venv descrito antes, por lo que debería poder usar Pyvenv-Auto para cargar automáticamente ese entorno dentro de los emacs.
( use-package pyvenv-auto
:ensure t
:defer t
:hook (( python-mode . pyvenv-auto-run)))
Instale la extensión de Ruff. Luego edite la configuración del usuario ( CTRL-Shift-P Open User Settings (JSON) ) y estén como el formateador Python predeterminado y habilite el formateo en Guardar:
"[python]" : {
"editor.defaultFormatter" : " charliermarsh.ruff " ,
"editor.formatOnSave" : true
}¡Agradecemos las contribuciones de la comunidad! Ya sea que esté arreglando errores, mejorando la documentación o agregando nuevas funciones, así es como puede ayudar:
Antes de enviar una solicitud de extracción, verifique los problemas existentes y los PRS para evitar duplicados.
Nuestro objetivo es revisar todas las contribuciones de inmediato y proporcionar comentarios constructivos para ayudar a que sus cambios se fusionen.
➡️ Únete a nuestra discordia
➡️ Lea los documentos
➡️ Comuníquese con nosotros en x