Parseurs de Sortie
Parsez et validez les sorties LLM en données structurées avec JSON, schémas Zod, listes et correction automatique.
Pourquoi des Parseurs de Sortie ?
Les LLMs retournent du texte non structuré. Les parseurs de sortie extraient des données structurées, valident les formats et gèrent les erreurs, rendant les sorties LLM fiables pour le traitement en aval.
# JSONParser
Extrait et parse le JSON des réponses LLM, même lorsqu'il est enveloppé dans des blocs de code markdown ou mélangé avec du texte.
import { JSONParser } from 'orkajs/parsers/json'; const parser = new JSONParser({ strict: false }); // LLM response with JSON in markdownconst llmOutput = `Here's the data you requested: \`\`\`json{ "name": "Alice", "age": 30, "skills": ["TypeScript", "Python"]}\`\`\``; const data = parser.parse(llmOutput);console.log(data);// { name: 'Alice', age: 30, skills: ['TypeScript', 'Python'] } // Get format instructions for the LLMconst instructions = parser.getFormatInstructions();console.log(instructions);🎯 Extraction Intelligente
JSONParser extrait automatiquement le JSON des blocs de code markdown, gère les objets et les tableaux, et fournit des messages d'erreur clairs en cas d'échec du parsing.
# StructuredOutputParser
Parse et valide les sorties LLM par rapport à un schéma Zod pour des données structurées type-safe.
📦 Installation Requise
StructuredOutputParser nécessite Zod pour la validation de schéma :
npm install zodimport { StructuredOutputParser } from 'orkajs/parsers/structured';import { z } from 'zod'; // Define schemaconst schema = z.object({ name: z.string().describe('Person name'), age: z.number().describe('Age in years'), email: z.string().email().describe('Email address'), skills: z.array(z.string()).describe('List of skills')}); // Create parserconst parser = StructuredOutputParser.fromZodSchema(schema); // Get format instructions to send to LLMconst instructions = parser.getFormatInstructions();const prompt = `Extract person info from this text: "Alice is 30 years old..." ${instructions}`; const llmResponse = await llm.generate(prompt); // Parse and validatetry { const data = parser.parse(llmResponse.content); console.log(data); // { name: 'Alice', age: 30, email: 'alice@example.com', skills: [...] } // ✅ Type-safe and validated} catch (error) { console.error('Validation failed:', error.message);}❌ Sans Validation
const data = JSON.parse(response);// No type safety// No validation// Runtime errors✅ Avec StructuredOutputParser
const data = parser.parse(response);// ✅ Type-safe// ✅ Validated// ✅ Clear errors# ListParser
Parse les listes des sorties LLM, gérant automatiquement les puces, les numéros et les séparateurs personnalisés.
import { ListParser } from 'orkajs/parsers/list'; const parser = new ListParser({ separator: '\n', // Split by newline (default) trim: true // Remove whitespace}); const llmOutput = `Here are the top programming languages: - TypeScript- Python- Go- Rust`; const items = parser.parse(llmOutput);console.log(items);// ['TypeScript', 'Python', 'Go', 'Rust'] // Works with numbered lists tooconst numbered = `1. First item2. Second item3. Third item`; const items2 = parser.parse(numbered);// ['First item', 'Second item', 'Third item'] // Custom separatorconst csvParser = new ListParser({ separator: ',' });const csv = 'apple, banana, orange';console.log(csvParser.parse(csv));// ['apple', 'banana', 'orange']# AutoFixParser
Enveloppe n'importe quel parseur et réessaie automatiquement avec correction LLM lorsque le parsing échoue.
import { AutoFixParser } from 'orkajs/parsers/auto-fix';import { StructuredOutputParser } from 'orkajs/parsers/structured';import { z } from 'zod'; const schema = z.object({ name: z.string(), age: z.number()}); const baseParser = StructuredOutputParser.fromZodSchema(schema); const autoFixParser = new AutoFixParser({ parser: baseParser, maxRetries: 3, llm: orka.getLLM()}); // Malformed LLM outputconst badOutput = `{ "name": "Alice", "age": "thirty" // ❌ Should be number}`; // Try to parse with auto-fixtry { const data = await autoFixParser.parseWithRetry(badOutput); console.log(data); // { name: 'Alice', age: 30 } ✅ Fixed automatically} catch (error) { console.error('Failed after retries:', error);}🔄 Comment Fonctionne Auto-Fix
- Tente de parser avec le parseur de base
- Si le parsing échoue, envoie l'erreur + sortie originale au LLM
- Le LLM corrige le format
- Réessaie le parsing avec la sortie corrigée
- Répète jusqu'à maxRetries fois
# XMLParser
Parse les sorties balisées XML des LLMs. Utile quand vous avez besoin de plusieurs champs nommés sans formatage JSON, ce que certains LLMs gèrent plus naturellement avec des balises XML.
import { XMLParser } from 'orkajs/parsers/xml'; // Basic usage — extract all XML tagsconst parser = new XMLParser(); const llmOutput = `Here is my analysis: <summary>The product has strong market potential</summary><sentiment>positive</sentiment><confidence>0.92</confidence><reasoning>Based on market trends and competitor analysis, the product fills a clear gap.</reasoning>`; const data = parser.parse(llmOutput);console.log(data);// {// summary: 'The product has strong market potential',// sentiment: 'positive',// confidence: '0.92',// reasoning: 'Based on market trends and competitor analysis...'// } // Strict mode — require specific tagsconst strictParser = new XMLParser({ tags: ['summary', 'sentiment', 'confidence'], strict: true // Throws if any required tag is missing}); const result = strictParser.parse(llmOutput);// ✅ Validates that all required tags are present // Get format instructions for the LLMconsole.log(strictParser.getFormatInstructions());// "Your response must use the following XML tags:// <summary>value</summary>// <sentiment>value</sentiment>// <confidence>value</confidence>"# CSVParser
Parse les sorties au format CSV en tableaux d'objets. Gère les champs entre guillemets, les séparateurs personnalisés et les en-têtes prédéfinis optionnels. Idéal pour l'extraction de données tabulaires des LLMs.
import { CSVParser } from 'orkajs/parsers/csv'; // Auto-detect headers from first rowconst parser = new CSVParser(); const llmOutput = `name,role,experienceAlice,Engineer,5 yearsBob,Designer,3 yearsCharlie,Manager,8 years`; const data = parser.parse(llmOutput);console.log(data);// [// { name: 'Alice', role: 'Engineer', experience: '5 years' },// { name: 'Bob', role: 'Designer', experience: '3 years' },// { name: 'Charlie', role: 'Manager', experience: '8 years' }// ] // Predefined headers (no header row in data)const noHeaderParser = new CSVParser({ headers: ['product', 'price', 'stock'], separator: ';', // Custom separator strict: true // Enforce column count}); const tabData = `iPhone;999;trueMacBook;1999;false`; console.log(noHeaderParser.parse(tabData));// [// { product: 'iPhone', price: '999', stock: 'true' },// { product: 'MacBook', price: '1999', stock: 'false' }// ] // Handles quoted fields with commasconst quotedCSV = `name,description"Smith, John","Senior engineer, 10+ years"`;console.log(parser.parse(quotedCSV));// [{ name: 'Smith, John', description: 'Senior engineer, 10+ years' }]# CommaSeparatedListParser
Un parseur spécialisé pour les listes séparées par des virgules. Plus simple que CSVParser quand vous avez juste besoin d'une liste plate de valeurs. Supporte la déduplication et le nettoyage automatique.
import { CommaSeparatedListParser } from 'orkajs/parsers/comma-separated-list'; const parser = new CommaSeparatedListParser({ trim: true, // Remove whitespace (default: true) removeDuplicates: false // Keep duplicates (default: false)}); const llmOutput = 'TypeScript, Python, Go, Rust, JavaScript';const items = parser.parse(llmOutput);console.log(items);// ['TypeScript', 'Python', 'Go', 'Rust', 'JavaScript'] // With deduplicationconst deduper = new CommaSeparatedListParser({ removeDuplicates: true });const dupes = 'apple, banana, apple, orange, banana';console.log(deduper.parse(dupes));// ['apple', 'banana', 'orange'] // Format instructions for the LLMconsole.log(parser.getFormatInstructions());// "Your response must be a comma-separated list of values.// Example: item1, item2, item3"Exemple Complet
import { createOrka, OpenAIAdapter } from 'orkajs';import { StructuredOutputParser } from 'orkajs/parsers/structured';import { AutoFixParser } from 'orkajs/parsers/auto-fix';import { z } from 'zod'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: /* ... */}); // Define schemaconst productSchema = z.object({ name: z.string(), price: z.number(), category: z.enum(['electronics', 'clothing', 'food']), inStock: z.boolean(), tags: z.array(z.string())}); // Create parser with auto-fixconst baseParser = StructuredOutputParser.fromZodSchema(productSchema);const parser = new AutoFixParser({ parser: baseParser, maxRetries: 2, llm: orka.getLLM()}); // Generate structured outputconst prompt = `Extract product information from this description:"The iPhone 15 Pro costs $999 and is currently available. It's an electronics item with tags: smartphone, apple, 5g" ${baseParser.getFormatInstructions()}`; const response = await orka.generate(prompt); // Parse with validation and auto-fixconst product = await parser.parseWithRetry(response); console.log(product);// {// name: 'iPhone 15 Pro',// price: 999,// category: 'electronics',// inStock: true,// tags: ['smartphone', 'apple', '5g']// }// ✅ Type-safe, validated, and auto-corrected if neededComparaison
| Parseur | Cas d'Usage | Validation |
|---|---|---|
| JSONParser | Extraction JSON simple | Syntaxe JSON basique |
| StructuredOutput | Données structurées type-safe | Validation schéma Zod |
| ListParser | Listes, tableaux, énumérations | Nettoyage de format |
| AutoFixParser | Sorties LLM peu fiables | Correction par LLM |
| XMLParser | Extraction multi-champs avec balises XML | Présence des balises (mode strict) |
| CSVParser | Extraction de données tabulaires | Nombre de colonnes (mode strict) |
| CommaSeparatedList | Valeurs séparées par virgules | Liste non vide |
Bonnes Pratiques
1. Incluez les Instructions de Format
Ajoutez toujours parser.getFormatInstructions() à vos prompts pour guider le LLM.
2. Utilisez Zod pour les Schémas Complexes
StructuredOutputParser avec Zod fournit la sécurité des types, la validation et des messages d'erreur clairs.
3. Utilisez AutoFix avec Parcimonie
AutoFixParser fait des appels LLM supplémentaires. Utilisez-le pour les données critiques ou lorsque les sorties LLM sont peu fiables.
Imports Tree-shakeable
// ✅ Import only what you needimport { StructuredOutputParser } from 'orkajs/parsers/structured';import { AutoFixParser } from 'orkajs/parsers/auto-fix';import { XMLParser } from 'orkajs/parsers/xml';import { CSVParser } from 'orkajs/parsers/csv';import { CommaSeparatedListParser } from 'orkajs/parsers/comma-separated-list'; // ✅ Or import from indeximport { JSONParser, ListParser, XMLParser, CSVParser } from 'orkajs/parsers';