Návrh systému GenAI: Základy a architektury pro produkční aplikace
Pokoušíte se integrovat LLM do své aplikace a přemýšlíte, zda provést RAG, doladit nebo prostě zlepšit výzvy? Nejste sami: podle analýzy do roku 2024 73 % nasazení GenAI v podnik selže do šesti měsíců, především kvůli nesprávným architektonickým volbám ve fázích designové iniciály. Problém není v modelu: jde o to, že mnoho týmů si nejprve zvolí technologii pochopit problém.
Tato příručka vám poskytuje praktický rozhodovací rámec pro navrhování systémů GenAI ve výrobě základní architektury – RAG, jemné ladění, rychlé inženýrství – a kritéria pro výběr přístupu vhodné pro váš konkrétní případ použití.
Co se naučíte
- Tři základní architektury: RAG, jemné ladění a rychlé inženýrství
- Rozhodovací rámec: kdy použít jednotlivé přístupy
- Systémové architektury pro aplikace GenAI ve výrobě
- Technology Stack 2026: LangChain, LlamaIndex, vLLM
- Běžné vzory a anti-vzory, kterým je třeba se vyhnout
- Metriky kvality pro hodnocení systému RAG
Problém 73 %: Proč selhávají nasazení GenAI
Než se pustíte do architektury, je důležité pochopit, proč tolik projektů selhává. Příčiny hlavní ty, které byly posmrtně zjištěny v podnikovém nasazení, jsou:
- Nezvládnutá halucinace: model generuje věrohodné, ale nepravdivé odpovědi a žádné byl implementován validační systém
- Nepřijatelná latence:p99 déle než 3-5 sekund na dotazy, které uživatel očekává rychle
- Výbušné náklady: žádný výpočet nákladů na dotaz před uvedením do provozu, poté rozpočet se spálí během týdnů
- Neřízená znalostní hranice: Model nezná aktuální ani soukromá data společnosti
- Nedostatečná sledovatelnost: nelze vědět, na kterých dokumentech je dokument založen reakce (kritická v regulovaných kontextech)
Každá architektura, na kterou se podíváme, řeší některé z těchto problémů lépe než jiné. Znát kompromis vám umožňuje navrhovat robustní systémy od začátku.
Tři základní architektury
1. Rychlé inženýrství
Výchozí bod pro jakýkoli systém GenAI: strukturujte výzvu k navádění modelu požadovaný výstup. Klíčové techniky v roce 2026:
- Několik výstřelů: Ve výzvě uveďte příklady vstupu a výstupu
- Řetězec myšlení (CoT): požádejte modelku, aby nejprve přemýšlela krok za krokem odpovědět
- Systémová výzva: Definujte chování a kontext modelu
- Strukturovaný výstup: Vynutit výstup do formátu JSON nebo XML pro spolehlivou analýzu
# Esempio: prompt engineering con structured output
import json
from openai import OpenAI
client = OpenAI()
def analyze_ticket(ticket_text: str) -> dict:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "system",
"content": """Sei un sistema di triage per ticket di supporto.
Analizza il ticket e restituisci JSON con:
- priority: "high" | "medium" | "low"
- category: "bug" | "feature" | "question"
- sentiment: "frustrated" | "neutral" | "positive"
- estimated_resolution_hours: numero intero"""
},
{
"role": "user",
"content": f"Ticket: {ticket_text}"
}
],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)
# Uso
result = analyze_ticket("Il mio account e bloccato da ieri, non riesco ad accedere!")
# {"priority": "high", "category": "bug", "sentiment": "frustrated", ...}
Kdy ji použít: jednoduché a dobře definované případy, rychlé prototypování, když nemáte integrovaná soukromá data a základní model již zná doménu.
Limity: nepracuje s aktuálními nebo vlastními daty, halucinace na faktech konkrétní, náklady úměrné délce kontextu.
2. RAG — Retrieval-Augmented Generation
RAG řeší problém přerušení znalostí a soukromých dat: namísto spoléhání se pouze na znalost modelu, vyhledá relevantní dokumenty z databáze a umístí je do kontextu před generací.
Základní architektura systému RAG má čtyři fáze:
- Indexování: Dokumenty jsou rozděleny na části a převedeny na vektory pro vkládání a uložit do vektorové databáze
- Získávání: Dotaz uživatele se převede na stejný prostor pro vkládání jsou obnoveny nejvíce podobné kousky
- Augmentace: Načtené bloky jsou vloženy do výzvy jako kontext
- Generace: LLM generuje odpověď na základě poskytnutého kontextu
# RAG minimo funzionante con LangChain e Qdrant
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_qdrant import QdrantVectorStore
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. Carica e chunka i documenti
loader = PyPDFLoader("manuale_prodotto.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64
)
chunks = splitter.split_documents(docs)
# 2. Crea il vector store
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = QdrantVectorStore.from_documents(
documents=chunks,
embedding=embeddings,
url="http://localhost:6333",
collection_name="manuale_prodotto"
)
# 3. Crea la chain RAG
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
rag_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
# 4. Query
result = rag_chain.invoke({"query": "Come configuro le notifiche email?"})
print(result["result"])
# La risposta cita i documenti recuperati, non inventa
Kdy ji použít: firemní znalostní báze, technická dokumentace, FAQ, jakékoli případ, kdy odpověď musí být založena na konkrétních a sledovatelných dokumentech.
Limity: kvalita závislá na kvalitě vyhledávání, dodatečná latence, režie infrastruktury.
3. Jemné doladění
Jemné ladění přizpůsobuje chování modelu pomocí dodatečného školení na datech specifické pro doménu. V roce 2026 je dominantním paradigmatem Parametrově efektivní jemné doladění (PEFT) s technikami jako LoRA a QLoRA, které umožňují školení na spotřebním hardwaru.
# Fine-tuning con LoRA usando transformers e PEFT
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType
import torch
model_name = "meta-llama/Llama-3.1-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="auto"
)
# Configurazione LoRA: adatta solo il 0.1% dei parametri
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # rank della matrice di adattamento
lora_alpha=32, # scaling factor
lora_dropout=0.1,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"]
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 6,815,744 || all params: 8,037,191,680
# trainable%: 0.0848%
Kdy ji použít: Když máte tisíce příkladů školení, potřebujete formát velmi konkrétní a konzistentní výstup, nebo chcete zkrátit délku výzvy odstraněním příkladů málo výstřelů.
Kritický anti-vzor: Nenalaďujte, abyste vložili faktické znalosti (data, čísla, konkrétní skutečnosti). Modelka se „nazpaměť“ bez porozumění a halucinace stejně. Pro znalosti použijte RAG.
Rozhodovací rámec
Nejdůležitější otázkou není „jakou technologii použít“, ale „jaký je můj skutečný problém“. Tento rozhodovací strom pokrývá 90 % případů použití:
Hai dati privati o recenti che il modello non conosce?
SI --> Considera RAG come base
NO --> Prompt engineering puo essere sufficiente
Il tuo knowledge base e aggiornato frequentemente?
SI --> RAG (indicizza i nuovi documenti, non ri-addestra)
NO --> Fine-tuning puo essere considerato
Hai 1000+ esempi di coppie input-output di alta qualita?
SI --> Fine-tuning e un'opzione valida
NO --> Stai nei limiti di RAG + few-shot
Hai bisogno di tracciabilita (citare le fonti)?
SI --> RAG obbligatorio
NO --> Piu flessibilita
Latenza critica (sotto 500ms)?
SI --> Fine-tuning (elimina retrieval overhead) o caching aggressivo
NO --> RAG funziona bene
Conclusione tipica 2026:
Start with RAG + prompt engineering
Add fine-tuning solo se RAG non raggiunge qualita richiesta
Systémová architektura pro výrobu
Systém GenAI na produkční úrovni jde mnohem dále než jen „LLM + vektorová databáze“. Součásti nutné pro seriózní nasazení:
# Stack minimo per RAG in produzione (Docker Compose)
services:
api:
image: your-genai-api:latest
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
QDRANT_URL: http://qdrant:6333
REDIS_URL: redis://redis:6379
depends_on:
- qdrant
- redis
qdrant:
image: qdrant/qdrant:v1.9.0
volumes:
- qdrant_storage:/qdrant/storage
ports:
- "6333:6333"
redis:
image: redis:7-alpine
# Semantic cache: evita LLM calls per query simili
volumes:
- redis_data:/data
prometheus:
image: prom/prometheus:latest
# Monitora: latency p50/p95/p99, costo per query, quality score
grafana:
image: grafana/grafana:latest
# Dashboard: LLM performance, retrieval quality, cost tracking
Kritické komponenty, které oddělují prototyp od produkčního systému:
- Sémantické ukládání do mezipaměti (Redis + knihovna jako GPTCache): snižuje náklady o 30–60 % pro aplikace s podobnými opakujícími se dotazy
- Pozorovatelnost: sledujte každý hovor LLM s latencí, použitými tokeny, cenou a skóre kvality — bez těchto dat nelze optimalizovat
- Záložní strategie: Co se stane, když OpenAI nefunguje? Máte místní model jak zálohovat?
- Omezení sazby a správa kvót: Chraňte svůj rozpočet před dotazy anomální
- Detekce PII: před odesláním údajů LLM zjistěte a zakryjte osobní údaje citlivý
Zásobník technologií roku 2026
Ekosystém GenAI se stabilizoval kolem několika dominantních hráčů:
Doporučený balíček 2026
- Orchestr: LangChain v0.3+ nebo LlamaIndex v0.10+ pro komplexní potrubí RAG; LangGraph pro pracovní postupy agentů
- Vektorové databáze: Qdrant (vlastně hostovaný, vynikající výkon), pgvector (již v PostgreSQL, pod 1 milion vektorů), Pinecone (spravovaná, zaručená latence)
- Odvození: vLLM nebo TensorRT-LLM pro samostatně hostované modely s otevřeným zdrojovým kódem; OpenAI/Anthropic pro cloudová API
- Vložení: text-embedding-3-small od OpenAI (1536 dim, 0,02 $/1 milion tokenu) nebo all-MiniLM-L6-v2 pro bezplatné vlastní hostování
- Pozorovatelnost: LangSmith, Weights & Biases Weave nebo Phoenix pro trasování řetězů
- Hodnocení: RAGAS pro automatizované metriky RAG (věrnost, relevance odpovědí, vyvolání kontextu)
Metriky kvality pro systémy RAG
Jak zjistit, zda váš systém RAG funguje dobře? Rámec RAGAS definuje měřitelné metriky:
# Valutazione automatica con RAGAS
from ragas import evaluate
from ragas.metrics import (
faithfulness, # la risposta e supportata dai documenti recuperati?
answer_relevancy, # la risposta risponde alla domanda?
context_recall, # i documenti recuperati contengono le info necessarie?
context_precision # i documenti recuperati sono tutti rilevanti?
)
from datasets import Dataset
# Dataset di test (ground truth necessario)
test_data = {
"question": ["Come configuro l'autenticazione 2FA?"],
"answer": ["Per configurare 2FA, vai in Impostazioni > Sicurezza..."],
"contexts": [["Documentazione 2FA: ...", "Guida sicurezza: ..."]],
"ground_truth": ["La 2FA si configura tramite l'app mobile nelle impostazioni sicurezza"]
}
dataset = Dataset.from_dict(test_data)
result = evaluate(dataset, metrics=[
faithfulness,
answer_relevancy,
context_recall,
context_precision
])
print(result)
# faithfulness: 0.95 (la risposta non inventa)
# answer_relevancy: 0.88 (la risposta e pertinente)
# context_recall: 0.82 (i doc recuperati coprono la risposta)
# context_precision: 0.91 (i doc recuperati sono rilevanti)
Realistické cíle pro produkční systém: věrnost > 0,85 (kritické: pod tímto prahové halucinace jsou časté), answer_relevancy > 0,80, context_recall > 0,75.
Anti-vzory, kterým je třeba se vyhnout
- Pevná velikost bloku pro všechny dokumenty: strukturované dokumenty (FAQ, API dokumenty) vyžadují jiné části než narativní text
- Pouze sémantické vyhledávání: selhává na přesné technické podmínky; použít hybridní vyhledávání (BM25 + sémantika)
- Žádné přehodnocení: horní-k vektory nejsou nutně nejužitečnější; a křížový kodér zlepšuje přesnost o 15–20 %
- RAG bez průběžného hodnocení: Kvalita dokumentů se snižuje mění se; sleduje věrnost ve výrobě
- Jemné doladění jako první volba: a drahé a pomalé; RAG je tam téměř vždy správným pohybem pro začátek
Závěry a další kroky
Návrh systému pro aplikace GenAI vyžaduje architektonické volby, které jdou daleko za hranice výběr modelu. Základní pravidlo pro rok 2026: vždy začíná RAG + prompt strojírenství, změřte kvalitu pomocí RAGAS a přidejte jemné doladění, pouze pokud je mezera kvalita přetrvává i po optimalizaci vyhledávání.
V dalších článcích této série podrobně prozkoumáme každou komponentu: výběr pravá vektorová databáze, rozdělovací strategie, hybridní vyhledávání a architektura agentů LangGraph.







