pipecat.flows module, so the classes you write against are FlowConfig, Flow, FlowManager, NodeConfig, and FlowsFunctionSchema.
This approach solves a common problem: monolithic prompts with many tools lead to hallucinations and lower accuracy. Pipecat Flows breaks complex tasks into focused steps with clear, specific instructions.
When to Use Flows
A flow is best suited for use cases where:- You need precise control over how a conversation progresses through specific steps
- Your bot handles complex tasks that can be broken down into smaller, manageable pieces
- You want to improve LLM accuracy by focusing the model on one specific task at a time instead of managing multiple responsibilities simultaneously
How Pipecat Flows Builds on the Pipeline
A Pipecat pipeline provides your bot’s core mechanics — receiving audio, transcribing input, running LLM completions, converting responses to audio, and sending audio back to the user. Pipecat Flows builds on that pipeline to structure the conversation, managing context and tools as it moves from one state to the next. This keeps your conversation logic cleanly separated from the pipeline mechanics.Two Ways to Write a Flow
A flow can be declarative — the graph is data — or programmatic — the graph is code. Both are fully supported, and a node means the same thing in each.Declarative
A declarative flow separates business logic from code. The graph, the prompts, which tools each node offers, and where each tool leads live in a flow config: a YAML or JSON document loaded at runtime. The handlers — the Python that does work when a tool is called — ship with the bot. Because the flow is data, one deployed bot can run whichever flow a session calls for, loaded from a file, a database, or a CMS. Someone who is not an engineer can change what the bot says or where a step leads without a deploy.Programmatic
A programmatic flow buildsNodeConfig objects in Python. Functions do their work and return the next node directly, so the graph exists only as the code that constructs it.
Choosing
Start declarative. Write the flow in code when it needs code:- Schema control. A direct function’s parameters come from its signature and docstring. When a tool needs an
enum, a numeric range, or another JSON Schema constraint, define it withFlowsFunctionSchema. - Structure from runtime data. A prompt can read state, but a node whose shape depends on the conversation — offering different tools, or routing somewhere the graph doesn’t name — has to be built in code.
- A flow driven from outside the conversation. Nodes set from transport events, a parallel pipeline playing hold music, another worker handing off over the bus.
- The flow is incidental. When the code is about a pipeline feature, the flow stays in Python beside it.
Installation
Pipecat Flows is included with Pipecat. Install Pipecat with the dependencies for your transport, STT, LLM, and TTS providers:Visual Flow Editor
The Pipecat Flows Visual Editor lets you design conversation flows visually.Ready to Build?
Quickstart
Build your first conversation flow in minutes
Flow Configs
Write a flow as data and load it at runtime
Examples
Explore real-world examples and use cases
API Reference
Complete reference docs and technical details