Three AI Questions in One Request — Laravel AI SDK | Mohamed Said       [Skip to content](#main)  [ ![](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png) Mohamed SaidLaravel Backend Engineer ](https://www.msaied.com) - [Home](https://www.msaied.com)
- [Projects](https://www.msaied.com/projects)
- [Articles](https://www.msaied.com/articles)
- [Certificates](https://www.msaied.com/certificates)
- [About](https://www.msaied.com#about)

           [  Contact](https://www.msaied.com#contact) Menu 

Menu
----

Close 

 - [HomeStart here](https://www.msaied.com)
- [ProjectsCase studies](https://www.msaied.com/projects)
- [ArticlesEngineering notes](https://www.msaied.com/articles)
- [CertificatesCredentials](https://www.msaied.com/certificates)
- [AboutHow I work](https://www.msaied.com#about)
- [ContactGet in touch](https://www.msaied.com#contact)

  [Start a conversation](https://www.msaied.com#contact) [WhatsApp](https://wa.me/201094619204) [Email](mailto:hello@msaied.com) 

 1. [Home](https://www.msaied.com)
2. /
3. [Articles](https://www.msaied.com/articles)
4. /
5. [Laravel](https://www.msaied.com/articles?category=laravel)
6. /
7. Three Questions in One Request with the Laravel AI SDK: Decide with Jev

   [Laravel](https://www.msaied.com/articles?category=laravel) [AI](https://www.msaied.com/articles?category=ai) 

 Three Questions in One Request with the Laravel AI SDK: Decide with Jev
========================================================================

 Learn how to send a Boolean, a choice, and a score question to an AI model in a single Laravel AI SDK request — and why splitting answers beats one aggregate score every time.

 ![](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp) [Mohamed Said](https://www.msaied.com#person) Published 5 Oct 2026 · Updated 7 Oct 2026 · 3 min read

ShareCopy linkCopied

 ![Three Questions in One Request with the Laravel AI SDK: Decide with Jev](https://cdn.msaied.com/749/5441307aedd39fb07e66bb0baec17d7c.png) 

  On this page +1. [Why One Score Is Never Enough](#why-one-score-is-never-enough)
2. [Encapsulating the Request in a Service](#encapsulating-the-request-in-a-service)
3. [Reading Each Answer Type](#reading-each-answer-type)
4. [Boolean](#boolean)
5. [Choice](#choice)
6. [Score](#score)
7. [One Important Caveat: Questions Are Independent](#one-important-caveat-questions-are-independent)
8. [Key Takeaways](#key-takeaways)

 Why One Score Is Never Enough
-----------------------------

A single "7 out of 10" rating on a content draft sounds useful until it drops to a 5 and you have no idea which part regressed. In the second episode of **Decide with Jev**, Harris Raftopoulos shows how to ask three distinct questions about the same draft while still sending only **one request** to the Laravel AI SDK.

The three questions are:

- **Boolean** — does the draft deliver the brief?
- **Choice** — is it a tutorial, an announcement, an opinion, or something else?
- **Score** — does the reader get clear steps and a verifiable outcome?

Each answer type surfaces a different dimension of quality, so when something changes you know exactly where to look.

Encapsulating the Request in a Service
--------------------------------------

The first architectural move is extracting the request into its own service class. Both the application and the test suite call the same service, which means the questions are defined in one place and stay consistent. The question set is given a name and a version; if the evaluation criteria change later, a new version is created rather than silently mutating the existing one.

```php
// Example: versioned question set inside a service
class DraftEvaluationService
{
    public string $version = 'v1';

    public function evaluate(string $draft): EvaluationResult
    {
        return AI::ask([
            'delivers_brief' => BooleanQuestion::make('Does this draft deliver the brief?'),
            'format'         => ChoiceQuestion::make('What format is this?')
                                    ->options(['tutorial', 'announcement', 'opinion', 'other']),
            'clarity_score'  => ScoreQuestion::make('How clearly does the reader get actionable steps?'),
        ])->against($draft);
    }
}

```

> **Note:** The code above is illustrative of the pattern described in the episode. Refer to the [GitHub repository](https://github.com/harris21/decide-with-jev) for the exact implementation.

Reading Each Answer Type
------------------------

### Boolean

Straightforward — `true` or `false`. Useful as a hard gate before you bother reading the other two answers.

### Choice

A choice answer exposes:

- **Which option was selected**
- **Per-option probability** — how likely each label was
- **Confidence** — a single number indicating how clear-cut the pick was

Adding `other` to the option list is important. Without it the model is forced to squeeze every draft into one of the named categories, even when none fit.

### Score

Scores can land between defined levels. Two helper methods make them practical:

- `level()` — returns the most probable discrete level
- `normalized()` — converts the score to a `0–1` float for comparisons or storage

One Important Caveat: Questions Are Independent
-----------------------------------------------

All three questions are evaluated **simultaneously**. The format pick does not influence the clarity score, and the Boolean result does not gate the other two. If one answer should affect a downstream decision, handle that logic in PHP after the response returns — not inside the prompt.

```php
$result = app(DraftEvaluationService::class)->evaluate($draft);

if ($result->delivers_brief && $result->format->level() === 'tutorial') {
    // Only check clarity for tutorials that pass the brief
    $clarity = $result->clarity_score->normalized();
}

```

Key Takeaways
-------------

- Sending multiple typed questions in one request reduces latency and keeps prompts cohesive.
- Versioning your question sets prevents silent regressions when evaluation criteria evolve.
- Always include an `other` option in choice questions to avoid forced misclassification.
- Use `level()` for human-readable output and `normalized()` for numeric comparisons.
- Post-process answer dependencies in PHP; the AI model answers all questions in parallel.

---

*Source: [Decide with Jev: Three Questions in One Request with the Laravel AI SDK — Laravel News](https://laravel-news.com/decide-with-jev-three-questions-in-one-request-with-the-laravel-ai-sdk)*

- [Laravel AI SDK](https://www.msaied.com/articles?search=Laravel%20AI%20SDK)
- [AI](https://www.msaied.com/articles?search=AI)
- [Laravel](https://www.msaied.com/articles?search=Laravel)
- [PHP](https://www.msaied.com/articles?search=PHP)
- [Content Evaluation](https://www.msaied.com/articles?search=Content%20Evaluation)
- [Structured Outputs](https://www.msaied.com/articles?search=Structured%20Outputs)

 Frequently asked questions 
---------------------------

  Why send three questions in one request instead of three separate requests?Batching all questions into a single request reduces the number of API round-trips, lowering latency and keeping the prompt context consistent across all three answers.

   What happens if the AI model's format choice should influence the clarity score?Because all questions are evaluated simultaneously, the model cannot use one answer to inform another. You handle that dependency in PHP after the response returns — for example, only checking the clarity score when the format is 'tutorial'.

   Why should you add 'other' to a choice question's option list?Without an 'other' option, the model is forced to assign every input to one of the named categories even when none of them fit, leading to inaccurate classifications.

   ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)About the author
----------------

[Mohamed Said](https://www.msaied.com#person)Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

[About](https://www.msaied.com#about) [GitHub ↗](https://github.com/EG-Mohamed) [LinkedIn ↗](https://www.linkedin.com/in/msaiedm/) [WhatsApp ↗](https://wa.me/201094619204) [Email Address ↗](mailto:hello@msaied.com) [My CV ↗](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)  

   [Previous articleSecuring Filament Plugins with Plumb: Automated Security Scoring for PHP Packages](https://www.msaied.com/articles/securing-filament-plugins-with-plumb-automated-security-scoring-for-php-packages) [Next articleGrant: Enum-Based Roles and Permissions for Laravel](https://www.msaied.com/articles/grant-enum-based-roles-and-permissions-for-laravel)  

   On this page
-------------

1. [Why One Score Is Never Enough](#why-one-score-is-never-enough)
2. [Encapsulating the Request in a Service](#encapsulating-the-request-in-a-service)
3. [Reading Each Answer Type](#reading-each-answer-type)
4. [Boolean](#boolean)
5. [Choice](#choice)
6. [Score](#score)
7. [One Important Caveat: Questions Are Independent](#one-important-caveat-questions-are-independent)
8. [Key Takeaways](#key-takeaways)

 ###  Have a technical challenge?

 Tell me what you’re building. I reply within two working days.

[Start a conversation](https://www.msaied.com#contact) 

   Related articles
-----------------

 [ ![](https://cdn.msaied.com/747/77f5a18ff2915d631224ade73cf34aa6.png) Laravel · 3 min read### VMPal: Give Your AI Agent a Whole Computer to Work With

6 Oct 2026 ](https://www.msaied.com/articles/vmpal-give-your-ai-agent-a-whole-computer-to-work-with) [ ![](https://cdn.msaied.com/745/8744e1be5136b430da52e9fca3ed3964.png)  · 3 min read### Service Container Deep Dive: Contextual Binding, Tagging, and Method Injection

6 Oct 2026 ](https://www.msaied.com/articles/service-container-deep-dive-contextual-binding-tagging-and-method-injection-1) [ ![](https://cdn.msaied.com/748/7ff67ebbfbb3e258ee49af67e3d29859.png) Composer Pacakge · 4 min read### Synapse: A Dev Dashboard for Laravel AI SDK Agents

6 Oct 2026 ](https://www.msaied.com/articles/synapse-a-dev-dashboard-for-laravel-ai-sdk-agents) 

  Have a technical challenge?
----------------------------

Tell me what you’re building. I reply within two working days.

 [Discuss your project ↗](https://www.msaied.com#contact) 

  © 2026 Mohamed Said · Built with Laravel, meant to last.Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

 - [Home](https://www.msaied.com)
- [Articles](https://www.msaied.com/articles)
- [Certificates](https://www.msaied.com/certificates)
- [GitHub](https://github.com/EG-Mohamed)
- [LinkedIn](https://www.linkedin.com/in/msaiedm/)
- [WhatsApp](https://wa.me/201094619204)
- [Email Address](mailto:hello@msaied.com)
- [My CV](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
- [Sitemap](https://www.msaied.com/sitemap.xml)
