Choose roles, not just models
Give each model a distinct job: planner, specialist, critic, or editor. The role makes the combined answer more useful than simply asking the same question three times.
Tutorial
Send one user request to a panel of models, collect their strengths, then ask a final model to merge the best parts into one answer.
Use model combining when the prompt benefits from different perspectives: a fast draft, a careful reasoning pass, a skeptical critique, or a final editor that reconciles conflicts.
Give each model a distinct job: planner, specialist, critic, or editor. The role makes the combined answer more useful than simply asking the same question three times.
Submit the same prompt to every selected model at the same time. Parallel calls keep latency close to the slowest model instead of the sum of every model.
Ask each model to return the same shape, such as answer, assumptions, risks, and confidence. Structured outputs make synthesis easier.
Send the candidate answers to a final model with instructions to resolve disagreements, cite which candidate contributed each major point, and flag anything uncertain.
Copyable starter
This example uses the Responses API pattern: one prompt fans out to three model-role pairs, then a final synthesis prompt combines the results.
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const panel = [
{
role: "fast drafter",
model: "gpt-5.4-mini",
instruction: "Draft a concise, practical answer."
},
{
role: "deep reasoner",
model: "gpt-5.5",
instruction: "Analyze tradeoffs and edge cases carefully."
},
{
role: "skeptical reviewer",
model: "gpt-5.4",
instruction: "Find gaps, risks, and missing assumptions."
}
];
async function askPanel(prompt) {
const candidates = await Promise.all(
panel.map(async ({ role, model, instruction }) => {
const response = await client.responses.create({
model,
input: [
{ role: "system", content: instruction },
{ role: "user", content: prompt }
]
});
return { role, model, text: response.output_text };
})
);
const synthesis = await client.responses.create({
model: "gpt-5.5",
input: [
{
role: "system",
content: "Merge the best ideas into one answer. Resolve conflicts, preserve useful nuance, and call out uncertainties."
},
{
role: "user",
content: JSON.stringify({ originalPrompt: prompt, candidates }, null, 2)
}
]
});
return {
candidates,
finalAnswer: synthesis.output_text
};
}
Use this instruction when combining model outputs:
You are the synthesis model. Read the original prompt and all candidate answers. Produce one final answer that keeps the strongest points, removes duplication, resolves contradictions, and lists any unresolved uncertainty. If a candidate answer is likely wrong, explain why briefly.