Pipecat est un cadre Python open source pour la construction d'agents de conversation vocale et multimodaux. Il gère l'orchestration complexe des services d'IA, le transport du réseau, le traitement audio et les interactions multimodales, vous permettant de vous concentrer sur la création d'expériences engageantes.
Vous cherchez à construire des conversations structurées? Consultez les flux PIPECAT pour gérer des états de conversation et des transitions complexes.
Vous pouvez commencer avec Pipecat en cours d'exécution sur votre machine locale, puis déplacer vos processus d'agent vers le cloud lorsque vous êtes prêt. Vous pouvez également ajouter un? Numéro de téléphone,? ️ Sortie d'image, entrée vidéo, utilisation de différents LLM, et plus encore.
# Install the module
pip install pipecat-ai
# Set up your environment
cp dot-env.template .envPour garder les choses légères, seul le cadre central est inclus par défaut. Si vous avez besoin d'une prise en charge des services d'IA tiers, vous pouvez ajouter les dépendances nécessaires avec:
pip install " pipecat-ai[option,...] "Les options disponibles incluent:
| Catégorie | Services | Installer l'exemple de commande |
|---|---|---|
| Discours à texte | Assemblyai, Azure, Deepgram, Gladia, Whisper | pip install "pipecat-ai[deepgram]" |
| LLMS | Anthropic, azure, feux d'artifice ai, gemini, olllama, openai, ensemble ai | pip install "pipecat-ai[openai]" |
| Texte vocal | AWS, Azure, Cartesia, Deepgram, ElevenLabs, Google, Lmnt, Openai, Playht, Rime, XTTS | pip install "pipecat-ai[cartesia]" |
| Discours à discours | Openai en temps réel | pip install "pipecat-ai[openai]" |
| Transport | Quotidien (webrtc), WebSocket, local | pip install "pipecat-ai[daily]" |
| Vidéo | Tavus | pip install "pipecat-ai[tavus]" |
| Vision et image | Moondream, fal | pip install "pipecat-ai[moondream]" |
| Traitement audio | SILERO VAD, KRISP, NOISEREDUCE | pip install "pipecat-ai[silero]" |
| Analytique et métriques | IA canonique, sentinelle | pip install "pipecat-ai[canonical]" |
Afficher la documentation complète des services →
Voici un bot Pipecat très basique qui salue un utilisateur lorsqu'il rejoigne une session en temps réel. Nous utiliserons quotidiennement pour le transport des médias en temps réel et la cartise pour le texte vocale.
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 ())Exécutez-le avec:
python app.py Daily fournit une interface utilisateur WebBrTC prédéfinie. Pendant que l'application est en cours d'exécution, vous pouvez visiter https://<yourdomain>.daily.co/<room_url> et écouter le bot dire bonjour!
WebSockets est très bien pour la communication serveur-serveur ou pour le développement initial. Mais pour une utilisation en production, vous aurez besoin d'un audio client-serveur pour utiliser un protocole conçu pour le transport multimédia en temps réel. (Pour une explication de la différence entre WebSockets et WebBrTC, voir cet article.)
Une façon de se présenter rapidement avec WebBrTC est de s'inscrire à un compte de développeur quotidien. Daily vous donne des SDK et des infrastructures mondiales pour le routage audio (et vidéo). Chaque compte obtient 10 000 minutes audio / vidéo / transcription gratuites chaque mois.
Inscrivez-vous ici et créez une pièce dans le tableau de bord du développeur.
Notez que vous devrez peut-être configurer un environnement virtuel avant de suivre les instructions ci-dessous. Par exemple, vous devrez peut-être exécuter ce qui suit à partir de la racine du dépôt:
python3 -m venv venv
source venv/bin/activateDe la racine de ce dépôt, exécutez ce qui suit:
pip install -r dev-requirements.txt
python -m buildCela construit le package. Pour utiliser le package localement (par exemple pour exécuter des exemples de fichiers), exécutez
pip install --editable " .[option,...] "Si vous souhaitez utiliser ce package à partir d'un autre répertoire, vous pouvez exécuter:
pip install " path_to_this_repo[option,...] "Du répertoire racine, exécutez:
pytest --doctest-modules --ignore-glob= " *to_be_updated* " --ignore-glob= * pipeline_source * src testsCe projet utilise un formatage STRICT PEP 8 via Ruff.
Vous pouvez utiliser Use-Package pour installer le package EMACS-paresseux et configurer les arguments 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 a été installé dans l'environnement venv décrit auparavant, vous devriez donc pouvoir utiliser Pyvenv-Auto pour charger automatiquement cet environnement à l'intérieur d'EMACS.
( use-package pyvenv-auto
:ensure t
:defer t
:hook (( python-mode . pyvenv-auto-run)))
Installez l'extension Ruff. Modifiez ensuite les paramètres utilisateur ( Ctrl-Shift-P Open User Settings (JSON) ) et définissez-le comme le formateur Python par défaut, et activez le formatage sur SAVE:
"[python]" : {
"editor.defaultFormatter" : " charliermarsh.ruff " ,
"editor.formatOnSave" : true
}Nous accueillons les contributions de la communauté! Que vous soyez corrigé des bogues, de l'amélioration de la documentation ou de l'ajout de nouvelles fonctionnalités, voici comment vous pouvez aider:
Avant de soumettre une demande de traction, veuillez consulter les problèmes et PRS existants pour éviter les doublons.
Nous visons à revoir toutes les contributions rapidement et à fournir des commentaires constructifs pour aider à faire fusionner vos modifications.
➡️ Rejoignez notre discorde
➡️ Lisez les documents
➡️ nous atteint sur x