Generate Object with a Reasoning Model
Learn how to generate structured data with a reasoning model using the AI TOOLKIT and Node
Reasoning models, like DeepSeek's R1, are gaining popularity due to their ability to understand and generate better responses to complex queries than non-reasoning models. You may want to use these models to generate structured data. However, most (like R1 and OpenAI's o1) do not support tool-calling or structured outputs. One solution is to pass the output from a reasoning model through a smaller model that can output structured data (like gpt-4o-mini). These lightweight models can efficiently extract the structured data while adding very little overhead in terms of speed and cost. import { generateObject, generateText } from 'ai-toolkit'; import 'dotenv/config'; import { z } from 'zod'; async function main() { const { text: rawOutput } = await generateText({ model: 'deepseek/deepseek-r1', prompt: 'Predict the top 3 largest city by 2050. For each, return the name, the country, the reason why it will on the list, and the estimated population in millions.', }); const { object } = await generateObject({ model: 'openai/gpt-4o-mini', prompt: 'Extract the desired information from this text: \n' + rawOutput, schema: z.object({ name: z.string().describe('the name of the city'), country: z.string().describe('the name of the country'), reason: z .string() .describe( 'the reason why the city will be one of the largest cities by 2050', ), estimatedPopulation: z.number(), }), output: 'array', }); console.log(object); } main().catch(console.error);
- 1import { generateObject, generateText } from 'ai-toolkit';
- 2import 'dotenv/config';
- 3import { z } from 'zod';
- 4async function main() {
- 5const { text: rawOutput } = await generateText({
- 6model: 'deepseek/deepseek-r1',
- 7prompt:
- 8'Predict the top 3 largest city by 2050. For each, return the name, the country, the reason why it will on the list, and the estimated population in millions.',
- 9});
- 10const { object } = await generateObject({
- 11model: 'openai/gpt-4o-mini',
- 12prompt: 'Extract the desired information from this text: \n' + rawOutput,
- 13schema: z.object({
- 14name: z.string().describe('the name of the city'),
- 15country: z.string().describe('the name of the country'),
- 16reason: z
- 17.string()
- 18.describe(
- 19'the reason why the city will be one of the largest cities by 2050',
- 20),
- 21estimatedPopulation: z.number(),
- 22}),
- 23output: 'array',
- 24});
- 25console.log(object);
- 26}
- 27main().catch(console.error);
Run it locally
$ npm install ai