Skip to content

View Support

Converse seamlessly integrates with Laravel's view system, allowing you to pass Blade views directly to message methods without needing to call ->render(). This feature makes managing complex prompts much easier by keeping them organized in dedicated Blade files rather than cluttering your PHP code with long strings.

Basic Usage with Views

Instead of writing long prompts inline, you can now pass views directly:

php
// Traditional approach with inline strings
$conversation->addSystemMessage('You are an AI assistant specialized in Laravel development...');

// New approach with views
$conversation->addSystemMessage(view('prompts.laravel-expert'));

The view file (resources/views/prompts/laravel-expert.blade.php):

blade
You are an AI assistant specialized in Laravel development with deep knowledge of:
- Laravel's architecture and design patterns
- Best practices for application structure
- Performance optimization techniques
- Security considerations
- Testing strategies

Always provide code examples when relevant and explain the reasoning behind your recommendations.

Passing Data to Views

You can pass data to views just like in any Laravel application:

php
// Pass user preferences and context to the view
$conversation->addSystemMessage(
    view('prompts.personalized-assistant', [
        'userName' => $user->name,
        'expertise' => $user->expertise_level,
        'preferences' => $user->ai_preferences,
        'language' => $user->preferred_language,
    ])
);

The view file (resources/views/prompts/personalized-assistant.blade.php):

blade
You are a helpful assistant for {{ $userName }}.

@if($expertise === 'beginner')
    Explain concepts in simple terms and avoid technical jargon.
@elseif($expertise === 'intermediate')
    Provide balanced explanations with some technical details.
@else
    Feel free to use advanced technical terminology and dive deep into implementations.
@endif

@if($preferences->get('examples'))
    Always include practical examples in your responses.
@endif

@if($language !== 'en')
    Please respond in {{ $language }}.
@endif

Using Views for Complex Prompts

Views are particularly powerful for complex, multi-part prompts that would be unwieldy as strings:

php
// Building a code review prompt with extensive guidelines
$conversation->addSystemMessage(
    view('prompts.code-reviewer', [
        'standards' => $project->coding_standards,
        'focusAreas' => ['security', 'performance', 'readability'],
        'severity' => 'strict',
    ])
);

// Adding user's code for review
$conversation->addUserMessage(
    view('prompts.review-request', [
        'code' => $codeToReview,
        'context' => $pullRequest->description,
        'files' => $pullRequest->changed_files,
    ])
);

The code reviewer prompt (resources/views/prompts/code-reviewer.blade.php):

blade
You are an expert code reviewer. Please analyze code according to these guidelines:

## Coding Standards
@foreach($standards as $standard)
- {{ $standard->name }}: {{ $standard->description }}
@endforeach

## Focus Areas
@foreach($focusAreas as $area)
    @switch($area)
        @case('security')
            ### Security Review
            - Check for SQL injection vulnerabilities
            - Validate all user inputs
            - Ensure proper authentication and authorization
            - Look for exposed sensitive data
            @break
            
        @case('performance')
            ### Performance Review
            - Identify N+1 query problems
            - Check for inefficient loops
            - Review database indexing opportunities
            - Suggest caching strategies where appropriate
            @break
            
        @case('readability')
            ### Readability Review
            - Ensure clear variable and function names
            - Check for proper code organization
            - Verify adequate comments for complex logic
            - Suggest refactoring for overly complex methods
            @break
    @endswitch
@endforeach

Severity Level: {{ ucfirst($severity) }}
@if($severity === 'strict')
    Flag even minor issues and suggest improvements for all suboptimal patterns.
@endif

More Examples

Dynamic Context Building

Use views to build context dynamically based on your application state:

php
// Building a customer support conversation with full context
$conversation->addSystemMessage(
    view('prompts.support-agent', [
        'customer' => $customer,
        'previousTickets' => $customer->tickets()->recent()->get(),
        'accountStatus' => $customer->subscription_status,
        'preferredLanguage' => $customer->language,
    ])
);

The view file (resources/views/prompts/support-agent.blade.php):

blade
You are a customer support agent helping {{ $customer->name }}.

Customer Information:
- Account Type: {{ ucfirst($accountStatus) }}
- Member Since: {{ $customer->created_at->format('F Y') }}
- Preferred Language: {{ $preferredLanguage }}

@if($previousTickets->isNotEmpty())
Recent Support History:
@foreach($previousTickets as $ticket)
- {{ $ticket->created_at->format('M d') }}: {{ $ticket->subject }} ({{ $ticket->status }})
@endforeach
@endif

Provide helpful, empathetic support while considering their account history and status.

Using Views with Conditional Logic

Views work seamlessly with Converse's conditional methods:

php
$conversation
    ->addSystemMessageIf(
        $user->wants_examples,
        view('prompts.include-examples')
    )
    ->addSystemMessageUnless(
        $user->is_premium,
        view('prompts.limitations.free-tier')
    )
    ->addUserMessage($request->question);

This approach keeps your controller logic clean while managing complex conditional prompts through organized view files.

Next Steps

  • Explore Conditional Logic to make your prompts dynamic
  • Learn about Message Types and when to use each
  • Create your own view-based prompts for complex AI interactions

Released under the MIT License.