What This Article Covers and What It Leaves to the Original Article

To give the conclusion first: this article organizes the two concepts that underpin the orchestrator AI—ensembles and model routing—as general principles. For implementation details of Fugu Max itself, please refer to the original explanatory article (on Qiita) at this time.

The reason for this deliberate scoping is that pinning down details while public information is still limited invites misunderstanding. On the other hand, if you solidify the fundamentals of these concepts, you will be able to evaluate for yourself 'which component this new piece of information is about' as it emerges. Foundational knowledge is a tool for digesting breaking news.

The structure follows this order: ensembles, routing, then operational considerations. Since the first installment covered the overall picture of the 'orchestrator,' this article corresponds to its inner workings.

What Is an Ensemble: Combining Multiple Answers to Improve Accuracy

複数のAIモデルの回答を1つに統合するアンサンブルの仕組み図

[Image: a diagram showing how responses from multiple models are integrated]

An ensemble is an approach in which you assign the same task to multiple models and combine their results to get closer to a better answer than any single model could provide. The goal is to 'get stronger by combining.'

It works because each model has different strengths and weaknesses. If their errors occur in different places, those errors can cancel each other out through majority voting or cross-checking. The outcome becomes less susceptible to any single model's accidental mistakes.

Ensembles are a classic technique long used in machine learning—random forests and gradient boosting have long been known to deliver stronger results than single models. The same idea has been applied to large language models as well, and the practice of comparing and integrating outputs from multiple models continues to spread.

A very simple example is majority voting: ask three models the same question, and if two of them produce the same answer, adopt it. Even this alone makes the system robust against a single model's accidental errors. It costs three times as much, but in situations where certainty matters, it can be worth the trade-off.

As for how strictly Fugu Max performs ensembling, refer to the public information—but for now, let's hold onto this concept as a basic building block of 'bundling.'

What Is Model Routing: Choosing the Right Model for the Task

リクエストの難易度に応じて処理モデルを選び分けるルーティングの仕組み図

[Image: a diagram showing how models are selected according to task difficulty]

Model routing is a mechanism that examines the nature of incoming tasks and selects which model to delegate processing to. If ensembles are about 'getting stronger by combining,' routing takes the approach of 'assigning the right one from the start.'

The reason it is needed is simple: processing every task with the most powerful model means paying for excessive quality and cost on routine work, while delegating everything to a cheap model degrades quality on hard problems. Selective routing fills the gap between these two failure modes.

Routing means automatically making these decisions for each request—for example, 'this question is a summarization, so send it to a small model' or 'this question requires multi-step reasoning, so send it to a high-end model.' The accuracy of these decisions determines both cost and quality.

So what cues does this decision-making rely on? The next two sections examine the decision inputs and the pseudocode that forms the skeleton.

Information Used as Routing Decision Inputs

The first input is the task type. Different models excel at different types—summarization, translation, classification, code generation, and so on. If you can build a lookup table from past results showing 'this type is stable with this model,' decision-making becomes dramatically easier.

The second is the length and complexity of the input. Tasks that require grasping long contexts or performing multi-step reasoning tend to fail less when routed to larger models.

The third is past results. Leveraging the history of which models failed on similar tasks improves decision accuracy. The fourth is the cost and latency budget—the constraint of 'how much time and money can we spend on this task' can sometimes determine the final choice.

The Skeleton of Routing in Pseudocode

The pseudocode presented here is meant to convey the concept; it does not represent Fugu Max's actual implementation. The goal is to give you a feel for just how simple the skeleton of routing really is.

def route(task, budget):
    difficulty = estimate_difficulty(task)  # タスクの難易度を推定
    if difficulty > HIGH_THRESHOLD or task.needs_deep_reasoning:
        return frontier_model(task)   # 難問は上位モデルへ
    if difficulty < LOW_THRESHOLD:
        return small_model(task)      # 定型処理は小型モデルへ
    return mid_model(task, budget)    # 残りは中位モデルで調整

What matters is the accuracy of estimate_difficulty. If this is sloppy, hard problems get routed to small models and quality drops, while easy tasks get routed to high-end models and cost is wasted. The quality of routing is, for the most part, the quality of this judgment.

And in actual operation, you will need a mechanism to keep updating this judgment as new models appear and tasks evolve, along with monitoring to notice when the judgment misses. Short code does not mean light operations.

Practical Considerations: Latency, Failures, and Quality Variance

To state the conclusion first: the more layers you bundle, the more operational concerns you need to keep in mind. The three most representative are latency, failures, and quality variance.

Regarding latency: since ensembles wait for multiple models to finish, responses tend to be slower. In situations requiring real-time performance, running models in parallel and designing timeouts that cut off answers after a fixed period become prerequisites.

Regarding failures: depending on multiple model APIs means more endpoints to connect to, so you need to decide in advance on fallbacks (alternative routes) for when one of them goes down. That said, viewed from the other side, it also means you have more recovery options than depending on a single model. It is not that the approach is inherently fragile—this is an area where the quality of your preparation determines success or failure.

Regarding quality variance: each model's strengths and weaknesses translate directly into variance in results. Knowing—from your own evaluation data—how reliable each model is on each task forms the foundation of stable operation.

To give a concrete example: if a particular model's API becomes unstable at night and routing can automatically switch to a different model, the service as a whole keeps running. This 'prepared fallback destination' is precisely the insurance that a bundled architecture provides.

Part 2 Summary: Two Tools and One Commitment

The orchestrator AI has two basic components: the 'ensemble,' which combines multiple answers to make them stronger, and 'routing,' which selects the right model for each task. Both are applications of classic concepts to LLMs—not magic, but the accumulation of design decisions.

And to actually run them, you need the 'resolve' to prepare for latency, failures, and quality variance. The code may be short, but operations are an area that deserves serious thought.

In Part 3, we will consider how the value of the 'bundling layer' changes as per-model prices continue to fall, from the perspective of cost strategy.