Skip to content

emcie-co/parlant

Repository files navigation

🎯 The Problem Every AI Developer Faces

You build an AI agent. It works great in testing. Then real users start talking to it and...

  • ❌ It ignores your carefully crafted system prompts
  • ❌ It hallucinates responses in critical moments
  • ❌ It can't handle edge cases consistently
  • ❌ Each conversation feels like a roll of the dice

Sound familiar? You're not alone. This is the #1 pain point for developers building production AI agents.

⚑ The Solution: Stop Fighting Prompts, Teach Principles

Parlant flips the script on AI agent development. Instead of hoping your LLM will follow instructions, Parlant ensures it.

# Traditional approach: Cross your fingers 🀞
system_prompt = "You are a helpful assistant. Please follow these 47 rules..."

# Parlant approach: Ensured compliance βœ…
await agent.create_guideline(
    condition="Customer asks about refunds",
    action="Check order status first to see if eligible",
    tools=[check_order_status],
)

Parlant gives you all the structure you need to build customer-facing agents that behave exactly as your business requires:

  • Journeys: Define clear customer journeys and how your agent should respond at each step.

  • Behavioral Guidelines: Easily craft agent behavior; Parlant will match the relevant elements contextually.

  • Tool Use: Attach external APIs, data fetchers, or backend services to specific interaction events.

  • Domain Adaptation: Teach your agent domain-specific terminology and craft personalized responses.

  • Canned Responses: Use response templates to eliminate hallucinations and guarantee style consistency.

  • Explainability: Understand why and when each guideline was matched and followed.

How It Works

When your agent receives a message, Parlant's engine prepares a fully-aligned response before generating it:

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#e8f5e9', 'primaryTextColor': '#1b5e20', 'primaryBorderColor': '#81c784', 'lineColor': '#66bb6a', 'secondaryColor': '#fff9e1', 'tertiaryColor': '#F3F5F6'}}}%%
flowchart LR
    A(User):::outputNode

    subgraph Engine["Parlant Engine"]
        direction LR
        B["Match Guidelines and Resolve Journey States"]:::matchNode
        C["Call Contextually-Associated Tools"]:::toolNode
        D["Generated Message"]:::composeNode
        E["Canned Message"]:::cannedNode
    end

    A a@-->|πŸ’¬ User Input| B
    B b@--> C
    C c@-->|Fluid Output Mode?| D
    C d@-->|Strict Output Mode?| E
    D e@-->|πŸ’¬ Fluid Output| A
    E f@-->|πŸ’¬ Canned Output| A

    a@{animate: true}
    b@{animate: true}
    c@{animate: true}
    d@{animate: true}
    e@{animate: true}
    f@{animate: true}

    linkStyle 2 stroke-width:2px
    linkStyle 4 stroke-width:2px
    linkStyle 3 stroke-width:2px,stroke:#3949AB
    linkStyle 5 stroke-width:2px,stroke:#3949AB

    classDef composeNode fill:#F9E9CB,stroke:#AB8139,stroke-width:2px,color:#7E5E1A,stroke-width:0
    classDef cannedNode fill:#DFE3F9,stroke:#3949AB,stroke-width:2px,color:#1a237e,stroke-width:0
Loading

The guidelines and tools relevant to the current conversational state are carefully matched and enforced, keeping your agent focused and aligned, even with complex behavioral configurations.

πŸš€ Get Your Agent Running in 60 Seconds

pip install parlant
import parlant.sdk as p

@p.tool
async def get_weather(context: p.ToolContext, city: str) -> p.ToolResult:
    # Your weather API logic here
    return p.ToolResult(f"Sunny, 72Β°F in {city}")

@p.tool
async def get_datetime(context: p.ToolContext) -> p.ToolResult:
    from datetime import datetime
    return p.ToolResult(datetime.now())

async def main():
    async with p.Server() as server:
        agent = await server.create_agent(
            name="WeatherBot",
            description="Helpful weather assistant"
        )

        # Have the agent's context be updated on every response (though
        # update interval is customizable) using a context variable.
        await agent.create_variable(name="current-datetime", tool=get_datetime)

        # Control and guide agent behavior with natural language
        await agent.create_guideline(
            condition="User asks about weather",
            action="Get current weather and provide tips and suggestions",
            tools=[get_weather]
        )

        # Add other (reliably enforced) behavioral modeling elements
        # ...

        # πŸŽ‰ Test playground ready at http://localhost:8800
        # Integrate the official React widget into your app,
        # or follow the tutorial to build your own frontend!

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

That's it! Your agent is running with ensured rule-following behavior.

🎬 See It In Action

Parlant Demo

πŸ§ͺ Test Your Agent

Validate agent behavior with the integrated testing & evaluation framework.

from parlant.testing import Suite, InteractionBuilder
from parlant.testing.steps import AgentMessage, CustomerMessage

suite = Suite(server_url="http://localhost:8800/", agent_id="your_agent")

@suite.scenario
async def test_booking_flow():
    async with suite.session() as session:
        # Build conversation history
        history = (
            InteractionBuilder()
            .step(CustomerMessage("Man it's cold today"))
            .step(AgentMessage("Tell me about it, I'm freezing my nuts and bolts off."))
            .step(CustomerMessage("Where are you from? I'm from Boston"))
            .step(AgentMessage("What a dream! I'm stuck in a data center in San Fran..."))
            .build()
        )

        # Preload session with event history
        await session.add_events(history)

        # Send customer message
        response = await session.send("What's the temperature there today?")

        # Assert on agent response using LLM-as-a-Judge
        await response.should("provide weather details for San Francisco")

Run with: parlant-test your_tests.py

Parlant Testing

πŸ”₯ Why Developers Are Switching to Parlant

πŸ—οΈ Traditional AI Frameworks

⚑ Parlant

  • Write complex system prompts
  • Hope the LLM follows them
  • Debug unpredictable behaviors
  • Scale by prompt engineering
  • Cross fingers for reliability
  • Define rules in natural language
  • Ensured rule compliance
  • Predictable, consistent behavior
  • Scale by adding guidelines
  • Production-ready from day one

🎯 Perfect For Your Use Case

Financial Services Healthcare E-commerce Legal Tech
Compliance-first design HIPAA-ready agents Customer service at scale Precise legal guidance
Built-in risk management Patient data protection Order processing automation Document review assistance

πŸ› οΈ Enterprise-Grade Features

  • 🧭 Conversational Journeys - Lead the customer step-by-step to a goal
  • 🎯 Dynamic Guideline Matching - Context-aware rule application
  • πŸ”§ Reliable Tool Integration - APIs, databases, external services
  • πŸ“Š Conversation Analytics - Deep insights into agent behavior
  • πŸ”„ Iterative Refinement - Continuously improve agent responses
  • πŸ›‘οΈ Built-in Guardrails - Prevent hallucination and off-topic responses
  • πŸ“± React Widget - Drop-in chat UI for any web app
  • πŸ” Full Explainability - Understand every decision your agent makes

πŸ“ˆ Join 10,000+ Developers Building Better AI

Companies using Parlant:

Financial institutions β€’ Healthcare providers β€’ Legal firms β€’ E-commerce platforms

Star History Chart

🌟 What Developers Are Saying

"By far the most elegant conversational AI framework that I've come across! Developing with Parlant is pure joy." β€” Vishal Ahuja, Senior Lead, Customer-Facing Conversational AI @ JPMorgan Chase

πŸƒβ€β™‚οΈ Quick Start Paths

🎯 I want to test it myself β†’ 5-minute quickstart
πŸ› οΈ I want to see an example β†’ Healthcare agent example
πŸš€ I want to get involved β†’ Join our Discord community

🀝 Community & Support

πŸ“„ License

Apache 2.0 - Use it anywhere, including commercial projects.


Ready to build AI agents that actually work?

⭐ Star this repo β€’ πŸš€ Try Parlant now β€’ πŸ’¬ Join Discord

Built with ❀️ by the team at Emcie