Cloudflare Clairic: Extract fields, don't make them up, return null when missing
Cloudflare released Clairic last week, a System One extraction model. It directly returns typed field values from unstructured text and images, and returns null and a probability when no value exists. It is complementary to decision models like Jev and very low-cost. The article introduces the principles, usage, and caveats.
Getting an LLM to return JSON means you have to parse, validate, and guess values. Clairic removes that step: declare the fields, and it directly returns typed values. When something is missing, it returns null with a probability. This model comes from Cloudflare, is called Clairic, and is already available in preview mode on Workers AI.
Cloudflare calls it a System One extraction model. That means it reads the input once and directly outputs fields without generating explanatory text. It is suited to extracting fixed-type information such as order numbers, amounts, and dates from emails, invoices, and images. The best-known System One model is TypeSafe's Jev, but the two have different uses: Jev chooses an answer from the options you provide; Clairic returns values you don't know. So they are often used together—Clairic extracts facts, and Jev makes decisions.
Usage is simple. In a Cloudflare Worker, bind Workers AI, pass the text to process as state, and define the fields to extract as fields:
const { answers } = await env.AI.run("@cf/cloudflare/clairic", {
state: customerEmail,
fields: {
order_id: { type: "text", instructions: "Order number" },
total_paid: { type: "number", decimals: 2, unit: "USD", instructions: "Item cost plus tax" },
days_since_delivery: { type: "duration", unit: "days", integer: true, instructions: "Days from delivery to the message date" },
damage: { type: "list", items: "text", instructions: "Each damaged part" },
tracking_number: { type: "text", instructions: "Shipping tracking number" }
}
});
In the returned structure, each field has type, value, and confidence. For example, total_paid would be calculated as 701.1, and days_since_delivery as 11. If tracking_number does not exist in the email, it returns null with p_null 0.99. Clairic can do some simple calculations, but for precise arithmetic in production, have it extract the raw values and do the calculation in your own code.
It supports text, number, date, time, datetime, duration, list, estimate, and forecast field types. Text fields return the original span, making it easy to highlight the location.
Use cases:
- Customer support tickets: extract order numbers, delivery dates, amounts, and damaged parts; route low-confidence cases to a human.
- Invoices and receipts: read totals, dates, and line items from text or photos.
- Quick estimates: estimate repair costs or payment dates from examples, with ranges representing uncertainty.
- Short-term forecasts: forecast pasted sequences, such as daily ticket volume, without needing a dedicated forecasting system.
Don't use it for open-ended writing, fixed-option selection, deterministic calculations, or production-grade forecasting. It is currently only a preview version, and its behavior may change. Long-chain reasoning and summing across multiple lines are unreliable. Confidence scores are not well calibrated across all tasks, and values may be misread when image text is blurry. High-value fields still need human or business-rule review.
On cost, a commenter noted: $0.10 per million input tokens, with no output cost because the model does not write text. This makes it much cheaper than most generative models.
One commenter said that returning null when something is missing alone is worth paying for. That kind of honesty is indeed rare. Small models do extraction, large models do decision-making—many teams already use this pattern. Cloudflare has turned it into a product.
The full tutorial and interactive playground are here: https://academy.dair.ai/resources/introduction-to-clairic
发布时间: 2026-10-26 22:35