How to choose a model: sort tasks by difficulty, then test on your own data
Start from task difficulty — small, cheap models for classification, extraction and rewriting; mid-tier models for Q&A, summaries and writing; flagship or reasoning models for hard multi-step work. A tier table, an evaluation script and live price comparisons.
Choosing a model takes three steps: place the task in a difficulty tier, pick two to four candidates in that tier, then test them on 50 to 200 of your own real samples and take the cheapest one that meets the bar. Most business tasks do not need the most expensive model. For classification, extraction and rewriting, a small model often costs a few percent of a flagship's price — compare the live prices below.
Sort tasks by difficulty
| Tier | Typical tasks | What matters |
|---|---|---|
| Light | Intent classification, sentiment, field extraction, format conversion, short rewrites | Short inputs and outputs at high volume: unit price and speed |
| Mid | Knowledge-base Q&A, support replies, summaries, marketing copy, translation | Balance quality and price; inputs are often long, so watch the input price |
| Flagship and reasoning | Multi-step reasoning, complex analysis, synthesizing long documents, multi-step tool use | Quality first; use for a small number of high-value requests |
To read invoices, screenshots or product photos, pick a model with vision. Knowledge-base search also needs an embedding model and a rerank model — see Enterprise knowledge base and RAG.
Light-tier candidates
| Model | Vendor | Cheapest group | Input ¥/1M | Output ¥/1M | Per request ¥ |
|---|---|---|---|---|---|
| gpt-5.4-mini | OpenAI | Standard | ¥1.5 | ¥9 | — |
| gpt-4o-mini | OpenAI | Standard | ¥0.3 | ¥1.2 | — |
| doubao-seed-2-0-mini-260215 | ByteDance Doubao | China Models | ¥0.28 | ¥2.8 | — |
| Claude Haiku 5.5 | Anthropic | Claude Plus | ¥0.4 | ¥2 | — |
Prices in CNY, cheapest group for each model; updated Nov 12, 2026, 8:17 PM.
Mid-tier candidates
| Model | Vendor | Cheapest group | Input ¥/1M | Output ¥/1M | Per request ¥ |
|---|---|---|---|---|---|
| deepseek-v4.1-flash | DeepSeek | China Models | ¥2.8 | ¥11.2 | — |
| qwen3.5-plus | Qwen | China Models | ¥1.12 | ¥6.72 | — |
| gemini-3.8-flash | Standard | ¥1.5 | ¥7.5 | — | |
| Claude Sonnet 5.5 | Anthropic | Claude Lite | ¥3.2 | ¥16 | — |
Prices in CNY, cheapest group for each model; updated Nov 12, 2026, 8:17 PM.
Flagship and reasoning candidates
| Model | Vendor | Cheapest group | Input ¥/1M | Output ¥/1M | Per request ¥ |
|---|---|---|---|---|---|
| gpt-5.5 | OpenAI | Standard | ¥10 | ¥80 | — |
| Claude Opus 5.5 | Anthropic | Claude Lite | ¥8 | ¥40 | — |
| gemini-3.1-pro-preview | Standard | ¥4 | ¥24 | — | |
| deepseek-v4-pro | DeepSeek | China Models | ¥16.8 | ¥33.6 | — |
Prices in CNY, cheapest group for each model; updated Nov 12, 2026, 8:17 PM.
The tiers follow how each vendor positions its models, and models within a tier still differ a lot. Your own evaluation has the final say.
Test on your own data
- Collect samples: take 50 to 200 real inputs and write the expected result for each, covering common and tricky cases.
- Fix the prompt: give every candidate the same system prompt and parameters so the comparison is fair.
- Run and record: note whether each answer is right, how long it took, and the tokens in
usage. - Do the math: among models that meet your accuracy bar, multiply average tokens by unit prices and pick the lowest cost per request.
- Keep a runner-up as a fallback for when the main model has problems.
This script sends the same samples to several candidates and reports accuracy, average latency and average tokens:
import os
import time
from openai import OpenAI
client = OpenAI(base_url="https://open.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
candidates = [
"gpt-5.4-mini",
"deepseek-v4.1-flash",
"qwen3.5-plus",
]
samples = [
{"text": "My parcel has been stuck for three days", "label": "shipping"},
{"text": "Can I return this jacket?", "label": "returns"},
# replace with your own 50 to 200 samples
]
system = "Classify the user message as one of: shipping, returns, product, other. Output the label only."
for model in candidates:
correct, seconds, tokens_in, tokens_out = 0, 0.0, 0, 0
for s in samples:
t0 = time.time()
resp = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system},
{"role": "user", "content": s["text"]},
],
)
seconds += time.time() - t0
correct += resp.choices[0].message.content.strip() == s["label"]
tokens_in += resp.usage.prompt_tokens
tokens_out += resp.usage.completion_tokens
n = len(samples)
print(f"{model}: accuracy {correct / n:.0%}, avg {seconds / n:.2f}s, avg tokens {tokens_in / n:.0f} / {tokens_out / n:.0f}")Same task, different tiers
A classification task with 300 input tokens and 10 output tokens per request, one million requests a month. On a light model:
Cost estimate · gpt-4o-mini (Standard)
- Unit price
- input ¥0.3 / output ¥1.2 (per 1M tokens)
- Usage per request
- 300 input tokens, 10 output tokens
- Requests
- 1,000,000
- Cost per request
- ¥0.000102
Total about ¥102Prices in CNY, cheapest group for each model; updated Nov 12, 2026, 8:17 PM.
On a flagship:
Cost estimate · gpt-5.5 (Standard)
- Unit price
- input ¥10 / output ¥80 (per 1M tokens)
- Usage per request
- 300 input tokens, 10 output tokens
- Requests
- 1,000,000
- Cost per request
- ¥0.0038
Total about ¥3,800Prices in CNY, cheapest group for each model; updated Nov 12, 2026, 8:17 PM.
If both score about the same in your evaluation, take the first. Reasoning models also add thinking tokens to the output, which widens the gap.
Combine models to save more
- Tiered routing: let a small model judge the type or difficulty of a request, answer the easy ones directly and pass the hard ones to a bigger model.
- Division of labor: in knowledge-base Q&A, use a small model to rewrite and classify questions and a mid-tier model to write the final answer.
- Fallback: when the main model errors or times out, switch to another model in the same tier — see How to choose a group.
Other things to check
| Aspect | How to check |
|---|---|
| Capabilities | Vision, tool use, reasoning, web search — filter by capability in Models and pricing |
| Endpoints | Chat Completions, Claude Messages or native Gemini — see the API reference |
| Groups | Which groups offer the model and at what price, shown on each model's page |
| Latency | Measure it with the script above; reasoning models think first, so the first token usually takes longer |
For how prices and billing work, see How LLM API pricing works.
FAQ
Do I need the newest, most powerful model?
No. Most business tasks are classification, extraction, rewriting and answering from documents, which small and mid-tier models handle well. Test a cheap model first and move up only if it falls short; that usually costs far less than starting with a flagship.
Chinese or international models?
Both work with the same key and the same code; only the model parameter changes. Put candidates from both into your evaluation and decide on quality, price and latency with your own data.
How much data do I need for an evaluation?
Usually 50 to 200 representative real samples are enough to see the differences. Cover the common cases and the tricky edge cases, and write down the expected result for each.
Do I have to change code to switch models?
With the OpenAI-compatible API you normally change only the model parameter. Vendors differ in how they handle parameters such as temperature, response_format and reasoning_effort, so test a new model with a little traffic first.