[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:it":3,"public-menus:all":38,"post:ollama-is-not-the-product-building-production-ready-open-llm-applications:it":221,"related:post:ollama-is-not-the-product-building-production-ready-open-llm-applications:it:1":1198},{"statusCode":4,"data":5,"message":37},200,{"tenantId":6,"lang":7,"defaultLang":8,"siteUrl":9,"contactEmail":10,"brandName":11,"logoUrl":12,"siteName":11,"siteDescription":13,"ogImage":10,"robotsIndex":14,"socialLinks":10,"reservedSlugs":10,"seoPolicy":15},"stajic","it","de","https:\u002F\u002Fstajic.de",null,"Stajic Platform","\u002FLogo_Planet.svg","Stajic Portal",true,{"branding":16,"relatedContent":17,"crossDomainLinks":18},{"logoUrl":12},{"enabled":14},[19,22,25,28,31,34],{"url":20,"label":21,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Ffigure.rocks","figure.rocks",{"url":23,"label":24,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Floving.rocks","loving.rocks",{"url":26,"label":27,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.com","bazify.com",{"url":29,"label":30,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.de","bazify.de",{"url":32,"label":33,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.at","bazify.at",{"url":35,"label":36,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.ba","bazify.ba","Portal settings resolved",[39,45],{"id":40,"name":41,"location":42,"isActive":14,"isDefault":43,"items":44},1,"main-navigation","header",false,[],{"id":46,"name":47,"location":48,"isActive":14,"isDefault":14,"items":49},4,"main-menu","sidebar",[50,66,79,93,103,118,133],{"id":51,"title":52,"url":60,"target":61,"icon":62,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":64,"portfolioId":10,"children":65},"item-18",{"de":53,"en":54,"es":55,"fr":56,"it":54,"ru":57,"sr":58,"zh":59},"Startseite","Home","Inicio","Accueil","Главная","Почетна","首页","\u002Ffull-stack-web-developer-munich-performance-seo-and-maintainable-builds","_self","i-lucide-home","page",111,[],{"id":67,"title":68,"url":75,"target":61,"icon":76,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":77,"portfolioId":10,"children":78},"item-22",{"de":69,"en":69,"es":70,"fr":69,"it":71,"ru":72,"sr":73,"zh":74},"Vision","Visión","Visione","Видение","Визија","想象","\u002Fueber-uns-webdesign-muenchen-webaplikation","i-lucide-eye",113,[],{"id":80,"title":81,"url":89,"target":61,"icon":90,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":91,"portfolioId":10,"children":92},"item-19",{"de":82,"en":83,"es":84,"fr":83,"it":85,"ru":86,"sr":87,"zh":88},"Leistungen","Services","Servicios","Servizi","Услуги","Услуге","服务","\u002Fservices-dienstleistungen-muenchen","i-lucide-wrench",116,[],{"id":94,"title":95,"url":99,"target":61,"icon":100,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":101,"portfolioId":10,"children":102},"item-23",{"de":96,"en":96,"es":96,"fr":96,"it":96,"ru":97,"sr":97,"zh":98},"Blog","Блог","博客","\u002Fblog","i-lucide-book-open",112,[],{"id":104,"title":105,"url":114,"target":61,"icon":115,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":116,"portfolioId":10,"children":117},"item-32",{"de":106,"en":107,"es":108,"fr":109,"it":110,"ru":111,"sr":112,"zh":113},"Neue Technologien","New Technologies","Nuevas tecnologías","Nouvelles technologies","Nuove tecnologie","Новые технологии","Нове технологије","新技术！","\u002Fneue-webtechnologien","i-lucide-sparkles",122,[],{"id":119,"title":120,"url":129,"target":61,"icon":130,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":131,"portfolioId":10,"children":132},"item-20",{"de":121,"en":122,"es":123,"fr":124,"it":125,"ru":126,"sr":127,"zh":128},"Kontakt","Contact us!","Contacto","Contact","Contatto","Контакт","Контактирајте нас","联系我们！","\u002Fcontact","i-lucide-mail",115,[],{"id":134,"title":135,"url":144,"target":61,"icon":145,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":147},"item-21",{"de":136,"en":137,"es":138,"fr":139,"it":140,"ru":141,"sr":142,"zh":143},"Unsere Arbeit","Our Work","Nuestro trabajo","Nos réalisations","I nostri lavori","Наши работы","Наши радови","文件夹","\u002Fportfolio","i-lucide-briefcase",114,[148,161,175,191,206],{"id":149,"title":150,"url":144,"target":61,"icon":159,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":160},"item-24",{"de":151,"en":152,"es":153,"fr":154,"it":155,"ru":156,"sr":157,"zh":158},"Alle Projekte","All Projects","Todos los proyectos","Tous les projets","Tutti i progetti","Все проекты","Сви пројекти","所有项目","i-lucide-grid-3x3",[],{"id":162,"title":163,"url":171,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":174},"item-29",{"de":164,"en":165,"es":166,"fr":167,"it":168,"ru":169,"sr":170,"zh":143},"Local Roots, Global Reach","Local Roots - Global Reach","Empresa local ","Entreprise locale","Azienda locale","Местная компания","Локално предузеће глобално тржиште","\u002Fportfolio\u002Flocal-roots-global-reach-communication-media-systems-for-modern-business","i-lucide-globe-2","custom",[],{"id":176,"title":177,"url":186,"target":61,"icon":187,"isActive":14,"type":188,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":189,"children":190},"menu-2916d060-8681-482a-af9a-c107a8bc30d8",{"de":178,"en":179,"es":180,"fr":181,"it":182,"ru":183,"sr":184,"zh":185},"Von Rohdaten zu verifizierbarem KI-Kontext: Eine praktische Architektur für agentenbereite Informationen","From Raw Data to Verifiable AI Context:","De datos sin procesar a contexto de IA verificable: una arquitectura práctica para información lista para agentes","Des données brutes au contexte d'IA vérifiable : une architecture pratique pour des informations prêtes pour les agents","Dai dati grezzi a un contesto IA verificabile: Un'architettura pratica per informazioni pronte per gli agenti","От необработанных данных к верифицируемому контексту ИИ: практическая архитектура информации, готовой для агентов","Od sirovih podataka do proverljivog AI konteksta: Praktična arhitektura za informacije spremne za agente","从原始数据到可验证的 AI 上下文：面向智能体就绪信息的实用架构","\u002Fportfolio\u002Ffrom-raw-data-to-verifiable-ai-context-a-practical-architecture-for-agent-ready-information","i-lucide-database","portfolio",22,[],{"id":192,"title":193,"url":202,"target":61,"icon":203,"isActive":14,"type":188,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":204,"children":205},"menu-e2061cd7-ff53-49d5-a0e8-3d49090577c0",{"de":194,"en":195,"es":196,"fr":197,"it":198,"ru":199,"sr":200,"zh":201},"Präsenzplattformen — Unternehmenskommunikation","Presence Platforms — Enterprise Communication","Plataformas de presencia — Comunicación empresarial","Plateformes de présence — Communication d'entreprise","Presence Platforms — Comunicazione aziendale","Платформы присутствия — Корпоративные коммуникации","Presence platforme — Poslovna komunikacija","Presence 平台 — 企业通信","\u002Fportfolio\u002Fpresence-platforms-enterprise-communication-that-wins-without-competing","i-lucide-badge-percent",21,[],{"id":207,"title":208,"url":217,"target":61,"icon":218,"isActive":14,"type":188,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":219,"children":220},"menu-a781582e-e90d-418e-b8c9-b070bc37c37e",{"de":209,"en":210,"es":211,"fr":212,"it":213,"ru":214,"sr":215,"zh":216},"Maximierung des POS-ROI durch Konsistenz","Maximizing POS ROI Through Consistent","Maximizar el ROI del POS a través de constante","Maximiser le ROI du PDV grâce à la cohérence","Massimizzare il ROI del POS attraverso costante","Максимизация ROI POS за счет последовательного","Maksimizacija POS ROI-ja kroz dosledno","通过持续最大化 POS 投资回报率","\u002Fportfolio\u002Ffrom-vision-to-value-maximizing-pos-roi-through-consistent-ci-creation-and-strategic-branding","i-lucide-briefcase-business",11,[],{"statusCode":4,"data":222,"message":1197},{"id":223,"title":224,"slug":225,"content":226,"contentJson":227,"excerpt":625,"featuredImage":626,"featuredImageAlt":627,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":628,"publishedAt":629,"createdAt":630,"updatedAt":631,"seoLocalePaths":632,"categories":641,"author":662,"translations":667},"459","Ollama non è il prodotto: costruire applicazioni Open-LLM pronte per la produzione","ollama-is-not-the-product-building-production-ready-open-llm-applications","\u003Ch1>Ollama non è il prodotto: costruire applicazioni Open-LLM pronte per la produzione\u003C\u002Fh1>\n\u003Cp>Strumenti come \u003Cb>Ollama\u003C\u002Fb> hanno reso la sperimentazione locale con LLM quasi senza attriti. Installa il runtime, scarica un modello, invia un prompt e un assistente locale risponde in pochi secondi. È utile. È anche la parte più semplice del percorso.\u003C\u002Fp>\n\u003Cp>Una demo da terminale non è un'applicazione. Un modello locale non è un prodotto. Un'applicazione Open-LLM produttiva necessita di ingestione controllata dei dati, recupero, autorizzazioni, valutazione, logging, astrazione del provider, disciplina di deployment e un flusso di lavoro utente che risolva un vero problema aziendale.\u003C\u002Fp>\n\u003Cp>La tesi centrale è semplice: \u003Cb>Ollama è un runtime, non il prodotto\u003C\u002Fb>. Il prodotto vive nel livello applicativo attorno al modello. Quel livello decide quali documenti sono visibili, quali chunk vengono recuperati, quali prompt vengono utilizzati, come vengono valutate le risposte, come vengono registrati i fallimenti e se il sistema può essere affidabile nel lavoro quotidiano.\u003C\u002Fp>\n\u003Cp>È qui che l'AI locale diventa interessante per i team che costruiscono assistenti privati, strumenti di conoscenza interna, funzionalità SaaS basate su LLM o copiloti per flussi di lavoro aziendali. Il modello può funzionare localmente, ma privacy, affidabilità e valore aziendale esistono solo se l'intero sistema è progettato correttamente.\u003C\u002Fp>\n\u003Ch2>Ollama è un runtime, non un prodotto\u003C\u002Fh2>\n\u003Cp>Ollama è eccellente per eseguire e servire modelli aperti localmente. È particolarmente indicato per esplorazione, flussi di lavoro per sviluppatori, PoC e team che vogliono testare il comportamento del modello senza impegnarsi immediatamente con un provider cloud. Espone l'interazione con modelli locali tramite API e livelli di compatibilità che facilitano la connessione con strumenti esistenti in stile OpenAI.\u003C\u002Fp>\n\u003Cp>Ciò non significa che Ollama risolva il problema applicativo. Non sa automaticamente quali documenti aziendali un utente può leggere. Non crea isolamento dei tenant, versionamento dei documenti, audit trail, attribuzione delle fonti, dataset di valutazione o flussi di lavoro UI specifici per il business. Queste responsabilità rimangono nell'architettura applicativa.\u003C\u002Fp>\n\u003Cul>\u003Cli>\u003Cb>Ollama aiuta con:\u003C\u002Fb> esecuzione locale del modello, sperimentazione rapida, accesso al modello tramite API, PoC offline-first e produttività degli sviluppatori.\u003C\u002Fli>\u003Cli>\u003Cb>Ollama non risolve da solo:\u003C\u002Fb> controllo degli accessi, qualità RAG, ciclo di vita dei documenti, confini dei tenant, valutazione, audit logging, monitoraggio, comportamento di fallback o progettazione di flussi di lavoro aziendali.\u003C\u002Fli>\u003Cli>\u003Cb>L'errore architetturale:\u003C\u002Fb> trattare l'inferenza locale come se fosse già un prodotto AI sicuro.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cblockquote class=\"border-l-4 border-gray-300 pl-4 italic\">Il modello è la parte più semplice. Il livello applicativo è dove risiede il valore del prodotto.\u003Ccite class=\"block mt-2 text-sm\">— Principio architetturale\u003C\u002Fcite>\u003C\u002Fblockquote>\n\u003Ch2>Demo, PoC e produzione sono fasi diverse\u003C\u002Fh2>\n\u003Cp>Molte iniziative Open-LLM falliscono perché i team confondono una demo funzionante con una capacità produttiva. La differenza non è estetica. Ogni livello di maturità ha un obiettivo diverso, un profilo di rischio diverso e un requisito ingegneristico diverso.\u003C\u002Fp>\n\u003Ctable class=\"w-full border-collapse\">\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Fase\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cosa dimostra\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configurazione tipica\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cosa manca ancora\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Demo\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Un modello può rispondere a un prompt localmente.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ollama su un laptop, un modello, un prompt, nessun controllo reale dei dati.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Autorizzazioni, recupero, log, valutazione, deployment, monitoraggio, flusso di lavoro utente.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">PoC\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Un piccolo sistema controllato può rispondere a domande su documenti o flussi di lavoro selezionati.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Interfaccia web di base, script di ingestione, ricerca vettoriale, utenti limitati, ambito documentale limitato.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Scala, governance, dataset di test, strategia di fallback, auditabilità, modello di supporto.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Produzione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Più utenti possono utilizzare il sistema in modo sicuro e ripetuto all'interno del lavoro reale.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">App autenticata, isolamento dei tenant, pipeline RAG, osservabilità, astrazione del provider, backup, processo di rilascio.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Miglioramento continuo, espansione della valutazione, maturità operativa.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftable>\n\u003Cp>Un PoC può essere intenzionalmente piccolo. La produzione non può essere intenzionalmente cieca. Quando utenti reali, dati privati, decisioni aziendali e aspettative di conformità entrano nel sistema, l'architettura deve diventare esplicita.\u003C\u002Fp>\n\u003Ch2>Dove si inserisce il RAG\u003C\u002Fh2>\n\u003Cp>\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> è il ponte più comune tra un modello linguistico e la conoscenza aziendale privata. Il modello non conosce magicamente documenti interni, contratti, ticket, specifiche di prodotto o runbook. L'applicazione deve recuperare il contesto rilevante prima di chiedere al modello di rispondere.\u003C\u002Fp>\n\u003Cp>Un flusso RAG pratico si presenta così:\u003C\u002Fp>\n\u003Col>\u003Cli>I documenti vengono caricati o sincronizzati da fonti controllate.\u003C\u002Fli>\u003Cli>Il testo viene estratto, pulito e suddiviso in chunk.\u003C\u002Fli>\u003Cli>I chunk ricevono metadati come tenant, proprietario, versione del documento, URL di origine, ambito di accesso e timestamp.\u003C\u002Fli>\u003Cli>Vengono generati embedding per ogni chunk.\u003C\u002Fli>\u003Cli>I vettori vengono memorizzati in pgvector, Qdrant o un altro livello di recupero.\u003C\u002Fli>\u003Cli>Al momento della query, l'applicazione verifica le autorizzazioni prima del recupero.\u003C\u002Fli>\u003Cli>I chunk rilevanti vengono recuperati con ricerca per similarità e filtri sui metadati.\u003C\u002Fli>\u003Cli>Il costruttore di prompt inietta il contesto selezionato nella richiesta al modello.\u003C\u002Fli>\u003Cli>La risposta viene generata con citazioni, limiti di confidenza e fallback di nessuna risposta quando il recupero è debole.\u003C\u002Fli>\u003C\u002Fol>\n\u003Cp>La RAG riduce le allucinazioni, ma non le elimina. Una strategia di chunking inadeguata, metadati deboli, filtri di autorizzazione mancanti, embedding di bassa qualità o un recupero troppo ampio possono comunque produrre risposte convincenti ma errate. I sistemi RAG seri necessitano di soglie, citazioni, registri di recupero e valutazione.\u003C\u002Fp>\n\u003Ch2>Un'Architettura Pratica Locale Open-LLM\u003C\u002Fh2>\n\u003Cp>Un percorso di produzione realistico non richiede infrastrutture esotiche. Per molti team, una prima architettura solida può utilizzare un normale stack web: Nuxt per il frontend, un'API Nitro o Node, PostgreSQL come sistema di registrazione, pgvector per il recupero, Ollama come runtime locale, Prisma per l'accesso ai dati e worker in background per l'ingestione e gli embedding.\u003C\u002Fp>\n\u003Cpre class=\"code-block\">\u003Ccode>Domanda utente | v\nInterfaccia utente | v\nAPI \u002F Backend | +--&gt; Autenticazione +--&gt; Controllo autorizzazioni tenant e ruolo | v\nLivello di recupero | +--&gt; Metadati PostgreSQL +--&gt; Ricerca vettoriale pgvector o Qdrant +--&gt; Soglia di similarità | v\nCostruttore di prompt | +--&gt; prompt di sistema +--&gt; chunk recuperati +--&gt; riferimenti alle fonti +--&gt; regole di non risposta | v\nAstrazione del provider LLM | +--&gt; Ollama \u002F modello locale +--&gt; fallback modello cloud +--&gt; futuro runtime self-hosted | v\nRisposta con fonti | v\nLog, tracce, metriche, dataset di valutazione\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Questa architettura mantiene il modello sostituibile. Ollama può essere il primo runtime, ma il sistema non dovrebbe essere vincolato a un singolo motore di inferenza. Un'architettura pulita separa il flusso di lavoro dell'utente, il recupero, la costruzione del prompt, il provider del modello e l'osservabilità.\u003C\u002Fp>\n\u003Cul>\u003Cli>\u003Cb>Frontend:\u003C\u002Fb> Nuxt o un'altra interfaccia web per flussi di lavoro utente autenticati.\u003C\u002Fli>\u003Cli>\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js o FastAPI per orchestrazione, autorizzazioni e routing del provider.\u003C\u002Fli>\u003Cli>\u003Cb>Database:\u003C\u002Fb> PostgreSQL per documenti, utenti, tenant, ruoli, prompt, log e metadati.\u003C\u002Fli>\u003Cli>\u003Cb>Ricerca vettoriale:\u003C\u002Fb> pgvector per un recupero integrato semplice o Qdrant quando la ricerca vettoriale diventa un servizio dedicato.\u003C\u002Fli>\u003Cli>\u003Cb>Runtime del modello:\u003C\u002Fb> Ollama per esecuzione locale, server llama.cpp per servizio leggero o vLLM per servizio GPU ad alta produttività.\u003C\u002Fli>\u003Cli>\u003Cb>Archiviazione:\u003C\u002Fb> filesystem locale o archiviazione oggetti compatibile con S3 per file caricati e artefatti estratti.\u003C\u002Fli>\u003Cli>\u003Cb>Worker:\u003C\u002Fb> ingestione in background, chunking, embedding, re-indicizzazione ed elaborazione delle versioni dei documenti.\u003C\u002Fli>\u003Cli>\u003Cb>Osservabilità:\u003C\u002Fb> log, metriche, tracce dei prompt, tracce di recupero, monitoraggio della latenza e risultati della valutazione.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2>La Checklist di Prontezza per la Produzione\u003C\u002Fh2>\n\u003Cp>La seguente checklist è la differenza tra una demo di modello locale e un'applicazione Open-LLM utilizzabile:\u003C\u002Fp>\n\u003Cul>\u003Cli>Ogni documento e chunk ha un tenant_id.\u003C\u002Fli>\u003Cli>Il recupero è bloccato fino a quando non vengono verificati i permessi dell'utente e del ruolo.\u003C\u002Fli>\u003Cli>I documenti includono metadati, fonte, proprietario, versione, stato del ciclo di vita e politica di conservazione.\u003C\u002Fli>\u003Cli>La strategia di chunking è documentata e testata su documenti reali.\u003C\u002Fli>\u003Cli>La selezione del modello di embedding è esplicita e versionata.\u003C\u002Fli>\u003Cli>La configurazione dell'indice vettoriale è riproducibile.\u003C\u002Fli>\u003Cli>La soglia di similarità impedisce l'uso cieco di contesto debole.\u003C\u002Fli>\u003Cli>Le risposte includono citazioni delle fonti o riferimenti alle fonti ove possibile.\u003C\u002Fli>\u003Cli>Il fallback di non risposta viene utilizzato quando la confidenza del recupero è troppo bassa.\u003C\u002Fli>\u003Cli>I template dei prompt sono versionati e controllati nelle release.\u003C\u002Fli>\u003Cli>L'astrazione del provider LLM è costruita dall'inizio.\u003C\u002Fli>\u003Cli>L'output strutturato viene validato prima dell'uso a valle.\u003C\u002Fli>\u003Cli>Il dataset di valutazione contiene domande reali, fonti attese e risposte inaccettabili.\u003C\u002Fli>\u003Cli>I registri di recupero mostrano quali chunk sono stati utilizzati per ogni risposta.\u003C\u002Fli>\u003Cli>Vengono monitorati latenza, utilizzo dei token, carico GPU\u002FCPU e tassi di errore.\u003C\u002Fli>\u003Cli>Le regole di privacy e conservazione coprono upload, testo estratto, chunk, embedding, prompt, risposte e log.\u003C\u002Fli>\u003Cli>I percorsi di distribuzione, backup, ripristino, rollback e incidenti sono documentati.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cp>Questo si collega direttamente con \u003Ca href=\"\u002Fit\u002Fenterprise\">Enterprise Delivery OS\u003C\u002Fa>: l'IA utile non è solo una decisione sul modello. È disciplina di consegna, evidenza, controlli, metriche e proprietà operativa.\u003C\u002Fp>\n\u003Ch2>Astrazione del Provider: Non Sposare un Solo Modello\u003C\u002Fh2>\n\u003Cp>I modelli locali sono preziosi per casi d'uso sensibili alla privacy, scenari offline, controllo dei costi e sperimentazione interna. I modelli cloud possono ancora essere più forti per ragionamenti difficili, codifica, accuratezza multilingue o lavoro multimodale. Un'applicazione di produzione non dovrebbe trattare nessun modello come infrastruttura permanente.\u003C\u002Fp>\n\u003Cp>Un'astrazione del provider consente allo stesso flusso di lavoro dell'applicazione di chiamare Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM o un altro endpoint self-hosted senza riscrivere il prodotto. L'applicazione decide il provider in base al caso d'uso, alla sensibilità dei dati, alla latenza, ai costi e ai requisiti di qualità.\u003C\u002Fp>\n\u003Cpre class=\"code-block\">\u003Ccode>type LlmProvider = &quot;ollama&quot; | &quot;openai&quot; | &quot;gemini&quot; | &quot;anthropic&quot; | &quot;vllm&quot;; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array&lt;{ chunkId: string; sourceTitle: string; text: string; }&gt;;\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ &quot;Rispondi solo dal contesto fornito quando possibile.&quot;, &quot;Cita i titoli delle fonti.&quot;, &quot;Dì quando il contesto è insufficiente.&quot; ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: &quot;rag-v3.2&quot; } });\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>L'idea chiave non è la sintassi TypeScript. L'idea chiave è il confine. L'applicazione possiede autorizzazioni, recupero, regole del prompt, tracciamento e valutazione. Il provider produce solo l'output del modello.\u003C\u002Fp>\n\u003Ch2>pgvector vs Qdrant\u003C\u002Fh2>\n\u003Cp>Per molte applicazioni Open-LLM, la decisione sul database vettoriale è semplice all'inizio: se PostgreSQL è già il tuo sistema di registrazione, \u003Cb>pgvector\u003C\u002Fb> è un ottimo punto di partenza. Mantiene metadati, autorizzazioni, registrazioni dei documenti e vettori vicini tra loro. Questo riduce la complessità operativa.\u003C\u002Fp>\n\u003Cp>\u003Cb>Qdrant\u003C\u002Fb> diventa più interessante quando la ricerca vettoriale deve diventare un servizio dedicato: scala di recupero più ampia, filtraggio avanzato, indicizzazione specializzata, modelli di ricerca ibrida o scalabilità indipendente dell'infrastruttura di recupero.\u003C\u002Fp>\n\u003Ctable class=\"w-full border-collapse\">\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Opzione\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Migliore adattamento\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Punti di forza\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Compromessi\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">pgvector\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">PoC, produzione iniziale, sistemi già basati su PostgreSQL.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Database singolo, join SQL, comportamento ACID, operazioni più semplici, metadati vicini ai vettori.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Meno specializzato di un database vettoriale dedicato su larga scala di recupero.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Qdrant\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Servizi di ricerca semantica dedicati, carichi di lavoro vettoriali più grandi, filtraggio avanzato e pattern di recupero.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ricerca vettoriale progettata appositamente, modello di filtraggio robusto, scalabilità indipendente, API focalizzate sul recupero.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Aggiunge un altro componente infrastrutturale e una superficie operativa.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Iniziare in modo semplice\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La maggior parte dei team aziendali che iniziano con applicazioni RAG private.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Minor rischio architetturale, consegna più rapida, percorso di audit più semplice.\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Potrebbe richiedere una migrazione successiva se il recupero diventa centrale e su larga scala.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftable>\n\u003Cp>Una regola pratica: inizia con pgvector quando PostgreSQL possiede già i tuoi dati aziendali e la scala di recupero è moderata. Passa a Qdrant quando la ricerca vettoriale diventa una capacità di prodotto a sé stante.\u003C\u002Fp>\n\u003Ch2>Verifica della realtà su sicurezza e privacy\u003C\u002Fh2>\n\u003Cp>L'inferenza locale non significa automaticamente AI sicura. Significa solo che l'esecuzione del modello può avvenire localmente. L'intero percorso dei dati conta ancora: file caricati, testo estratto, chunk, embedding, log, prompt, risposte, backup, accesso degli sviluppatori, strumenti di amministrazione ed esportazioni di analisi.\u003C\u002Fp>\n\u003Cp>Anche gli embedding meritano attenzione. Non sono il documento originale, ma rappresentano comunque informazioni derivate da contenuti sensibili. Trattali come parte del percorso dati protetto, specialmente quando sono legati a metadati, record di origine, query degli utenti o identificatori del tenant.\u003C\u002Fp>\n\u003Cul>\u003Cli>Non indicizzare i documenti prima che le regole di accesso siano note.\u003C\u002Fli>\u003Cli>Non recuperare chunk senza filtri per tenant e ruolo.\u003C\u002Fli>\u003Cli>Non registrare prompt e risposte completi senza regole di conservazione.\u003C\u002Fli>\u003Cli>Non inviare contesto sensibile a un modello cloud a meno che la policy non lo consenta.\u003C\u002Fli>\u003Cli>Non dare per scontato che locale sia uguale a conforme al GDPR; la conformità dipende dalla progettazione completa del trattamento.\u003C\u002Fli>\u003Cli>Non permettere che le copie di valutazione e debug diventino dataset ombra incontrollati.\u003C\u002Fli>\u003C\u002Ful>\n\u003Cp>È qui che \u003Ca href=\"\u002Fit\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\">l'architettura SaaS multi-istanza\u003C\u002Fa> conta. Se tenant, ruoli, proprietà dei dati e confini operativi sono deboli, aggiungere un LLM locale può amplificare il rischio invece di ridurlo.\u003C\u002Fp>\n\u003Ch2>La valutazione non è opzionale\u003C\u002Fh2>\n\u003Cp>Un'applicazione Open-LLM in produzione necessita di un ciclo di valutazione. Senza di esso, i team hanno solo aneddoti. Alcune buone risposte dimostrative non provano che il recupero funzioni, che il prompt sia stabile o che il modello si comporti in modo sicuro nell'uso reale.\u003C\u002Fp>\n\u003Cp>Un dataset di valutazione minimo dovrebbe includere domande reali degli utenti, documenti di origine attesi, risposte inaccettabili, casi senza risposta e test di regressione per fallimenti precedenti. Ogni modifica a chunking, embedding, prompt, provider del modello o soglia di recupero dovrebbe essere testata rispetto a quel dataset.\u003C\u002Fp>\n\u003Cul>\u003Cli>\u003Cb>Valutazione del recupero:\u003C\u002Fb> Il sistema ha recuperato i chunk di origine corretti?\u003C\u002Fli>\u003Cli>\u003Cb>Valutazione della risposta:\u003C\u002Fb> La risposta è rimasta ancorata al contesto recuperato?\u003C\u002Fli>\u003Cli>\u003Cb>Valutazione della sicurezza:\u003C\u002Fb> Il sistema ha evitato divulgazioni vietate o dati non autorizzati?\u003C\u002Fli>\u003Cli>\u003Cb>Valutazione operativa:\u003C\u002Fb> Latenza, tasso di fallimento e costo sono rimasti entro limiti accettabili?\u003C\u002Fli>\u003Cli>\u003Cb>Valutazione di regressione:\u003C\u002Fb> Un aggiornamento del modello o del prompt ha rotto un comportamento precedentemente corretto?\u003C\u002Fli>\u003C\u002Ful>\n\u003Cp>Il RAG riduce le allucinazioni, ma non elimina la necessità di valutazione. La valutazione è il ciclo di controllo che trasforma un prototipo intelligente in un prodotto in miglioramento.\u003C\u002Fp>\n\u003Ch2>Disciplina di distribuzione: il modello è un evento di rilascio\u003C\u002Fh2>\n\u003Cp>Cambiare un modello non è una modifica di configurazione innocua. Può cambiare lo stile delle risposte, il comportamento di ragionamento, la qualità della lingua, la latenza, l'uso dei token, la disciplina delle citazioni e le modalità di fallimento. In produzione, gli aggiornamenti del modello dovrebbero essere gestiti come eventi di rilascio.\u003C\u002Fp>\n\u003Cp>Ciò significa versionare prompt, modelli di embedding, impostazioni di recupero, identificatori del modello, route del provider e risultati di valutazione. Significa anche avere una logica di rollback. Se un nuovo modello causa risposte peggiori ancorate al recupero o rompe l'output strutturato, il sistema necessita di un percorso controllato per tornare alla configurazione nota e funzionante.\u003C\u002Fp>\n\u003Cp>Questo si inserisce nella stessa logica operativa di \u003Ca href=\"\u002Fit\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\">Delivery &amp; Change\u003C\u002Fa> e \u003Ca href=\"\u002Fit\u002Fenterprise\u002Freference-models\u002Fdigital-platform\">architettura di piattaforma pronta per l'AI\u003C\u002Fa>: una consegna stabile richiede controlli ripetibili, non interventi manuali eroici.\u003C\u002Fp>\n\u003Ch2>Conclusione: la produzione inizia dove finisce la demo\u003C\u002Fh2>\n\u003Cp>Ollama può iniziare il viaggio. Rende accessibile l'esecuzione locale del modello e abbassa la barriera alla sperimentazione. Questo è prezioso. Ma l'applicazione di produzione inizia dove finisce la demo.\u003C\u002Fp>\n\u003Cp>Il modello è solo un componente sostituibile. Il vero prodotto è il sistema controllato che lo circonda: acquisizione, permessi, recupero, prompt, instradamento dei provider, valutazione, log, monitoraggio, distribuzione, backup e flusso di lavoro dell'utente. È qui che la privacy diventa reale, la qualità diventa misurabile e il valore aziendale diventa ripetibile.\u003C\u002Fp>\n\u003Cp>Un'applicazione Open-LLM seria si costruisce attraverso la disciplina ingegneristica, non eseguendo un modello locale una sola volta. Ollama può iniziare il viaggio, ma l'applicazione di produzione inizia dove finisce la demo.\u003C\u002Fp>\n\u003Cp>Tema:\u003C\u002Fp>\n\u003Cp>Ollama, Open LLM, RAG, pgvector, Qdrant, Local AI, LLMOps, astrazione dei provider, architettura AI aziendale\u003C\u002Fp>",{"time":228,"blocks":229,"version":624},1782680070607,[230,234,240,245,250,255,261,266,271,282,290,295,300,326,331,336,341,346,363,368,373,378,384,389,403,408,413,436,441,446,451,456,461,466,471,476,481,506,511,516,521,526,538,543,548,553,558,569,574,579,584,589,594,599,604,609,614,619],{"id":231,"data":232,"type":42,"tunes":233},"HsB_-_Sdzh",{"text":224,"level":40},{},{"id":235,"data":236,"type":238,"tunes":239},"G_FTnJiMVo",{"text":237},"Strumenti come \u003Cb>Ollama\u003C\u002Fb> hanno reso la sperimentazione locale con LLM quasi senza attriti. Installa il runtime, scarica un modello, invia un prompt e un assistente locale risponde in pochi secondi. È utile. È anche la parte più semplice del percorso.","paragraph",{},{"id":241,"data":242,"type":238,"tunes":244},"fVa1sJxmy6",{"text":243},"Una demo da terminale non è un'applicazione. Un modello locale non è un prodotto. Un'applicazione Open-LLM produttiva necessita di ingestione controllata dei dati, recupero, autorizzazioni, valutazione, logging, astrazione del provider, disciplina di deployment e un flusso di lavoro utente che risolva un vero problema aziendale.",{},{"id":246,"data":247,"type":238,"tunes":249},"f6EzZPNhRc",{"text":248},"La tesi centrale è semplice: \u003Cb>Ollama è un runtime, non il prodotto\u003C\u002Fb>. Il prodotto vive nel livello applicativo attorno al modello. Quel livello decide quali documenti sono visibili, quali chunk vengono recuperati, quali prompt vengono utilizzati, come vengono valutate le risposte, come vengono registrati i fallimenti e se il sistema può essere affidabile nel lavoro quotidiano.",{},{"id":251,"data":252,"type":238,"tunes":254},"wjgsXAJQ-i",{"text":253},"È qui che l'AI locale diventa interessante per i team che costruiscono assistenti privati, strumenti di conoscenza interna, funzionalità SaaS basate su LLM o copiloti per flussi di lavoro aziendali. Il modello può funzionare localmente, ma privacy, affidabilità e valore aziendale esistono solo se l'intero sistema è progettato correttamente.",{},{"id":256,"data":257,"type":42,"tunes":260},"NnYUiRBtwJ",{"text":258,"level":259},"Ollama è un runtime, non un prodotto",2,{},{"id":262,"data":263,"type":238,"tunes":265},"nVrpsWCll3",{"text":264},"Ollama è eccellente per eseguire e servire modelli aperti localmente. È particolarmente indicato per esplorazione, flussi di lavoro per sviluppatori, PoC e team che vogliono testare il comportamento del modello senza impegnarsi immediatamente con un provider cloud. Espone l'interazione con modelli locali tramite API e livelli di compatibilità che facilitano la connessione con strumenti esistenti in stile OpenAI.",{},{"id":267,"data":268,"type":238,"tunes":270},"_aQOCMkaG8",{"text":269},"Ciò non significa che Ollama risolva il problema applicativo. Non sa automaticamente quali documenti aziendali un utente può leggere. Non crea isolamento dei tenant, versionamento dei documenti, audit trail, attribuzione delle fonti, dataset di valutazione o flussi di lavoro UI specifici per il business. Queste responsabilità rimangono nell'architettura applicativa.",{},{"id":272,"data":273,"type":280,"tunes":281},"jeeZbnQvh7",{"meta":274,"items":275,"style":279},{},[276,277,278],"\u003Cb>Ollama aiuta con:\u003C\u002Fb> esecuzione locale del modello, sperimentazione rapida, accesso al modello tramite API, PoC offline-first e produttività degli sviluppatori.","\u003Cb>Ollama non risolve da solo:\u003C\u002Fb> controllo degli accessi, qualità RAG, ciclo di vita dei documenti, confini dei tenant, valutazione, audit logging, monitoraggio, comportamento di fallback o progettazione di flussi di lavoro aziendali.","\u003Cb>L'errore architetturale:\u003C\u002Fb> trattare l'inferenza locale come se fosse già un prodotto AI sicuro.","unordered","list",{},{"id":283,"data":284,"type":288,"tunes":289},"U8K0Qat9xz",{"text":285,"caption":286,"alignment":287},"Il modello è la parte più semplice. Il livello applicativo è dove risiede il valore del prodotto.","Principio architetturale","left","quote",{},{"id":291,"data":292,"type":42,"tunes":294},"NYU66FQDT8",{"text":293,"level":259},"Demo, PoC e produzione sono fasi diverse",{},{"id":296,"data":297,"type":238,"tunes":299},"-EGq4eScAy",{"text":298},"Molte iniziative Open-LLM falliscono perché i team confondono una demo funzionante con una capacità produttiva. La differenza non è estetica. Ogni livello di maturità ha un obiettivo diverso, un profilo di rischio diverso e un requisito ingegneristico diverso.",{},{"id":301,"data":302,"type":324,"tunes":325},"V_OydBfVSx",{"content":303,"stretched":43,"withHeadings":14},[304,309,314,319],[305,306,307,308],"Fase","Cosa dimostra","Configurazione tipica","Cosa manca ancora",[310,311,312,313],"Demo","Un modello può rispondere a un prompt localmente.","Ollama su un laptop, un modello, un prompt, nessun controllo reale dei dati.","Autorizzazioni, recupero, log, valutazione, deployment, monitoraggio, flusso di lavoro utente.",[315,316,317,318],"PoC","Un piccolo sistema controllato può rispondere a domande su documenti o flussi di lavoro selezionati.","Interfaccia web di base, script di ingestione, ricerca vettoriale, utenti limitati, ambito documentale limitato.","Scala, governance, dataset di test, strategia di fallback, auditabilità, modello di supporto.",[320,321,322,323],"Produzione","Più utenti possono utilizzare il sistema in modo sicuro e ripetuto all'interno del lavoro reale.","App autenticata, isolamento dei tenant, pipeline RAG, osservabilità, astrazione del provider, backup, processo di rilascio.","Miglioramento continuo, espansione della valutazione, maturità operativa.","table",{},{"id":327,"data":328,"type":238,"tunes":330},"ikp3g9j4So",{"text":329},"Un PoC può essere intenzionalmente piccolo. La produzione non può essere intenzionalmente cieca. Quando utenti reali, dati privati, decisioni aziendali e aspettative di conformità entrano nel sistema, l'architettura deve diventare esplicita.",{},{"id":332,"data":333,"type":42,"tunes":335},"f1xN0TAU53",{"text":334,"level":259},"Dove si inserisce il RAG",{},{"id":337,"data":338,"type":238,"tunes":340},"wVTJ2-nEg8",{"text":339},"\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> è il ponte più comune tra un modello linguistico e la conoscenza aziendale privata. Il modello non conosce magicamente documenti interni, contratti, ticket, specifiche di prodotto o runbook. L'applicazione deve recuperare il contesto rilevante prima di chiedere al modello di rispondere.",{},{"id":342,"data":343,"type":238,"tunes":345},"fvxr_M2czf",{"text":344},"Un flusso RAG pratico si presenta così:",{},{"id":347,"data":348,"type":280,"tunes":362},"tVZHbBjBJe",{"meta":349,"items":351,"style":361},{"counterType":350},"numeric",[352,353,354,355,356,357,358,359,360],"I documenti vengono caricati o sincronizzati da fonti controllate.","Il testo viene estratto, pulito e suddiviso in chunk.","I chunk ricevono metadati come tenant, proprietario, versione del documento, URL di origine, ambito di accesso e timestamp.","Vengono generati embedding per ogni chunk.","I vettori vengono memorizzati in pgvector, Qdrant o un altro livello di recupero.","Al momento della query, l'applicazione verifica le autorizzazioni prima del recupero.","I chunk rilevanti vengono recuperati con ricerca per similarità e filtri sui metadati.","Il costruttore di prompt inietta il contesto selezionato nella richiesta al modello.","La risposta viene generata con citazioni, limiti di confidenza e fallback di nessuna risposta quando il recupero è debole.","ordered",{},{"id":364,"data":365,"type":238,"tunes":367},"5VP9OTHrad",{"text":366},"La RAG riduce le allucinazioni, ma non le elimina. Una strategia di chunking inadeguata, metadati deboli, filtri di autorizzazione mancanti, embedding di bassa qualità o un recupero troppo ampio possono comunque produrre risposte convincenti ma errate. I sistemi RAG seri necessitano di soglie, citazioni, registri di recupero e valutazione.",{},{"id":369,"data":370,"type":42,"tunes":372},"6R3G0KzeXf",{"text":371,"level":259},"Un'Architettura Pratica Locale Open-LLM",{},{"id":374,"data":375,"type":238,"tunes":377},"hsYURnHqGd",{"text":376},"Un percorso di produzione realistico non richiede infrastrutture esotiche. Per molti team, una prima architettura solida può utilizzare un normale stack web: Nuxt per il frontend, un'API Nitro o Node, PostgreSQL come sistema di registrazione, pgvector per il recupero, Ollama come runtime locale, Prisma per l'accesso ai dati e worker in background per l'ingestione e gli embedding.",{},{"id":379,"data":380,"type":382,"tunes":383},"ie58nqmk5o",{"code":381},"Domanda utente | v\nInterfaccia utente | v\nAPI \u002F Backend | +--> Autenticazione +--> Controllo autorizzazioni tenant e ruolo | v\nLivello di recupero | +--> Metadati PostgreSQL +--> Ricerca vettoriale pgvector o Qdrant +--> Soglia di similarità | v\nCostruttore di prompt | +--> prompt di sistema +--> chunk recuperati +--> riferimenti alle fonti +--> regole di non risposta | v\nAstrazione del provider LLM | +--> Ollama \u002F modello locale +--> fallback modello cloud +--> futuro runtime self-hosted | v\nRisposta con fonti | v\nLog, tracce, metriche, dataset di valutazione","code",{},{"id":385,"data":386,"type":238,"tunes":388},"HCdDDntKaG",{"text":387},"Questa architettura mantiene il modello sostituibile. Ollama può essere il primo runtime, ma il sistema non dovrebbe essere vincolato a un singolo motore di inferenza. Un'architettura pulita separa il flusso di lavoro dell'utente, il recupero, la costruzione del prompt, il provider del modello e l'osservabilità.",{},{"id":390,"data":391,"type":280,"tunes":402},"jx3zLyUEmA",{"meta":392,"items":393,"style":279},{},[394,395,396,397,398,399,400,401],"\u003Cb>Frontend:\u003C\u002Fb> Nuxt o un'altra interfaccia web per flussi di lavoro utente autenticati.","\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js o FastAPI per orchestrazione, autorizzazioni e routing del provider.","\u003Cb>Database:\u003C\u002Fb> PostgreSQL per documenti, utenti, tenant, ruoli, prompt, log e metadati.","\u003Cb>Ricerca vettoriale:\u003C\u002Fb> pgvector per un recupero integrato semplice o Qdrant quando la ricerca vettoriale diventa un servizio dedicato.","\u003Cb>Runtime del modello:\u003C\u002Fb> Ollama per esecuzione locale, server llama.cpp per servizio leggero o vLLM per servizio GPU ad alta produttività.","\u003Cb>Archiviazione:\u003C\u002Fb> filesystem locale o archiviazione oggetti compatibile con S3 per file caricati e artefatti estratti.","\u003Cb>Worker:\u003C\u002Fb> ingestione in background, chunking, embedding, re-indicizzazione ed elaborazione delle versioni dei documenti.","\u003Cb>Osservabilità:\u003C\u002Fb> log, metriche, tracce dei prompt, tracce di recupero, monitoraggio della latenza e risultati della valutazione.",{},{"id":404,"data":405,"type":42,"tunes":407},"CG1PJLbPuV",{"text":406,"level":259},"La Checklist di Prontezza per la Produzione",{},{"id":409,"data":410,"type":238,"tunes":412},"aOHxNXO4Mk",{"text":411},"La seguente checklist è la differenza tra una demo di modello locale e un'applicazione Open-LLM utilizzabile:",{},{"id":414,"data":415,"type":280,"tunes":435},"TBkg7dLMT1",{"meta":416,"items":417,"style":279},{},[418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434],"Ogni documento e chunk ha un tenant_id.","Il recupero è bloccato fino a quando non vengono verificati i permessi dell'utente e del ruolo.","I documenti includono metadati, fonte, proprietario, versione, stato del ciclo di vita e politica di conservazione.","La strategia di chunking è documentata e testata su documenti reali.","La selezione del modello di embedding è esplicita e versionata.","La configurazione dell'indice vettoriale è riproducibile.","La soglia di similarità impedisce l'uso cieco di contesto debole.","Le risposte includono citazioni delle fonti o riferimenti alle fonti ove possibile.","Il fallback di non risposta viene utilizzato quando la confidenza del recupero è troppo bassa.","I template dei prompt sono versionati e controllati nelle release.","L'astrazione del provider LLM è costruita dall'inizio.","L'output strutturato viene validato prima dell'uso a valle.","Il dataset di valutazione contiene domande reali, fonti attese e risposte inaccettabili.","I registri di recupero mostrano quali chunk sono stati utilizzati per ogni risposta.","Vengono monitorati latenza, utilizzo dei token, carico GPU\u002FCPU e tassi di errore.","Le regole di privacy e conservazione coprono upload, testo estratto, chunk, embedding, prompt, risposte e log.","I percorsi di distribuzione, backup, ripristino, rollback e incidenti sono documentati.",{},{"id":437,"data":438,"type":238,"tunes":440},"tdTcmD4DEO",{"text":439},"Questo si collega direttamente con \u003Ca href=\"\u002Fit\u002Fenterprise\">Enterprise Delivery OS\u003C\u002Fa>: l'IA utile non è solo una decisione sul modello. È disciplina di consegna, evidenza, controlli, metriche e proprietà operativa.",{},{"id":442,"data":443,"type":42,"tunes":445},"zOuV7s1ByX",{"text":444,"level":259},"Astrazione del Provider: Non Sposare un Solo Modello",{},{"id":447,"data":448,"type":238,"tunes":450},"gPuC35eEAc",{"text":449},"I modelli locali sono preziosi per casi d'uso sensibili alla privacy, scenari offline, controllo dei costi e sperimentazione interna. I modelli cloud possono ancora essere più forti per ragionamenti difficili, codifica, accuratezza multilingue o lavoro multimodale. Un'applicazione di produzione non dovrebbe trattare nessun modello come infrastruttura permanente.",{},{"id":452,"data":453,"type":238,"tunes":455},"ssy1KKIyUv",{"text":454},"Un'astrazione del provider consente allo stesso flusso di lavoro dell'applicazione di chiamare Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM o un altro endpoint self-hosted senza riscrivere il prodotto. L'applicazione decide il provider in base al caso d'uso, alla sensibilità dei dati, alla latenza, ai costi e ai requisiti di qualità.",{},{"id":457,"data":458,"type":382,"tunes":460},"droVs9NwWG",{"code":459},"type LlmProvider = \"ollama\" | \"openai\" | \"gemini\" | \"anthropic\" | \"vllm\"; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array\u003C{ chunkId: string; sourceTitle: string; text: string; }>;\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ \"Rispondi solo dal contesto fornito quando possibile.\", \"Cita i titoli delle fonti.\", \"Dì quando il contesto è insufficiente.\" ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: \"rag-v3.2\" } });\n}",{},{"id":462,"data":463,"type":238,"tunes":465},"TqpI4xqkq1",{"text":464},"L'idea chiave non è la sintassi TypeScript. L'idea chiave è il confine. L'applicazione possiede autorizzazioni, recupero, regole del prompt, tracciamento e valutazione. Il provider produce solo l'output del modello.",{},{"id":467,"data":468,"type":42,"tunes":470},"RuZt2H8Qtd",{"text":469,"level":259},"pgvector vs Qdrant",{},{"id":472,"data":473,"type":238,"tunes":475},"-nl0_dtw9s",{"text":474},"Per molte applicazioni Open-LLM, la decisione sul database vettoriale è semplice all'inizio: se PostgreSQL è già il tuo sistema di registrazione, \u003Cb>pgvector\u003C\u002Fb> è un ottimo punto di partenza. Mantiene metadati, autorizzazioni, registrazioni dei documenti e vettori vicini tra loro. Questo riduce la complessità operativa.",{},{"id":477,"data":478,"type":238,"tunes":480},"mJJZ9Vhiy4",{"text":479},"\u003Cb>Qdrant\u003C\u002Fb> diventa più interessante quando la ricerca vettoriale deve diventare un servizio dedicato: scala di recupero più ampia, filtraggio avanzato, indicizzazione specializzata, modelli di ricerca ibrida o scalabilità indipendente dell'infrastruttura di recupero.",{},{"id":482,"data":483,"type":324,"tunes":505},"ZNBNQmWTqi",{"content":484,"stretched":43,"withHeadings":14},[485,490,495,500],[486,487,488,489],"Opzione","Migliore adattamento","Punti di forza","Compromessi",[491,492,493,494],"pgvector","PoC, produzione iniziale, sistemi già basati su PostgreSQL.","Database singolo, join SQL, comportamento ACID, operazioni più semplici, metadati vicini ai vettori.","Meno specializzato di un database vettoriale dedicato su larga scala di recupero.",[496,497,498,499],"Qdrant","Servizi di ricerca semantica dedicati, carichi di lavoro vettoriali più grandi, filtraggio avanzato e pattern di recupero.","Ricerca vettoriale progettata appositamente, modello di filtraggio robusto, scalabilità indipendente, API focalizzate sul recupero.","Aggiunge un altro componente infrastrutturale e una superficie operativa.",[501,502,503,504],"Iniziare in modo semplice","La maggior parte dei team aziendali che iniziano con applicazioni RAG private.","Minor rischio architetturale, consegna più rapida, percorso di audit più semplice.","Potrebbe richiedere una migrazione successiva se il recupero diventa centrale e su larga scala.",{},{"id":507,"data":508,"type":238,"tunes":510},"EaNwvz0Ala",{"text":509},"Una regola pratica: inizia con pgvector quando PostgreSQL possiede già i tuoi dati aziendali e la scala di recupero è moderata. Passa a Qdrant quando la ricerca vettoriale diventa una capacità di prodotto a sé stante.",{},{"id":512,"data":513,"type":42,"tunes":515},"Xm3eJKCflO",{"text":514,"level":259},"Verifica della realtà su sicurezza e privacy",{},{"id":517,"data":518,"type":238,"tunes":520},"rdIR5uvVuv",{"text":519},"L'inferenza locale non significa automaticamente AI sicura. Significa solo che l'esecuzione del modello può avvenire localmente. L'intero percorso dei dati conta ancora: file caricati, testo estratto, chunk, embedding, log, prompt, risposte, backup, accesso degli sviluppatori, strumenti di amministrazione ed esportazioni di analisi.",{},{"id":522,"data":523,"type":238,"tunes":525},"IhqG3kxPSc",{"text":524},"Anche gli embedding meritano attenzione. Non sono il documento originale, ma rappresentano comunque informazioni derivate da contenuti sensibili. Trattali come parte del percorso dati protetto, specialmente quando sono legati a metadati, record di origine, query degli utenti o identificatori del tenant.",{},{"id":527,"data":528,"type":280,"tunes":537},"QvcBrg8G6B",{"meta":529,"items":530,"style":279},{},[531,532,533,534,535,536],"Non indicizzare i documenti prima che le regole di accesso siano note.","Non recuperare chunk senza filtri per tenant e ruolo.","Non registrare prompt e risposte completi senza regole di conservazione.","Non inviare contesto sensibile a un modello cloud a meno che la policy non lo consenta.","Non dare per scontato che locale sia uguale a conforme al GDPR; la conformità dipende dalla progettazione completa del trattamento.","Non permettere che le copie di valutazione e debug diventino dataset ombra incontrollati.",{},{"id":539,"data":540,"type":238,"tunes":542},"_YLdd4iHrS",{"text":541},"È qui che \u003Ca href=\"\u002Fit\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\">l'architettura SaaS multi-istanza\u003C\u002Fa> conta. Se tenant, ruoli, proprietà dei dati e confini operativi sono deboli, aggiungere un LLM locale può amplificare il rischio invece di ridurlo.",{},{"id":544,"data":545,"type":42,"tunes":547},"I6V0KMIQjb",{"text":546,"level":259},"La valutazione non è opzionale",{},{"id":549,"data":550,"type":238,"tunes":552},"yaKCxuptHO",{"text":551},"Un'applicazione Open-LLM in produzione necessita di un ciclo di valutazione. Senza di esso, i team hanno solo aneddoti. Alcune buone risposte dimostrative non provano che il recupero funzioni, che il prompt sia stabile o che il modello si comporti in modo sicuro nell'uso reale.",{},{"id":554,"data":555,"type":238,"tunes":557},"Kq_qe2AL-v",{"text":556},"Un dataset di valutazione minimo dovrebbe includere domande reali degli utenti, documenti di origine attesi, risposte inaccettabili, casi senza risposta e test di regressione per fallimenti precedenti. Ogni modifica a chunking, embedding, prompt, provider del modello o soglia di recupero dovrebbe essere testata rispetto a quel dataset.",{},{"id":559,"data":560,"type":280,"tunes":568},"oBlROQd5Li",{"meta":561,"items":562,"style":279},{},[563,564,565,566,567],"\u003Cb>Valutazione del recupero:\u003C\u002Fb> Il sistema ha recuperato i chunk di origine corretti?","\u003Cb>Valutazione della risposta:\u003C\u002Fb> La risposta è rimasta ancorata al contesto recuperato?","\u003Cb>Valutazione della sicurezza:\u003C\u002Fb> Il sistema ha evitato divulgazioni vietate o dati non autorizzati?","\u003Cb>Valutazione operativa:\u003C\u002Fb> Latenza, tasso di fallimento e costo sono rimasti entro limiti accettabili?","\u003Cb>Valutazione di regressione:\u003C\u002Fb> Un aggiornamento del modello o del prompt ha rotto un comportamento precedentemente corretto?",{},{"id":570,"data":571,"type":238,"tunes":573},"9gDXPLZ6Rp",{"text":572},"Il RAG riduce le allucinazioni, ma non elimina la necessità di valutazione. La valutazione è il ciclo di controllo che trasforma un prototipo intelligente in un prodotto in miglioramento.",{},{"id":575,"data":576,"type":42,"tunes":578},"Hi1K8JLPUo",{"text":577,"level":259},"Disciplina di distribuzione: il modello è un evento di rilascio",{},{"id":580,"data":581,"type":238,"tunes":583},"sEpigdnlkD",{"text":582},"Cambiare un modello non è una modifica di configurazione innocua. Può cambiare lo stile delle risposte, il comportamento di ragionamento, la qualità della lingua, la latenza, l'uso dei token, la disciplina delle citazioni e le modalità di fallimento. In produzione, gli aggiornamenti del modello dovrebbero essere gestiti come eventi di rilascio.",{},{"id":585,"data":586,"type":238,"tunes":588},"sLXBCBh3E0",{"text":587},"Ciò significa versionare prompt, modelli di embedding, impostazioni di recupero, identificatori del modello, route del provider e risultati di valutazione. Significa anche avere una logica di rollback. Se un nuovo modello causa risposte peggiori ancorate al recupero o rompe l'output strutturato, il sistema necessita di un percorso controllato per tornare alla configurazione nota e funzionante.",{},{"id":590,"data":591,"type":238,"tunes":593},"pcbe8eGMbe",{"text":592},"Questo si inserisce nella stessa logica operativa di \u003Ca href=\"\u002Fit\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\">Delivery &amp; Change\u003C\u002Fa> e \u003Ca href=\"\u002Fit\u002Fenterprise\u002Freference-models\u002Fdigital-platform\">architettura di piattaforma pronta per l'AI\u003C\u002Fa>: una consegna stabile richiede controlli ripetibili, non interventi manuali eroici.",{},{"id":595,"data":596,"type":42,"tunes":598},"mOhI-jF1zx",{"text":597,"level":259},"Conclusione: la produzione inizia dove finisce la demo",{},{"id":600,"data":601,"type":238,"tunes":603},"3mXK980w23",{"text":602},"Ollama può iniziare il viaggio. Rende accessibile l'esecuzione locale del modello e abbassa la barriera alla sperimentazione. Questo è prezioso. Ma l'applicazione di produzione inizia dove finisce la demo.",{},{"id":605,"data":606,"type":238,"tunes":608},"9O27eQ_Svm",{"text":607},"Il modello è solo un componente sostituibile. Il vero prodotto è il sistema controllato che lo circonda: acquisizione, permessi, recupero, prompt, instradamento dei provider, valutazione, log, monitoraggio, distribuzione, backup e flusso di lavoro dell'utente. È qui che la privacy diventa reale, la qualità diventa misurabile e il valore aziendale diventa ripetibile.",{},{"id":610,"data":611,"type":238,"tunes":613},"4Lyy3E4ZsF",{"text":612},"Un'applicazione Open-LLM seria si costruisce attraverso la disciplina ingegneristica, non eseguendo un modello locale una sola volta. Ollama può iniziare il viaggio, ma l'applicazione di produzione inizia dove finisce la demo.",{},{"id":615,"data":616,"type":238,"tunes":618},"eKPRtinG5L",{"text":617},"Tema:",{},{"id":620,"data":621,"type":238,"tunes":623},"GMa6lE1NNl",{"text":622},"Ollama, Open LLM, RAG, pgvector, Qdrant, Local AI, LLMOps, astrazione dei provider, architettura AI aziendale",{},"2.31","Eseguire un modello locale con Ollama è facile. Costruire un'applicazione Open-LLM pronta per la produzione è più difficile: richiede RAG, controllo degli accessi, astrazione del provider, valutazione, logging, disciplina di deployment e un livello applicativo controllato attorno al modello.","\u002Fuploads\u002F2026\u002F06\u002Follama-is-not-the-product-building-production-ready-open-llm-applications-1782679361640-h0usqf.webp","ollama-is-not-the-product-building-production-ready-open-llm-applications-1782679361640-h0usqf","PUBLISHED","2026-06-28T16:39:00.000Z","2026-06-28T20:39:17.972Z","2026-06-28T20:56:51.719Z",{"en":633,"de":634,"sr":635,"es":636,"fr":637,"it":638,"ru":639,"zh":640},"\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fde\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fsr\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fes\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Ffr\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fit\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fru\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications","\u002Fzh\u002Fblog\u002Follama-is-not-the-product-building-production-ready-open-llm-applications",[642,646,650,654,658],{"id":643,"name":644,"slug":645},39,"Enterprise Delivery OS","enterprise",{"id":647,"name":648,"slug":649},87,"Playbook: LLMOps","llmops",{"id":651,"name":652,"slug":653},58,"Valutazione e gate di qualità","evaluation",{"id":655,"name":656,"slug":657},89,"Harness di valutazione","evaluation-harness",{"id":659,"name":660,"slug":661},85,"Gate di qualità","quality-gates",{"id":663,"login":664,"email":665,"displayName":666},"20","rooth8233","","Aleksandar Stajić",[668,998],{"lang":669,"title":670,"content":671,"contentJson":672,"excerpt":997},"en","Ollama Is Not the Product: Building Production-Ready Open-LLM Applications","{\"time\":1782679301267,\"blocks\":[{\"id\":\"HsB_-_Sdzh\",\"type\":\"header\",\"data\":{\"text\":\"Ollama Is Not the Product: Building Production-Ready Open-LLM Applications\",\"level\":1},\"tunes\":{}},{\"id\":\"G_FTnJiMVo\",\"type\":\"paragraph\",\"data\":{\"text\":\"Tools like \u003Cb>Ollama\u003C\u002Fb> have made local LLM experimentation almost frictionless. Install the runtime, pull a model, send a prompt, and a local assistant answers in seconds. That is useful. It is also the easiest part of the journey.\"},\"tunes\":{}},{\"id\":\"fVa1sJxmy6\",\"type\":\"paragraph\",\"data\":{\"text\":\"A terminal demo is not an application. A local model is not a product. A productive Open-LLM application needs controlled data ingestion, retrieval, permissions, evaluation, logging, provider abstraction, deployment discipline, and a user workflow that solves a real business problem.\"},\"tunes\":{}},{\"id\":\"f6EzZPNhRc\",\"type\":\"paragraph\",\"data\":{\"text\":\"The core thesis is simple: \u003Cb>Ollama is a runtime, not the product\u003C\u002Fb>. The product lives in the application layer around the model. That layer decides which documents are visible, which chunks are retrieved, which prompts are used, how answers are evaluated, how failures are logged, and whether the system can be trusted in daily work.\"},\"tunes\":{}},{\"id\":\"wjgsXAJQ-i\",\"type\":\"paragraph\",\"data\":{\"text\":\"This is where local AI becomes interesting for teams building private assistants, internal knowledge tools, LLM-enabled SaaS features, or enterprise workflow copilots. The model can run locally, but privacy, reliability, and business value only exist if the full system is engineered properly.\"},\"tunes\":{}},{\"id\":\"NnYUiRBtwJ\",\"type\":\"header\",\"data\":{\"text\":\"Ollama Is a Runtime, Not a Product\",\"level\":2},\"tunes\":{}},{\"id\":\"nVrpsWCll3\",\"type\":\"paragraph\",\"data\":{\"text\":\"Ollama is excellent for running and serving open models locally. It is especially strong for exploration, developer workflows, PoCs, and teams that want to test model behavior without immediately committing to a cloud provider. It exposes local model interaction through APIs and compatibility layers that make it easier to connect existing OpenAI-style tooling.\"},\"tunes\":{}},{\"id\":\"_aQOCMkaG8\",\"type\":\"paragraph\",\"data\":{\"text\":\"That does not mean Ollama solves the application problem. It does not automatically know which company documents a user may read. It does not create tenant isolation, document versioning, audit trails, source attribution, evaluation datasets, or business-specific UI workflows. Those responsibilities stay with the application architecture.\"},\"tunes\":{}},{\"id\":\"jeeZbnQvh7\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"\u003Cb>Ollama helps with:\u003C\u002Fb> local model execution, fast experimentation, API-based model access, offline-first PoCs, and developer productivity.\",\"\u003Cb>Ollama does not solve by itself:\u003C\u002Fb> access control, RAG quality, document lifecycle, tenant boundaries, evaluation, audit logging, monitoring, fallback behavior, or enterprise workflow design.\",\"\u003Cb>The architectural mistake:\u003C\u002Fb> treating local inference as if it were already a secure AI product.\"]},\"tunes\":{}},{\"id\":\"U8K0Qat9xz\",\"type\":\"quote\",\"data\":{\"text\":\"The model is the easiest part. The application layer is where the product value lives.\",\"caption\":\"Architecture principle\",\"alignment\":\"left\"},\"tunes\":{}},{\"id\":\"NYU66FQDT8\",\"type\":\"header\",\"data\":{\"text\":\"Demo, PoC, and Production Are Different Stages\",\"level\":2},\"tunes\":{}},{\"id\":\"-EGq4eScAy\",\"type\":\"paragraph\",\"data\":{\"text\":\"Many Open-LLM initiatives fail because teams confuse a working demo with a production capability. The difference is not cosmetic. Each maturity level has a different goal, different risk profile, and different engineering requirement.\"},\"tunes\":{}},{\"id\":\"V_OydBfVSx\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Stage\",\"What it proves\",\"Typical setup\",\"What is still missing\"],[\"Demo\",\"A model can answer a prompt locally.\",\"Ollama on a laptop, one model, one prompt, no real data control.\",\"Permissions, retrieval, logs, evaluation, deployment, monitoring, user workflow.\"],[\"PoC\",\"A small controlled system can answer questions over selected documents or workflows.\",\"Basic web UI, ingestion script, vector search, limited users, limited document scope.\",\"Scale, governance, test datasets, fallback strategy, auditability, support model.\"],[\"Production\",\"Multiple users can use the system safely and repeatedly inside real work.\",\"Authenticated app, tenant isolation, RAG pipeline, observability, provider abstraction, backups, release process.\",\"Continuous improvement, evaluation expansion, operational maturity.\"]]},\"tunes\":{}},{\"id\":\"ikp3g9j4So\",\"type\":\"paragraph\",\"data\":{\"text\":\"A PoC can be intentionally small. Production cannot be intentionally blind. Once real users, private data, business decisions, and compliance expectations enter the system, the architecture must become explicit.\"},\"tunes\":{}},{\"id\":\"f1xN0TAU53\",\"type\":\"header\",\"data\":{\"text\":\"Where RAG Fits In\",\"level\":2},\"tunes\":{}},{\"id\":\"wVTJ2-nEg8\",\"type\":\"paragraph\",\"data\":{\"text\":\"\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> is the most common bridge between a language model and private business knowledge. The model does not magically know internal documents, contracts, tickets, product specs, or runbooks. The application must retrieve relevant context before asking the model to answer.\"},\"tunes\":{}},{\"id\":\"fvxr_M2czf\",\"type\":\"paragraph\",\"data\":{\"text\":\"A practical RAG flow looks like this:\"},\"tunes\":{}},{\"id\":\"tVZHbBjBJe\",\"type\":\"list\",\"data\":{\"style\":\"ordered\",\"meta\":{\"counterType\":\"numeric\"},\"items\":[\"Documents are uploaded or synchronized from controlled sources.\",\"Text is extracted, cleaned, and split into chunks.\",\"Chunks receive metadata such as tenant, owner, document version, source URL, access scope, and timestamp.\",\"Embeddings are generated for each chunk.\",\"Vectors are stored in pgvector, Qdrant, or another retrieval layer.\",\"At query time, the application checks permissions before retrieval.\",\"Relevant chunks are retrieved with similarity search and metadata filters.\",\"The prompt builder injects selected context into the model request.\",\"The answer is generated with citations, confidence boundaries, and no-answer fallback when retrieval is weak.\"]},\"tunes\":{}},{\"id\":\"5VP9OTHrad\",\"type\":\"paragraph\",\"data\":{\"text\":\"RAG reduces hallucinations, but it does not eliminate them. A poor chunking strategy, weak metadata, missing permission filters, low-quality embeddings, or overly broad retrieval can still produce convincing but wrong answers. Serious RAG systems need thresholds, citations, retrieval logs, and evaluation.\"},\"tunes\":{}},{\"id\":\"6R3G0KzeXf\",\"type\":\"header\",\"data\":{\"text\":\"A Practical Local Open-LLM Architecture\",\"level\":2},\"tunes\":{}},{\"id\":\"hsYURnHqGd\",\"type\":\"paragraph\",\"data\":{\"text\":\"A realistic production path does not require exotic infrastructure. For many teams, a strong first architecture can use a normal web stack: Nuxt for the frontend, a Nitro or Node API, PostgreSQL as the system of record, pgvector for retrieval, Ollama as a local runtime, Prisma for data access, and background workers for ingestion and embeddings.\"},\"tunes\":{}},{\"id\":\"ie58nqmk5o\",\"type\":\"code\",\"data\":{\"code\":\"User question | v\\nFrontend UI | v\\nAPI \u002F Backend | +--> Authentication +--> Tenant and role permission check | v\\nRetrieval layer | +--> PostgreSQL metadata +--> pgvector or Qdrant vector search +--> similarity threshold | v\\nPrompt builder | +--> system prompt +--> retrieved chunks +--> source references +--> no-answer rules | v\\nLLM provider abstraction | +--> Ollama \u002F local model +--> cloud model fallback +--> future self-hosted runtime | v\\nAnswer with sources | v\\nLogs, traces, metrics, evaluation dataset\"},\"tunes\":{}},{\"id\":\"HCdDDntKaG\",\"type\":\"paragraph\",\"data\":{\"text\":\"This architecture keeps the model replaceable. Ollama can be the first runtime, but the system should not be locked to one inference engine. A clean architecture separates user workflow, retrieval, prompt construction, model provider, and observability.\"},\"tunes\":{}},{\"id\":\"jx3zLyUEmA\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"\u003Cb>Frontend:\u003C\u002Fb> Nuxt or another web UI for authenticated user workflows.\",\"\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js, or FastAPI for orchestration, permissions, and provider routing.\",\"\u003Cb>Database:\u003C\u002Fb> PostgreSQL for documents, users, tenants, roles, prompts, logs, and metadata.\",\"\u003Cb>Vector search:\u003C\u002Fb> pgvector for simple integrated retrieval or Qdrant when vector search becomes a dedicated service.\",\"\u003Cb>Model runtime:\u003C\u002Fb> Ollama for local execution, llama.cpp server for lightweight serving, or vLLM for higher-throughput GPU serving.\",\"\u003Cb>Storage:\u003C\u002Fb> local filesystem or S3-compatible object storage for uploaded files and extracted artifacts.\",\"\u003Cb>Workers:\u003C\u002Fb> background ingestion, chunking, embedding, re-indexing, and document version processing.\",\"\u003Cb>Observability:\u003C\u002Fb> logs, metrics, prompt traces, retrieval traces, latency tracking, and evaluation results.\"]},\"tunes\":{}},{\"id\":\"CG1PJLbPuV\",\"type\":\"header\",\"data\":{\"text\":\"The Production Readiness Checklist\",\"level\":2},\"tunes\":{}},{\"id\":\"aOHxNXO4Mk\",\"type\":\"paragraph\",\"data\":{\"text\":\"The following checklist is the difference between a local model demo and a usable Open-LLM application:\"},\"tunes\":{}},{\"id\":\"TBkg7dLMT1\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"Every document and chunk has a tenant_id.\",\"Retrieval is blocked until user and role permissions are checked.\",\"Documents include metadata, source, owner, version, lifecycle state, and retention policy.\",\"Chunking strategy is documented and tested against real documents.\",\"Embedding model selection is explicit and versioned.\",\"Vector index configuration is reproducible.\",\"Similarity threshold prevents weak context from being used blindly.\",\"Answers include source citations or source references where possible.\",\"No-answer fallback is used when retrieval confidence is too low.\",\"Prompt templates are versioned and release-controlled.\",\"LLM provider abstraction is built from the start.\",\"Structured output is validated before downstream use.\",\"Evaluation dataset contains real questions, expected sources, and unacceptable answers.\",\"Retrieval logs show which chunks were used for each answer.\",\"Latency, token usage, GPU\u002FCPU load, and error rates are monitored.\",\"Privacy and retention rules cover uploads, extracted text, chunks, embeddings, prompts, responses, and logs.\",\"Deployment, backup, restore, rollback, and incident paths are documented.\"]},\"tunes\":{}},{\"id\":\"tdTcmD4DEO\",\"type\":\"paragraph\",\"data\":{\"text\":\"This connects directly with \u003Ca href=\\\"\u002Fenterprise\\\">Enterprise Delivery OS\u003C\u002Fa>: useful AI is not only a model decision. It is delivery discipline, evidence, controls, metrics, and operational ownership.\"},\"tunes\":{}},{\"id\":\"zOuV7s1ByX\",\"type\":\"header\",\"data\":{\"text\":\"Provider Abstraction: Do Not Marry One Model\",\"level\":2},\"tunes\":{}},{\"id\":\"gPuC35eEAc\",\"type\":\"paragraph\",\"data\":{\"text\":\"Local models are valuable for privacy-sensitive use cases, offline scenarios, cost control, and internal experimentation. Cloud models may still be stronger for difficult reasoning, coding, multilingual accuracy, or multimodal work. A production application should not treat any one model as permanent infrastructure.\"},\"tunes\":{}},{\"id\":\"ssy1KKIyUv\",\"type\":\"paragraph\",\"data\":{\"text\":\"A provider abstraction allows the same application workflow to call Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM, or another self-hosted endpoint without rewriting the product. The application decides the provider based on use case, data sensitivity, latency, cost, and quality requirements.\"},\"tunes\":{}},{\"id\":\"droVs9NwWG\",\"type\":\"code\",\"data\":{\"code\":\"type LlmProvider = \\\"ollama\\\" | \\\"openai\\\" | \\\"gemini\\\" | \\\"anthropic\\\" | \\\"vllm\\\"; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array\u003C{ chunkId: string; sourceTitle: string; text: string; }>;\\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ \\\"Answer only from provided context when possible.\\\", \\\"Cite source titles.\\\", \\\"Say when the context is insufficient.\\\" ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: \\\"rag-v3.2\\\" } });\\n}\"},\"tunes\":{}},{\"id\":\"TqpI4xqkq1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The key idea is not the TypeScript syntax. The key idea is the boundary. The application owns permissions, retrieval, prompt rules, tracing, and evaluation. The provider only produces the model output.\"},\"tunes\":{}},{\"id\":\"RuZt2H8Qtd\",\"type\":\"header\",\"data\":{\"text\":\"pgvector vs Qdrant\",\"level\":2},\"tunes\":{}},{\"id\":\"-nl0_dtw9s\",\"type\":\"paragraph\",\"data\":{\"text\":\"For many Open-LLM applications, the vector store decision is simple at the beginning: if PostgreSQL is already your system of record, \u003Cb>pgvector\u003C\u002Fb> is a strong starting point. It keeps metadata, permissions, document records, and vectors close together. That reduces operational complexity.\"},\"tunes\":{}},{\"id\":\"mJJZ9Vhiy4\",\"type\":\"paragraph\",\"data\":{\"text\":\"\u003Cb>Qdrant\u003C\u002Fb> becomes more attractive when vector search needs to become a dedicated service: larger retrieval scale, advanced filtering, specialized indexing, hybrid search patterns, or independent scaling of retrieval infrastructure.\"},\"tunes\":{}},{\"id\":\"ZNBNQmWTqi\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Option\",\"Best fit\",\"Strengths\",\"Trade-offs\"],[\"pgvector\",\"PoCs, early production, systems already built on PostgreSQL.\",\"Single database, SQL joins, ACID behavior, simpler operations, metadata close to vectors.\",\"Less specialized than a dedicated vector database at large retrieval scale.\"],[\"Qdrant\",\"Dedicated semantic search services, larger vector workloads, advanced filtering and retrieval patterns.\",\"Purpose-built vector search, strong filtering model, independent scaling, retrieval-focused APIs.\",\"Adds another infrastructure component and operational surface.\"],[\"Start simple\",\"Most enterprise teams beginning with private RAG applications.\",\"Lower architecture risk, faster delivery, easier audit path.\",\"May need migration later if retrieval becomes central and high-scale.\"]]},\"tunes\":{}},{\"id\":\"EaNwvz0Ala\",\"type\":\"paragraph\",\"data\":{\"text\":\"A practical rule: start with pgvector when PostgreSQL already owns your business data and the retrieval scale is moderate. Move to Qdrant when vector search becomes a product capability of its own.\"},\"tunes\":{}},{\"id\":\"Xm3eJKCflO\",\"type\":\"header\",\"data\":{\"text\":\"Security and Privacy Reality Check\",\"level\":2},\"tunes\":{}},{\"id\":\"rdIR5uvVuv\",\"type\":\"paragraph\",\"data\":{\"text\":\"Local inference does not automatically mean secure AI. It only means the model execution can happen locally. The full data path still matters: uploaded files, extracted text, chunks, embeddings, logs, prompts, responses, backups, developer access, admin tools, and analytics exports.\"},\"tunes\":{}},{\"id\":\"IhqG3kxPSc\",\"type\":\"paragraph\",\"data\":{\"text\":\"Embeddings also deserve care. They are not the original document, but they still represent information derived from sensitive content. Treat them as part of the protected data path, especially when they are tied to metadata, source records, user queries, or tenant identifiers.\"},\"tunes\":{}},{\"id\":\"QvcBrg8G6B\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"Do not index documents before access rules are known.\",\"Do not retrieve chunks without tenant and role filters.\",\"Do not log full prompts and responses without retention rules.\",\"Do not send sensitive context to a cloud model unless the policy allows it.\",\"Do not assume that local equals GDPR-compliant; compliance depends on the complete processing design.\",\"Do not let evaluation and debugging copies become uncontrolled shadow datasets.\"]},\"tunes\":{}},{\"id\":\"_YLdd4iHrS\",\"type\":\"paragraph\",\"data\":{\"text\":\"This is where \u003Ca href=\\\"\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\\\">multi-instance SaaS architecture\u003C\u002Fa> matters. If tenants, roles, data ownership, and operational boundaries are weak, adding a local LLM can amplify risk instead of reducing it.\"},\"tunes\":{}},{\"id\":\"I6V0KMIQjb\",\"type\":\"header\",\"data\":{\"text\":\"Evaluation Is Not Optional\",\"level\":2},\"tunes\":{}},{\"id\":\"yaKCxuptHO\",\"type\":\"paragraph\",\"data\":{\"text\":\"A production Open-LLM application needs an evaluation loop. Without it, teams only have anecdotes. A few good demo answers do not prove that retrieval works, that the prompt is stable, or that the model behaves safely across real usage.\"},\"tunes\":{}},{\"id\":\"Kq_qe2AL-v\",\"type\":\"paragraph\",\"data\":{\"text\":\"A minimal evaluation dataset should include real user questions, expected source documents, unacceptable answers, no-answer cases, and regression tests for previous failures. Every change to chunking, embeddings, prompts, model provider, or retrieval threshold should be tested against that dataset.\"},\"tunes\":{}},{\"id\":\"oBlROQd5Li\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"\u003Cb>Retrieval evaluation:\u003C\u002Fb> Did the system fetch the right source chunks?\",\"\u003Cb>Answer evaluation:\u003C\u002Fb> Did the answer stay grounded in the retrieved context?\",\"\u003Cb>Safety evaluation:\u003C\u002Fb> Did the system avoid forbidden disclosures or unauthorized data?\",\"\u003Cb>Operational evaluation:\u003C\u002Fb> Did latency, failure rate, and cost stay inside acceptable limits?\",\"\u003Cb>Regression evaluation:\u003C\u002Fb> Did a model or prompt upgrade break previously correct behavior?\"]},\"tunes\":{}},{\"id\":\"9gDXPLZ6Rp\",\"type\":\"paragraph\",\"data\":{\"text\":\"RAG reduces hallucinations, but it does not remove the need for evaluation. Evaluation is the control loop that turns a clever prototype into an improving product.\"},\"tunes\":{}},{\"id\":\"Hi1K8JLPUo\",\"type\":\"header\",\"data\":{\"text\":\"Deployment Discipline: The Model Is a Release Event\",\"level\":2},\"tunes\":{}},{\"id\":\"sEpigdnlkD\",\"type\":\"paragraph\",\"data\":{\"text\":\"Changing a model is not a harmless configuration tweak. It can change answer style, reasoning behavior, language quality, latency, token usage, citation discipline, and failure modes. In production, model upgrades should be handled like release events.\"},\"tunes\":{}},{\"id\":\"sLXBCBh3E0\",\"type\":\"paragraph\",\"data\":{\"text\":\"That means versioning prompts, embedding models, retrieval settings, model identifiers, provider routes, and evaluation results. It also means having rollback logic. If a new model causes worse retrieval-grounded answers or breaks structured output, the system needs a controlled path back to the known-good configuration.\"},\"tunes\":{}},{\"id\":\"pcbe8eGMbe\",\"type\":\"paragraph\",\"data\":{\"text\":\"This fits the same operating logic as \u003Ca href=\\\"\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\\\">Delivery &amp; Change\u003C\u002Fa> and \u003Ca href=\\\"\u002Fenterprise\u002Freference-models\u002Fdigital-platform\\\">AI-ready platform architecture\u003C\u002Fa>: stable delivery requires repeatable controls, not heroic manual fixes.\"},\"tunes\":{}},{\"id\":\"mOhI-jF1zx\",\"type\":\"header\",\"data\":{\"text\":\"Conclusion: Production Begins Where the Demo Ends\",\"level\":2},\"tunes\":{}},{\"id\":\"3mXK980w23\",\"type\":\"paragraph\",\"data\":{\"text\":\"Ollama can start the journey. It makes local model execution accessible and lowers the barrier to experimentation. That is valuable. But the production application begins where the demo ends.\"},\"tunes\":{}},{\"id\":\"9O27eQ_Svm\",\"type\":\"paragraph\",\"data\":{\"text\":\"The model is only one replaceable component. The real product is the controlled system around it: ingestion, permissions, retrieval, prompts, provider routing, evaluation, logs, monitoring, deployment, backup, and user workflow. That is where privacy becomes real, quality becomes measurable, and business value becomes repeatable.\"},\"tunes\":{}},{\"id\":\"4Lyy3E4ZsF\",\"type\":\"paragraph\",\"data\":{\"text\":\"A serious Open-LLM application is built through engineering discipline, not by running a local model once. Ollama can start the journey, but the production application begins where the demo ends.\"},\"tunes\":{}},{\"id\":\"eKPRtinG5L\",\"type\":\"paragraph\",\"data\":{\"text\":\"Theme:\"},\"tunes\":{}},{\"id\":\"GMa6lE1NNl\",\"type\":\"paragraph\",\"data\":{\"text\":\"Ollama, Open LLM, RAG, pgvector, Qdrant, Local AI, LLMOps, Provider Abstraction, Enterprise AI Architecture\"},\"tunes\":{}}],\"version\":\"2.31.5\"}",{"time":673,"blocks":674,"version":996},1782679301267,[675,678,682,686,690,694,698,702,706,714,719,723,727,749,753,757,761,765,779,783,787,791,795,799,812,816,820,842,846,850,854,858,862,866,869,873,877,899,903,907,911,915,926,930,934,938,942,952,956,960,964,968,972,976,980,984,988,992],{"id":231,"data":676,"type":42,"tunes":677},{"text":670,"level":40},{},{"id":235,"data":679,"type":238,"tunes":681},{"text":680},"Tools like \u003Cb>Ollama\u003C\u002Fb> have made local LLM experimentation almost frictionless. Install the runtime, pull a model, send a prompt, and a local assistant answers in seconds. That is useful. It is also the easiest part of the journey.",{},{"id":241,"data":683,"type":238,"tunes":685},{"text":684},"A terminal demo is not an application. A local model is not a product. A productive Open-LLM application needs controlled data ingestion, retrieval, permissions, evaluation, logging, provider abstraction, deployment discipline, and a user workflow that solves a real business problem.",{},{"id":246,"data":687,"type":238,"tunes":689},{"text":688},"The core thesis is simple: \u003Cb>Ollama is a runtime, not the product\u003C\u002Fb>. The product lives in the application layer around the model. That layer decides which documents are visible, which chunks are retrieved, which prompts are used, how answers are evaluated, how failures are logged, and whether the system can be trusted in daily work.",{},{"id":251,"data":691,"type":238,"tunes":693},{"text":692},"This is where local AI becomes interesting for teams building private assistants, internal knowledge tools, LLM-enabled SaaS features, or enterprise workflow copilots. The model can run locally, but privacy, reliability, and business value only exist if the full system is engineered properly.",{},{"id":256,"data":695,"type":42,"tunes":697},{"text":696,"level":259},"Ollama Is a Runtime, Not a Product",{},{"id":262,"data":699,"type":238,"tunes":701},{"text":700},"Ollama is excellent for running and serving open models locally. It is especially strong for exploration, developer workflows, PoCs, and teams that want to test model behavior without immediately committing to a cloud provider. It exposes local model interaction through APIs and compatibility layers that make it easier to connect existing OpenAI-style tooling.",{},{"id":267,"data":703,"type":238,"tunes":705},{"text":704},"That does not mean Ollama solves the application problem. It does not automatically know which company documents a user may read. It does not create tenant isolation, document versioning, audit trails, source attribution, evaluation datasets, or business-specific UI workflows. Those responsibilities stay with the application architecture.",{},{"id":272,"data":707,"type":280,"tunes":713},{"meta":708,"items":709,"style":279},{},[710,711,712],"\u003Cb>Ollama helps with:\u003C\u002Fb> local model execution, fast experimentation, API-based model access, offline-first PoCs, and developer productivity.","\u003Cb>Ollama does not solve by itself:\u003C\u002Fb> access control, RAG quality, document lifecycle, tenant boundaries, evaluation, audit logging, monitoring, fallback behavior, or enterprise workflow design.","\u003Cb>The architectural mistake:\u003C\u002Fb> treating local inference as if it were already a secure AI product.",{},{"id":283,"data":715,"type":288,"tunes":718},{"text":716,"caption":717,"alignment":287},"The model is the easiest part. The application layer is where the product value lives.","Architecture principle",{},{"id":291,"data":720,"type":42,"tunes":722},{"text":721,"level":259},"Demo, PoC, and Production Are Different Stages",{},{"id":296,"data":724,"type":238,"tunes":726},{"text":725},"Many Open-LLM initiatives fail because teams confuse a working demo with a production capability. The difference is not cosmetic. Each maturity level has a different goal, different risk profile, and different engineering requirement.",{},{"id":301,"data":728,"type":324,"tunes":748},{"content":729,"stretched":43,"withHeadings":14},[730,735,739,743],[731,732,733,734],"Stage","What it proves","Typical setup","What is still missing",[310,736,737,738],"A model can answer a prompt locally.","Ollama on a laptop, one model, one prompt, no real data control.","Permissions, retrieval, logs, evaluation, deployment, monitoring, user workflow.",[315,740,741,742],"A small controlled system can answer questions over selected documents or workflows.","Basic web UI, ingestion script, vector search, limited users, limited document scope.","Scale, governance, test datasets, fallback strategy, auditability, support model.",[744,745,746,747],"Production","Multiple users can use the system safely and repeatedly inside real work.","Authenticated app, tenant isolation, RAG pipeline, observability, provider abstraction, backups, release process.","Continuous improvement, evaluation expansion, operational maturity.",{},{"id":327,"data":750,"type":238,"tunes":752},{"text":751},"A PoC can be intentionally small. Production cannot be intentionally blind. Once real users, private data, business decisions, and compliance expectations enter the system, the architecture must become explicit.",{},{"id":332,"data":754,"type":42,"tunes":756},{"text":755,"level":259},"Where RAG Fits In",{},{"id":337,"data":758,"type":238,"tunes":760},{"text":759},"\u003Cb>Retrieval-Augmented Generation\u003C\u002Fb> is the most common bridge between a language model and private business knowledge. The model does not magically know internal documents, contracts, tickets, product specs, or runbooks. The application must retrieve relevant context before asking the model to answer.",{},{"id":342,"data":762,"type":238,"tunes":764},{"text":763},"A practical RAG flow looks like this:",{},{"id":347,"data":766,"type":280,"tunes":778},{"meta":767,"items":768,"style":361},{"counterType":350},[769,770,771,772,773,774,775,776,777],"Documents are uploaded or synchronized from controlled sources.","Text is extracted, cleaned, and split into chunks.","Chunks receive metadata such as tenant, owner, document version, source URL, access scope, and timestamp.","Embeddings are generated for each chunk.","Vectors are stored in pgvector, Qdrant, or another retrieval layer.","At query time, the application checks permissions before retrieval.","Relevant chunks are retrieved with similarity search and metadata filters.","The prompt builder injects selected context into the model request.","The answer is generated with citations, confidence boundaries, and no-answer fallback when retrieval is weak.",{},{"id":364,"data":780,"type":238,"tunes":782},{"text":781},"RAG reduces hallucinations, but it does not eliminate them. A poor chunking strategy, weak metadata, missing permission filters, low-quality embeddings, or overly broad retrieval can still produce convincing but wrong answers. Serious RAG systems need thresholds, citations, retrieval logs, and evaluation.",{},{"id":369,"data":784,"type":42,"tunes":786},{"text":785,"level":259},"A Practical Local Open-LLM Architecture",{},{"id":374,"data":788,"type":238,"tunes":790},{"text":789},"A realistic production path does not require exotic infrastructure. For many teams, a strong first architecture can use a normal web stack: Nuxt for the frontend, a Nitro or Node API, PostgreSQL as the system of record, pgvector for retrieval, Ollama as a local runtime, Prisma for data access, and background workers for ingestion and embeddings.",{},{"id":379,"data":792,"type":382,"tunes":794},{"code":793},"User question | v\nFrontend UI | v\nAPI \u002F Backend | +--> Authentication +--> Tenant and role permission check | v\nRetrieval layer | +--> PostgreSQL metadata +--> pgvector or Qdrant vector search +--> similarity threshold | v\nPrompt builder | +--> system prompt +--> retrieved chunks +--> source references +--> no-answer rules | v\nLLM provider abstraction | +--> Ollama \u002F local model +--> cloud model fallback +--> future self-hosted runtime | v\nAnswer with sources | v\nLogs, traces, metrics, evaluation dataset",{},{"id":385,"data":796,"type":238,"tunes":798},{"text":797},"This architecture keeps the model replaceable. Ollama can be the first runtime, but the system should not be locked to one inference engine. A clean architecture separates user workflow, retrieval, prompt construction, model provider, and observability.",{},{"id":390,"data":800,"type":280,"tunes":811},{"meta":801,"items":802,"style":279},{},[803,804,805,806,807,808,809,810],"\u003Cb>Frontend:\u003C\u002Fb> Nuxt or another web UI for authenticated user workflows.","\u003Cb>Backend\u002FAPI:\u003C\u002Fb> Nitro, Node.js, or FastAPI for orchestration, permissions, and provider routing.","\u003Cb>Database:\u003C\u002Fb> PostgreSQL for documents, users, tenants, roles, prompts, logs, and metadata.","\u003Cb>Vector search:\u003C\u002Fb> pgvector for simple integrated retrieval or Qdrant when vector search becomes a dedicated service.","\u003Cb>Model runtime:\u003C\u002Fb> Ollama for local execution, llama.cpp server for lightweight serving, or vLLM for higher-throughput GPU serving.","\u003Cb>Storage:\u003C\u002Fb> local filesystem or S3-compatible object storage for uploaded files and extracted artifacts.","\u003Cb>Workers:\u003C\u002Fb> background ingestion, chunking, embedding, re-indexing, and document version processing.","\u003Cb>Observability:\u003C\u002Fb> logs, metrics, prompt traces, retrieval traces, latency tracking, and evaluation results.",{},{"id":404,"data":813,"type":42,"tunes":815},{"text":814,"level":259},"The Production Readiness Checklist",{},{"id":409,"data":817,"type":238,"tunes":819},{"text":818},"The following checklist is the difference between a local model demo and a usable Open-LLM application:",{},{"id":414,"data":821,"type":280,"tunes":841},{"meta":822,"items":823,"style":279},{},[824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840],"Every document and chunk has a tenant_id.","Retrieval is blocked until user and role permissions are checked.","Documents include metadata, source, owner, version, lifecycle state, and retention policy.","Chunking strategy is documented and tested against real documents.","Embedding model selection is explicit and versioned.","Vector index configuration is reproducible.","Similarity threshold prevents weak context from being used blindly.","Answers include source citations or source references where possible.","No-answer fallback is used when retrieval confidence is too low.","Prompt templates are versioned and release-controlled.","LLM provider abstraction is built from the start.","Structured output is validated before downstream use.","Evaluation dataset contains real questions, expected sources, and unacceptable answers.","Retrieval logs show which chunks were used for each answer.","Latency, token usage, GPU\u002FCPU load, and error rates are monitored.","Privacy and retention rules cover uploads, extracted text, chunks, embeddings, prompts, responses, and logs.","Deployment, backup, restore, rollback, and incident paths are documented.",{},{"id":437,"data":843,"type":238,"tunes":845},{"text":844},"This connects directly with \u003Ca href=\"\u002Fenterprise\">Enterprise Delivery OS\u003C\u002Fa>: useful AI is not only a model decision. It is delivery discipline, evidence, controls, metrics, and operational ownership.",{},{"id":442,"data":847,"type":42,"tunes":849},{"text":848,"level":259},"Provider Abstraction: Do Not Marry One Model",{},{"id":447,"data":851,"type":238,"tunes":853},{"text":852},"Local models are valuable for privacy-sensitive use cases, offline scenarios, cost control, and internal experimentation. Cloud models may still be stronger for difficult reasoning, coding, multilingual accuracy, or multimodal work. A production application should not treat any one model as permanent infrastructure.",{},{"id":452,"data":855,"type":238,"tunes":857},{"text":856},"A provider abstraction allows the same application workflow to call Ollama, OpenAI, Gemini, Anthropic, Mistral, vLLM, or another self-hosted endpoint without rewriting the product. The application decides the provider based on use case, data sensitivity, latency, cost, and quality requirements.",{},{"id":457,"data":859,"type":382,"tunes":861},{"code":860},"type LlmProvider = \"ollama\" | \"openai\" | \"gemini\" | \"anthropic\" | \"vllm\"; type ChatInput = { provider: LlmProvider; model: string; tenantId: string; userId: string; question: string; context: Array\u003C{ chunkId: string; sourceTitle: string; text: string; }>;\n}; async function chat(input: ChatInput) { await assertUserCanAccessContext(input.userId, input.context); const messages = buildRagMessages({ question: input.question, context: input.context, rules: [ \"Answer only from provided context when possible.\", \"Cite source titles.\", \"Say when the context is insufficient.\" ] }); return llm.chat({ provider: input.provider, model: input.model, messages, trace: { tenantId: input.tenantId, userId: input.userId, promptVersion: \"rag-v3.2\" } });\n}",{},{"id":462,"data":863,"type":238,"tunes":865},{"text":864},"The key idea is not the TypeScript syntax. The key idea is the boundary. The application owns permissions, retrieval, prompt rules, tracing, and evaluation. The provider only produces the model output.",{},{"id":467,"data":867,"type":42,"tunes":868},{"text":469,"level":259},{},{"id":472,"data":870,"type":238,"tunes":872},{"text":871},"For many Open-LLM applications, the vector store decision is simple at the beginning: if PostgreSQL is already your system of record, \u003Cb>pgvector\u003C\u002Fb> is a strong starting point. It keeps metadata, permissions, document records, and vectors close together. That reduces operational complexity.",{},{"id":477,"data":874,"type":238,"tunes":876},{"text":875},"\u003Cb>Qdrant\u003C\u002Fb> becomes more attractive when vector search needs to become a dedicated service: larger retrieval scale, advanced filtering, specialized indexing, hybrid search patterns, or independent scaling of retrieval infrastructure.",{},{"id":482,"data":878,"type":324,"tunes":898},{"content":879,"stretched":43,"withHeadings":14},[880,885,889,893],[881,882,883,884],"Option","Best fit","Strengths","Trade-offs",[491,886,887,888],"PoCs, early production, systems already built on PostgreSQL.","Single database, SQL joins, ACID behavior, simpler operations, metadata close to vectors.","Less specialized than a dedicated vector database at large retrieval scale.",[496,890,891,892],"Dedicated semantic search services, larger vector workloads, advanced filtering and retrieval patterns.","Purpose-built vector search, strong filtering model, independent scaling, retrieval-focused APIs.","Adds another infrastructure component and operational surface.",[894,895,896,897],"Start simple","Most enterprise teams beginning with private RAG applications.","Lower architecture risk, faster delivery, easier audit path.","May need migration later if retrieval becomes central and high-scale.",{},{"id":507,"data":900,"type":238,"tunes":902},{"text":901},"A practical rule: start with pgvector when PostgreSQL already owns your business data and the retrieval scale is moderate. Move to Qdrant when vector search becomes a product capability of its own.",{},{"id":512,"data":904,"type":42,"tunes":906},{"text":905,"level":259},"Security and Privacy Reality Check",{},{"id":517,"data":908,"type":238,"tunes":910},{"text":909},"Local inference does not automatically mean secure AI. It only means the model execution can happen locally. The full data path still matters: uploaded files, extracted text, chunks, embeddings, logs, prompts, responses, backups, developer access, admin tools, and analytics exports.",{},{"id":522,"data":912,"type":238,"tunes":914},{"text":913},"Embeddings also deserve care. They are not the original document, but they still represent information derived from sensitive content. Treat them as part of the protected data path, especially when they are tied to metadata, source records, user queries, or tenant identifiers.",{},{"id":527,"data":916,"type":280,"tunes":925},{"meta":917,"items":918,"style":279},{},[919,920,921,922,923,924],"Do not index documents before access rules are known.","Do not retrieve chunks without tenant and role filters.","Do not log full prompts and responses without retention rules.","Do not send sensitive context to a cloud model unless the policy allows it.","Do not assume that local equals GDPR-compliant; compliance depends on the complete processing design.","Do not let evaluation and debugging copies become uncontrolled shadow datasets.",{},{"id":539,"data":927,"type":238,"tunes":929},{"text":928},"This is where \u003Ca href=\"\u002Fblog\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform\">multi-instance SaaS architecture\u003C\u002Fa> matters. If tenants, roles, data ownership, and operational boundaries are weak, adding a local LLM can amplify risk instead of reducing it.",{},{"id":544,"data":931,"type":42,"tunes":933},{"text":932,"level":259},"Evaluation Is Not Optional",{},{"id":549,"data":935,"type":238,"tunes":937},{"text":936},"A production Open-LLM application needs an evaluation loop. Without it, teams only have anecdotes. A few good demo answers do not prove that retrieval works, that the prompt is stable, or that the model behaves safely across real usage.",{},{"id":554,"data":939,"type":238,"tunes":941},{"text":940},"A minimal evaluation dataset should include real user questions, expected source documents, unacceptable answers, no-answer cases, and regression tests for previous failures. Every change to chunking, embeddings, prompts, model provider, or retrieval threshold should be tested against that dataset.",{},{"id":559,"data":943,"type":280,"tunes":951},{"meta":944,"items":945,"style":279},{},[946,947,948,949,950],"\u003Cb>Retrieval evaluation:\u003C\u002Fb> Did the system fetch the right source chunks?","\u003Cb>Answer evaluation:\u003C\u002Fb> Did the answer stay grounded in the retrieved context?","\u003Cb>Safety evaluation:\u003C\u002Fb> Did the system avoid forbidden disclosures or unauthorized data?","\u003Cb>Operational evaluation:\u003C\u002Fb> Did latency, failure rate, and cost stay inside acceptable limits?","\u003Cb>Regression evaluation:\u003C\u002Fb> Did a model or prompt upgrade break previously correct behavior?",{},{"id":570,"data":953,"type":238,"tunes":955},{"text":954},"RAG reduces hallucinations, but it does not remove the need for evaluation. Evaluation is the control loop that turns a clever prototype into an improving product.",{},{"id":575,"data":957,"type":42,"tunes":959},{"text":958,"level":259},"Deployment Discipline: The Model Is a Release Event",{},{"id":580,"data":961,"type":238,"tunes":963},{"text":962},"Changing a model is not a harmless configuration tweak. It can change answer style, reasoning behavior, language quality, latency, token usage, citation discipline, and failure modes. In production, model upgrades should be handled like release events.",{},{"id":585,"data":965,"type":238,"tunes":967},{"text":966},"That means versioning prompts, embedding models, retrieval settings, model identifiers, provider routes, and evaluation results. It also means having rollback logic. If a new model causes worse retrieval-grounded answers or breaks structured output, the system needs a controlled path back to the known-good configuration.",{},{"id":590,"data":969,"type":238,"tunes":971},{"text":970},"This fits the same operating logic as \u003Ca href=\"\u002Fenterprise\u002Freference-models\u002Fdelivery-and-change\">Delivery &amp; Change\u003C\u002Fa> and \u003Ca href=\"\u002Fenterprise\u002Freference-models\u002Fdigital-platform\">AI-ready platform architecture\u003C\u002Fa>: stable delivery requires repeatable controls, not heroic manual fixes.",{},{"id":595,"data":973,"type":42,"tunes":975},{"text":974,"level":259},"Conclusion: Production Begins Where the Demo Ends",{},{"id":600,"data":977,"type":238,"tunes":979},{"text":978},"Ollama can start the journey. It makes local model execution accessible and lowers the barrier to experimentation. That is valuable. But the production application begins where the demo ends.",{},{"id":605,"data":981,"type":238,"tunes":983},{"text":982},"The model is only one replaceable component. The real product is the controlled system around it: ingestion, permissions, retrieval, prompts, provider routing, evaluation, logs, monitoring, deployment, backup, and user workflow. That is where privacy becomes real, quality becomes measurable, and business value becomes repeatable.",{},{"id":610,"data":985,"type":238,"tunes":987},{"text":986},"A serious Open-LLM application is built through engineering discipline, not by running a local model once. Ollama can start the journey, but the production application begins where the demo ends.",{},{"id":615,"data":989,"type":238,"tunes":991},{"text":990},"Theme:",{},{"id":620,"data":993,"type":238,"tunes":995},{"text":994},"Ollama, Open LLM, RAG, pgvector, Qdrant, Local AI, LLMOps, Provider Abstraction, Enterprise AI Architecture",{},"2.31.5","Running a local model with Ollama is easy. Building a production-ready Open-LLM application is harder: it requires RAG, access control, provider abstraction, evaluation, logging, deployment discipline and a controlled application layer around the model.\n",{"lang":7,"title":224,"content":226,"contentJson":999,"excerpt":625},{"time":228,"blocks":1000,"version":624},[1001,1004,1007,1010,1013,1016,1019,1022,1025,1030,1033,1036,1039,1047,1050,1053,1056,1059,1064,1067,1070,1073,1076,1079,1084,1087,1090,1095,1098,1101,1104,1107,1110,1113,1116,1119,1122,1130,1133,1136,1139,1142,1147,1150,1153,1156,1159,1164,1167,1170,1173,1176,1179,1182,1185,1188,1191,1194],{"id":231,"data":1002,"type":42,"tunes":1003},{"text":224,"level":40},{},{"id":235,"data":1005,"type":238,"tunes":1006},{"text":237},{},{"id":241,"data":1008,"type":238,"tunes":1009},{"text":243},{},{"id":246,"data":1011,"type":238,"tunes":1012},{"text":248},{},{"id":251,"data":1014,"type":238,"tunes":1015},{"text":253},{},{"id":256,"data":1017,"type":42,"tunes":1018},{"text":258,"level":259},{},{"id":262,"data":1020,"type":238,"tunes":1021},{"text":264},{},{"id":267,"data":1023,"type":238,"tunes":1024},{"text":269},{},{"id":272,"data":1026,"type":280,"tunes":1029},{"meta":1027,"items":1028,"style":279},{},[276,277,278],{},{"id":283,"data":1031,"type":288,"tunes":1032},{"text":285,"caption":286,"alignment":287},{},{"id":291,"data":1034,"type":42,"tunes":1035},{"text":293,"level":259},{},{"id":296,"data":1037,"type":238,"tunes":1038},{"text":298},{},{"id":301,"data":1040,"type":324,"tunes":1046},{"content":1041,"stretched":43,"withHeadings":14},[1042,1043,1044,1045],[305,306,307,308],[310,311,312,313],[315,316,317,318],[320,321,322,323],{},{"id":327,"data":1048,"type":238,"tunes":1049},{"text":329},{},{"id":332,"data":1051,"type":42,"tunes":1052},{"text":334,"level":259},{},{"id":337,"data":1054,"type":238,"tunes":1055},{"text":339},{},{"id":342,"data":1057,"type":238,"tunes":1058},{"text":344},{},{"id":347,"data":1060,"type":280,"tunes":1063},{"meta":1061,"items":1062,"style":361},{"counterType":350},[352,353,354,355,356,357,358,359,360],{},{"id":364,"data":1065,"type":238,"tunes":1066},{"text":366},{},{"id":369,"data":1068,"type":42,"tunes":1069},{"text":371,"level":259},{},{"id":374,"data":1071,"type":238,"tunes":1072},{"text":376},{},{"id":379,"data":1074,"type":382,"tunes":1075},{"code":381},{},{"id":385,"data":1077,"type":238,"tunes":1078},{"text":387},{},{"id":390,"data":1080,"type":280,"tunes":1083},{"meta":1081,"items":1082,"style":279},{},[394,395,396,397,398,399,400,401],{},{"id":404,"data":1085,"type":42,"tunes":1086},{"text":406,"level":259},{},{"id":409,"data":1088,"type":238,"tunes":1089},{"text":411},{},{"id":414,"data":1091,"type":280,"tunes":1094},{"meta":1092,"items":1093,"style":279},{},[418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434],{},{"id":437,"data":1096,"type":238,"tunes":1097},{"text":439},{},{"id":442,"data":1099,"type":42,"tunes":1100},{"text":444,"level":259},{},{"id":447,"data":1102,"type":238,"tunes":1103},{"text":449},{},{"id":452,"data":1105,"type":238,"tunes":1106},{"text":454},{},{"id":457,"data":1108,"type":382,"tunes":1109},{"code":459},{},{"id":462,"data":1111,"type":238,"tunes":1112},{"text":464},{},{"id":467,"data":1114,"type":42,"tunes":1115},{"text":469,"level":259},{},{"id":472,"data":1117,"type":238,"tunes":1118},{"text":474},{},{"id":477,"data":1120,"type":238,"tunes":1121},{"text":479},{},{"id":482,"data":1123,"type":324,"tunes":1129},{"content":1124,"stretched":43,"withHeadings":14},[1125,1126,1127,1128],[486,487,488,489],[491,492,493,494],[496,497,498,499],[501,502,503,504],{},{"id":507,"data":1131,"type":238,"tunes":1132},{"text":509},{},{"id":512,"data":1134,"type":42,"tunes":1135},{"text":514,"level":259},{},{"id":517,"data":1137,"type":238,"tunes":1138},{"text":519},{},{"id":522,"data":1140,"type":238,"tunes":1141},{"text":524},{},{"id":527,"data":1143,"type":280,"tunes":1146},{"meta":1144,"items":1145,"style":279},{},[531,532,533,534,535,536],{},{"id":539,"data":1148,"type":238,"tunes":1149},{"text":541},{},{"id":544,"data":1151,"type":42,"tunes":1152},{"text":546,"level":259},{},{"id":549,"data":1154,"type":238,"tunes":1155},{"text":551},{},{"id":554,"data":1157,"type":238,"tunes":1158},{"text":556},{},{"id":559,"data":1160,"type":280,"tunes":1163},{"meta":1161,"items":1162,"style":279},{},[563,564,565,566,567],{},{"id":570,"data":1165,"type":238,"tunes":1166},{"text":572},{},{"id":575,"data":1168,"type":42,"tunes":1169},{"text":577,"level":259},{},{"id":580,"data":1171,"type":238,"tunes":1172},{"text":582},{},{"id":585,"data":1174,"type":238,"tunes":1175},{"text":587},{},{"id":590,"data":1177,"type":238,"tunes":1178},{"text":592},{},{"id":595,"data":1180,"type":42,"tunes":1181},{"text":597,"level":259},{},{"id":600,"data":1183,"type":238,"tunes":1184},{"text":602},{},{"id":605,"data":1186,"type":238,"tunes":1187},{"text":607},{},{"id":610,"data":1189,"type":238,"tunes":1190},{"text":612},{},{"id":615,"data":1192,"type":238,"tunes":1193},{"text":617},{},{"id":620,"data":1195,"type":238,"tunes":1196},{"text":622},{},"Post erfolgreich abgerufen",{"items":1199,"source":1283,"manualIds":1284,"manualMatchedIds":1285},[1200,1207,1214,1221,1228,1235,1242,1249,1256,1263,1270,1276],{"id":1201,"slug":1202,"title":1203,"excerpt":1204,"featuredImage":1205,"publishedAt":1206},"381","enterprise-grade-multi-tenant-architecture-for-an-international-platform","Architettura Multi-Tenant di Livello Enterprise per una Piattaforma Internazionale","Loving Rocks è una piattaforma per matrimoni di livello enterprise progettata con una vera architettura multi-tenant, database isolati per tenant e internazionalizzazione integrata per scalabilità globale, sicurezza e stabilità operativa a lungo termine.","\u002Fuploads\u002F2026\u002F01\u002Fenterprise-grade-multi-tenant-architecture-for-an-international-platform-1769789121298-b6v7ak.webp","2026-01-30T12:04:00.000Z",{"id":1208,"slug":1209,"title":1210,"excerpt":1211,"featuredImage":1212,"publishedAt":1213},"361","model-view-controller-mvc","Model-View-Controller (MVC): La spina dorsale strutturale delle moderne applicazioni web","Model-View-Controller, solitamente abbreviato in MVC, rimane uno dei pattern architetturali più duraturi nello sviluppo software. Fornisce ai team un modo pratico per separare la logica di business, la presentazione e l'interazione dell'utente, in modo che le applicazioni rimangano più facili da costruire, estendere, testare e manutenere. Questo articolo spiega cos'è l'MVC, perché è ancora importante, dove si inserisce negli stack web odierni e come si collega a una più ampia architettura di piattaforma, alla qualità del rilascio, alla strategia di migrazione e alla maturità operativa.","\u002Fuploads\u002F2026\u002F03\u002Fmodel-view-controller-mvc-1774872805793-0bjubu.webp","2023-04-12T12:57:00.000Z",{"id":1215,"slug":1216,"title":1217,"excerpt":1218,"featuredImage":1219,"publishedAt":1220},"364","tipps-fuer-die-verbesserung-der-seo-suchmaschinenoptimierung","Padroneggiare il Flusso di Lavoro SEO: Strategie di Ottimizzazione Essenziali per la Crescita Organica","Un flusso di lavoro SEO strutturato è fondamentale per una crescita organica sostenibile. Scopri le dieci strategie fondamentali, dalla ricerca di parole chiave e dall'ottimizzazione tecnica alla qualità dei contenuti e all'analisi delle prestazioni.","\u002Fuploads\u002F2026\u002F03\u002Ftipps-fuer-die-verbesserung-der-seo-suchmaschinenoptimierung-1774866098131-hwkzrg.webp","2024-01-26T06:35:00.000Z",{"id":1222,"slug":1223,"title":1224,"excerpt":1225,"featuredImage":1226,"publishedAt":1227},"445","qwen-3-6-in-production-release-runbook-ai-rollback-and-llmops-versioning","Qwen 3.6 in produzione: Runbook di rilascio, Rollback AI e Versionamento LLMOps","Qwen 3.6 non è solo un altro aggiornamento del modello. È un evento di rilascio, uno scenario di rollback e un problema di versionamento allo stesso tempo. Questo articolo spiega come Qwen 3.6 dovrebbe essere gestito in produzione attraverso la disciplina LLMOps, la tracciabilità dei prompt e dei modelli, il rollout controllato e la prontezza al rollback basata sull'evidenza.","\u002Fuploads\u002F2026\u002F02\u002Fnew-qwen-3-5-plus-1771515512741-dcbi9p.webp","2026-05-04T02:49:00.000Z",{"id":1229,"slug":1230,"title":1231,"excerpt":1232,"featuredImage":1233,"publishedAt":1234},"460","ai-agent-reliability-why-the-final-answer-is-not-enough","Affidabilità degli Agenti AI: Perché la Risposta Finale Non è Sufficiente","Un output corretto non dimostra un ragionamento corretto, un'esecuzione sicura o un sistema affidabile.","\u002Fuploads\u002F2026\u002F09\u002Fai-agent-reliability-why-the-final-answer-is-not-enough-1788955466306-pl0qhz.webp","2026-09-09T04:01:00.000Z",{"id":1236,"slug":1237,"title":1238,"excerpt":1239,"featuredImage":1240,"publishedAt":1241},"475","managed-agent-harness-vs-self-hosted-agent-loop-what-you-gain-what-you-lose","Harness per agenti gestito vs loop per agenti self-hosted: cosa si guadagna, cosa si perde","“Agente self-hosted” può indicare architetture molto diverse. Questa guida separa l'harness gestito, l'ambiente di esecuzione self-hosted e il loop dell'agente completamente autogestito—e mostra quale perimetro di controllo serve effettivamente ai team.","\u002Fuploads\u002F2026\u002F09\u002Fmanaged-agent-harness-vs-self-hosted-agent-loop-what-you-gain-what-you-lose-1790352403475-kj10jh.webp","2026-09-25T12:05:00.000Z",{"id":1243,"slug":1244,"title":1245,"excerpt":1246,"featuredImage":1247,"publishedAt":1248},"493","mlops-vs-llmops-what-changes-when-the-model-is-an-llm","MLOps vs LLMOps: cosa cambia quando il modello è un LLM","MLOps gestisce i sistemi di machine learning; LLMOps estende tali pratiche a prompt, contesto, recupero, provider, strumenti, valutazioni e comportamento a runtime attorno ai modelli linguistici di grandi dimensioni.","\u002Fuploads\u002F2026\u002F10\u002Fmlops-vs-llmops-what-changes-when-the-model-is-an-llm-1791487319869-2v7hxo.webp","2026-10-08T15:20:00.000Z",{"id":1250,"slug":1251,"title":1252,"excerpt":1253,"featuredImage":1254,"publishedAt":1255},"478","what-is-rag-the-simplest-explanation-of-how-it-works","Cos'è il RAG? La spiegazione più semplice di come funziona","RAG sembra complicato, ma l'idea è semplice: prima che un'IA risponda, cerca prima informazioni utili da una fonte di conoscenza e fornisce tali informazioni al modello linguistico. Questa guida spiega RAG, LLM, stato, memoria e strumenti utilizzando un semplice modello mentale.","\u002Fuploads\u002F2026\u002F09\u002Fwhat-is-rag-the-simplest-explanation-of-how-it-works-1790377492124-khjagt.webp","2026-09-25T19:03:00.000Z",{"id":1257,"slug":1258,"title":1259,"excerpt":1260,"featuredImage":1261,"publishedAt":1262},"480","when-should-an-ai-stop-trusting-its-own-knowledge-the-retrieval-trigger","Quando dovrebbe un'IA smettere di fidarsi della propria conoscenza? — Il grilletto del recupero","Un modello di IA non necessita del recupero per ogni domanda. Il problema importante è sapere quando la sua conoscenza interna non è più sufficiente. Il Trigger di Recupero è un confine decisionale pratico che determina quando un sistema di IA dovrebbe smettere di affidarsi esclusivamente alla conoscenza del modello e ottenere prove esterne prima di rispondere.","\u002Fuploads\u002F2026\u002F09\u002Fwhen-should-an-ai-stop-trusting-its-own-knowledge-the-retrieval-trigger-1790574991244-f4rpyg.webp","2026-09-28T01:49:00.000Z",{"id":1264,"slug":1265,"title":1266,"excerpt":1267,"featuredImage":1268,"publishedAt":1269},"469","rag-failed-but-which-layer-actually-failed-a-diagnostic-method","RAG non riuscito — Ma quale livello ha effettivamente fallito? Un metodo diagnostico","Quando una risposta RAG è sbagliata, dare la colpa al recupero o al modello è troppo vago. Questo metodo diagnostico isola la copertura delle fonti, la costruzione della query, il recupero, il ranking, l'assemblaggio del contesto, la generazione, l'attribuzione delle evidenze e l'aggiornamento—così il guasto effettivo può essere riprodotto e corretto.","\u002Fuploads\u002F2026\u002F09\u002Frag-failed-but-which-layer-actually-failed-a-diagnostic-method-1790350847177-pior4c.webp","2026-09-24T19:39:00.000Z",{"id":1271,"slug":657,"title":1272,"excerpt":1273,"featuredImage":1274,"publishedAt":1275},"434","Guida completa a Evaluation Harness: Padroneggiare la valutazione delle prestazioni degli LLM","Questa guida fornisce una panoramica dettagliata di Evaluation Harness, un framework essenziale per valutare rigorosamente le capacità dei modelli linguistici di grandi dimensioni (LLM) nelle pipeline LLMOps aziendali. Scopri la configurazione, le best practice e le tecniche avanzate per garantire un benchmarking e un'ottimizzazione dei modelli affidabili.","\u002Fuploads\u002F2026\u002F04\u002Fevaluation-harness-1775466944495-4s0xv2.webp","2026-03-01T17:50:00.000Z",{"id":1277,"slug":1278,"title":1279,"excerpt":1280,"featuredImage":1281,"publishedAt":1282},"468","ai-agent-memory-is-not-rag-how-to-separate-memory-retrieval-state-and-context","La memoria dell'agente IA non è RAG: come separare memoria, recupero, stato e contesto","Memoria dell'agente, RAG, stato e contesto vengono spesso usati come se fossero intercambiabili. Non lo sono. Questo pratico modello architetturale separa i quattro livelli, mostra dove si colloca ciascuno e spiega cosa si rompe quando i sistemi li fanno collassare in uno solo.","\u002Fuploads\u002F2026\u002F09\u002Fai-agent-memory-is-not-rag-how-to-separate-memory-retrieval-state-and-context-1790350560308-np0xy6.webp","2026-09-25T11:34:00.000Z","fallback",[],[]]