38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
// Structured output with Zod schema validation
|
|
// AI SDK Core - generateObject() with Zod
|
|
|
|
import { generateObject } from 'ai';
|
|
import { openai } from '@ai-sdk/openai';
|
|
import { z } from 'zod';
|
|
|
|
// Define Zod schema
|
|
const PersonSchema = z.object({
|
|
name: z.string().describe('Person full name'),
|
|
age: z.number().describe('Person age in years'),
|
|
role: z.enum(['engineer', 'designer', 'manager', 'other']).describe('Job role'),
|
|
skills: z.array(z.string()).describe('List of technical skills'),
|
|
experience: z.object({
|
|
years: z.number(),
|
|
companies: z.array(z.string()),
|
|
}),
|
|
});
|
|
|
|
async function main() {
|
|
const result = await generateObject({
|
|
model: openai('gpt-4'),
|
|
schema: PersonSchema,
|
|
prompt: 'Generate a profile for a senior software engineer with 8 years of experience.',
|
|
});
|
|
|
|
console.log('Generated object:');
|
|
console.log(JSON.stringify(result.object, null, 2));
|
|
|
|
// TypeScript knows the exact type
|
|
console.log('\nAccessing typed properties:');
|
|
console.log('Name:', result.object.name);
|
|
console.log('Skills:', result.object.skills.join(', '));
|
|
console.log('Years of experience:', result.object.experience.years);
|
|
}
|
|
|
|
main().catch(console.error);
|