RAG & Base de Connaissances
Construisez des systèmes Q&A intelligents avec la génération augmentée par récupération.
Le RAG combine la puissance de la recherche sémantique avec la génération LLM pour fournir des réponses précises et contextuelles basées sur vos propres données.
1. Créer une Base de Connaissances
Ingérez des documents avec chunking et embedding automatiques :
import { createOrka, OpenAIAdapter, MemoryVectorAdapter } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new MemoryVectorAdapter(), defaults: { chunkSize: 500, // Chunk size in characters chunkOverlap: 100, // Overlap between chunks topK: 3, // Number of results by default },}); // Create a knowledge baseconst result = await orka.knowledge.create({ name: 'faq', source: [ { text: 'Orka JS is a TypeScript framework for building production-ready LLM systems.', metadata: { category: 'general' }, }, { text: 'To install Orka JS, use npm install orkajs.', metadata: { category: 'installation' }, }, { text: 'Orka JS supports Pinecone, Qdrant, Chroma and an in-memory adapter.', metadata: { category: 'features' }, }, ],}); console.log(`Base created: ${result.documentCount} documents, ${result.chunkCount} chunks`);2. Recherche Sémantique
Recherchez dans votre base de connaissances avec des requêtes en langage naturel :
// Simple semantic searchconst results = await orka.knowledge.search('faq', 'how to install', { topK: 2 }); for (const r of results) { console.log(`[Score: ${r.score.toFixed(3)}] ${r.content}`); console.log(` Metadata: ${JSON.stringify(r.metadata)}`);} // Search with metadata filtersconst filtered = await orka.knowledge.search('faq', 'features', { topK: 5, filter: { category: 'features' },});3. Question avec RAG
Obtenez des réponses générées par IA basées sur votre base de connaissances :
// Question with RAGconst answer = await orka.ask({ knowledge: 'faq', question: 'Which vector databases are supported ?', includeContext: true, // Include sources in the response systemPrompt: 'You are a technical assistant. Respond concisely.', temperature: 0.3,}); console.log(`Answer: ${answer.answer}`);console.log(`Tokens: ${answer.usage.totalTokens}`);console.log(`Latency: ${answer.latencyMs}ms`); // Display used sourcesif (answer.context) { console.log('Sources:'); for (const source of answer.context) { console.log(` - [${source.score.toFixed(2)}] ${source.content.slice(0, 80)}...`); }}4. Exemple Complet
import { createOrka, OpenAIAdapter, MemoryVectorAdapter } from 'orkajs'; async function main() { const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new MemoryVectorAdapter(), defaults: { chunkSize: 500, chunkOverlap: 100, topK: 3 }, }); console.log('📚 Creating the knowledge base......'); await orka.knowledge.create({ name: 'docs', source: [ { text: 'Orka JS is a TypeScript framework for LLM systems.', metadata: { topic: 'intro' } }, { text: 'Installation: npm install orkajs', metadata: { topic: 'setup' } }, { text: 'Supported providers: OpenAI, Anthropic, Mistral, Ollama.', metadata: { topic: 'providers' } }, { text: 'Vector databases: Pinecone, Qdrant, Chroma, in-memory.', metadata: { topic: 'vectordb' } }, ], }); console.log('🔍 Semantic search...'); const searchResults = await orka.knowledge.search('docs', 'how to install', { topK: 2 }); for (const r of searchResults) { console.log(` - [${r.score.toFixed(3)}] ${r.content}`); } console.log('\n💬 Question with RAG...'); const answer = await orka.ask({ knowledge: 'docs', question: 'Which LLM providers are supported?', includeContext: true, }); console.log(`Answer: ${answer.answer}`); console.log(`Tokens: ${answer.usage.totalTokens}, Latency: ${answer.latencyMs}ms`); if (answer.context) { console.log(`Sources used: ${answer.context.length}`); } // Nettoyage await orka.knowledge.delete('docs');} main().catch(console.error);Fonctionnalités Clés
Les documents sont automatiquement découpés en chunks optimaux avec taille et overlap configurables
Trouvez du contenu pertinent basé sur le sens, pas seulement les mots-clés
Filtrez les résultats de recherche par champs de métadonnées personnalisés
Obtenez les sources exactes utilisées pour générer chaque réponse