Pipecat เป็นเฟรมเวิร์ก Python โอเพนซอร์สสำหรับการสร้างเสียงและตัวแทนการสนทนาหลายรูปแบบ มันจัดการกับการประสานงานที่ซับซ้อนของบริการ AI การขนส่งเครือข่ายการประมวลผลเสียงและการโต้ตอบหลายรูปแบบช่วยให้คุณมุ่งเน้นไปที่การสร้างประสบการณ์ที่น่าสนใจ
กำลังมองหาการสร้างการสนทนาที่มีโครงสร้างหรือไม่? ตรวจสอบการไหลของ Pipecat สำหรับการจัดการสถานะการสนทนาที่ซับซ้อนและการเปลี่ยนผ่าน
คุณสามารถเริ่มต้นด้วย Pipecat ที่ทำงานบนเครื่องในพื้นที่ของคุณจากนั้นย้ายกระบวนการตัวแทนของคุณไปยังคลาวด์เมื่อคุณพร้อม คุณสามารถเพิ่ม? หมายเลขโทรศัพท์️เอาต์พุตรูปภาพอินพุตวิดีโอใช้ LLM ที่แตกต่างกันและอื่น ๆ
# Install the module
pip install pipecat-ai
# Set up your environment
cp dot-env.template .envเพื่อให้สิ่งต่าง ๆ มีน้ำหนักเบาเพียงกรอบหลักเท่านั้นที่รวมอยู่ในค่าเริ่มต้น หากคุณต้องการการสนับสนุนสำหรับบริการ AI ของบุคคลที่สามคุณสามารถเพิ่มการพึ่งพาที่จำเป็นด้วย:
pip install " pipecat-ai[option,...] "ตัวเลือกที่มีอยู่รวมถึง:
| หมวดหมู่ | บริการ | ติดตั้งตัวอย่างคำสั่ง |
|---|---|---|
| คำพูดเป็นข้อความ | Assemblyai, Azure, Deepgram, Gladia, Whisper | pip install "pipecat-ai[deepgram]" |
| LLMS | มานุษยวิทยา, Azure, ดอกไม้ไฟ AI, Gemini, Ollama, Openai, AI ร่วมกัน | pip install "pipecat-ai[openai]" |
| ข้อความเป็นคำพูด | AWS, Azure, Cartesia, Deepgram, Elevenlabs, Google, LMNT, Openai, Playht, Rime, XTTS | pip install "pipecat-ai[cartesia]" |
| การพูดด้วยคำพูด | Openai เรียลไทม์ | pip install "pipecat-ai[openai]" |
| ขนส่ง | รายวัน (webrtc), websocket, local | pip install "pipecat-ai[daily]" |
| วิดีโอ | ทาฟัส | pip install "pipecat-ai[tavus]" |
| วิสัยทัศน์และภาพ | Moondream, Fal | pip install "pipecat-ai[moondream]" |
| การประมวลผลเสียง | Silero vad, krisp, noisereuce | pip install "pipecat-ai[silero]" |
| Analytics & Metrics | Canonical AI, Sentry | pip install "pipecat-ai[canonical]" |
ดูเอกสารบริการเต็มรูปแบบ→
นี่คือบอท Pipecat ขั้นพื้นฐานที่ทักทายผู้ใช้เมื่อพวกเขาเข้าร่วมเซสชันเรียลไทม์ เราจะใช้รายวันสำหรับการขนส่งสื่อแบบเรียลไทม์และคาร์ทีเซียสำหรับการพูดแบบข้อความ
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 ())เรียกใช้กับ:
python app.py รายวันให้ส่วนต่อประสานผู้ใช้ WebRTC prebuilt ในขณะที่แอปกำลังทำงานอยู่คุณสามารถเยี่ยมชมได้ที่ https://<yourdomain>.daily.co/<room_url> และฟังบอททักทาย!
WebSockets ใช้ได้ดีสำหรับการสื่อสารกับเซิร์ฟเวอร์กับเซิร์ฟเวอร์หรือเพื่อการพัฒนาเบื้องต้น แต่สำหรับการใช้งานการผลิตคุณจะต้องใช้เสียงไคลเอนต์-เซิร์ฟเวอร์เพื่อใช้โปรโตคอลที่ออกแบบมาสำหรับการขนส่งสื่อแบบเรียลไทม์ (สำหรับคำอธิบายความแตกต่างระหว่าง WebSockets และ WebRTC ดูโพสต์นี้)
วิธีหนึ่งในการลุกขึ้นและทำงานอย่างรวดเร็วด้วย WebRTC คือการลงทะเบียนสำหรับบัญชีนักพัฒนารายวัน ทุกวันให้ SDK และโครงสร้างพื้นฐานระดับโลกสำหรับการกำหนดเส้นทางเสียง (และวิดีโอ) ทุกบัญชีจะได้รับ 10,000 นาที/วิดีโอ/การถอดความฟรีในแต่ละเดือน
ลงทะเบียนที่นี่และสร้างห้องในแผงควบคุมของนักพัฒนา
โปรดทราบว่าคุณอาจต้องตั้งค่าสภาพแวดล้อมเสมือนจริงก่อนทำตามคำแนะนำด้านล่าง ตัวอย่างเช่นคุณอาจต้องเรียกใช้สิ่งต่อไปนี้จากรูทของ repo:
python3 -m venv venv
source venv/bin/activateจากรากของ repo นี้เรียกใช้สิ่งต่อไปนี้:
pip install -r dev-requirements.txt
python -m buildสิ่งนี้สร้างแพ็คเกจ หากต้องการใช้แพ็คเกจในเครื่อง (เช่นเพื่อเรียกใช้ไฟล์ตัวอย่าง) ให้เรียกใช้
pip install --editable " .[option,...] "หากคุณต้องการใช้แพ็คเกจนี้จากไดเรกทอรีอื่นคุณสามารถเรียกใช้:
pip install " path_to_this_repo[option,...] "จากไดเรกทอรีราก Run:
pytest --doctest-modules --ignore-glob= " *to_be_updated* " --ignore-glob= * pipeline_source * src testsโครงการนี้ใช้การจัดรูปแบบ Pep 8 ที่เข้มงวดผ่าน Ruff
คุณสามารถใช้ use-package เพื่อติดตั้งแพ็คเกจ Emacs-Lazy-Ruff และกำหนดค่าอาร์กิวเมนต์ 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 ได้รับการติดตั้งในสภาพแวดล้อม venv ที่อธิบายไว้ก่อนหน้านี้ดังนั้นคุณควรใช้ Pyvenv-Auto เพื่อโหลดสภาพแวดล้อมนั้นภายใน EMAC โดยอัตโนมัติ
( use-package pyvenv-auto
:ensure t
:defer t
:hook (( python-mode . pyvenv-auto-run)))
ติดตั้งส่วนขยายรุ จากนั้นแก้ไขการตั้งค่าผู้ใช้ ( CTRL-Shift-p Open User Settings (JSON) ) และตั้งค่าเป็นรูปแบบ Python เริ่มต้นและเปิดใช้งานการจัดรูปแบบบนบันทึก:
"[python]" : {
"editor.defaultFormatter" : " charliermarsh.ruff " ,
"editor.formatOnSave" : true
}เรายินดีต้อนรับการมีส่วนร่วมจากชุมชน! ไม่ว่าคุณจะแก้ไขข้อบกพร่องการปรับปรุงเอกสารหรือเพิ่มคุณสมบัติใหม่นี่คือวิธีที่คุณสามารถช่วยได้:
ก่อนส่งคำขอดึงโปรดตรวจสอบปัญหาที่มีอยู่และ PRS เพื่อหลีกเลี่ยงการทำซ้ำ
เรามุ่งมั่นที่จะตรวจสอบการมีส่วนร่วมทั้งหมดทันทีและให้ข้อเสนอแนะที่สร้างสรรค์เพื่อช่วยให้การเปลี่ยนแปลงของคุณรวมเข้าด้วยกัน
➡เข้าร่วม Discord ของเรา
➡อ่านเอกสาร
➡ถึงเราที่ x