Evoluce RAG pipeline pomocí genetických algoritmů: Implementace na MCP serverech
RAG systémy se statickými prompty ztrácejí efektivitu při změně dotazů. Implementace řízené evoluce využívá LLM pro generování variant „genomů“ – konfigurací pipeline. Soudce-posuzovatel je testuje na vzorku dotazů, nejlepší kandidáti přecházejí do stavu pending_approval pro manuální potvrzení administrátorem. Aplikováno na MCP servery documents1c (RAG pro dokumentaci 1C) se třemi vrstvami: postprocess, routing, cache_policy.
Evoluce není autonomní, ale funguje v laboratorním okruhu administračního panelu. Zaměření – zlepšení systémových promptů pro postprocessing a politik ukládání do mezipaměti v doméně 1C-dokumentace, s možností rozšíření na finance, účetnictví, právní oblast.
Architektura třívrstvého pipeline
Pipeline docsearch zpracovává dotazy sekvenčně:
- Sémantické vyhledávání chunků (hybridní v případě potřeby).
- Routing: klasifikátor určuje query_type (factual_lookup, explanation, bsl_help) a aktivuje profil se system_prompt, depth_budget, format.
- Postprocess: LLM sestaví odpověď podle kontraktu (answer, key_points, sources, warnings) na základě aktivního genomu.
- Cache_policy: admission-kontrola před zápisem do mezipaměti (min_sources_count, block_if_warnings).
| Vrstva | Objekt evoluce | Vliv |
|------|-----------------|---------|
| postprocess | system_prompt, chunk_count, max_tokens | Kvalita textu odpovědi |
| routing | classifier_prompt, profiles | Adaptace na typ dotazu |
| cache_policy | prah(y) admission (min_supportedness) | Filtrace mezipaměti |
Postprocess a routing mění odpověď v reálném čase, cache_policy – pouze ukládání.
Datový model pro genomy a hodnocení
Genomy jsou uloženy v tabulce evolution_genome jako JSONB s poli layer, status (candidate → evaluated → pending_approval → active), genome, score.
class EvolutionGenome(Base):
layer = Column(String(32), nullable=False, index=True)
status = Column(String(32), nullable=False, default="candidate", index=True)
genome = Column(JSONB, nullable=False)
score = Column(Float, nullable=True)
eval_results = relationship("EvolutionEvalResult", back_populates="genome")
Každý eval_result zaznamenává query, response (až 2000 znaků), judge_score (0–10), judge_reasoning od LLM-soudce.
class EvolutionEvalResult(Base):
genome_id = Column(Integer, ForeignKey("evolution_genome.id"), nullable=False)
query = Column(Text, nullable=False)
response = Column(Text, nullable=True)
judge_score = Column(Float, nullable=True)
judge_reasoning = Column(Text, nullable=True)
Pro routing je generován eval_seed_prompt – testovací session agent+MCP.
Cyklus evoluce: od mutací k produkci
Cyklus: generate_mutations() → eval_genome() → promote_best() → manuální approve.
- Generace: Základní genom (aktivní nebo DEFAULT_GENOMES) + N párů dotaz-odpověď z mezipaměti MCP documents1c. LLM generuje N variant JSON {"genome": {...}, "notes": "..."}.
- Hodnocení: Soudce (rag_postprocess_model) kontroluje podle kritérií: úplnost, přesnost, zdroje, stručnost. Průměrný score na vzorku.
- Povýšení: Nejlepší – pending_approval.
- Aktivace: Admin potvrdí v UI.
Generování mutací podle vrstev
Postprocess: Mutace v system_prompt (instrukce pro sestavení odpovědi, zohlednění kontextu klient/server), system_prompt_reduce (sloučení bez duplicit), chunk_count (15–20), max_tokens (4096–8192), citation_policy (always/inline), verbosity (adaptive/comprehensive).
Příklad genomu postprocess:
{
"verbosity": "adaptive",
"max_tokens": 4096,
"chunk_count": 15,
"system_prompt": "Jsi expert na 1C. Při odpovědi nezapomeň zohlednit kontext provádění (tenký klient, webový klient, server, mobilní aplikace). Odpovídej česky. Cituj zdroje.",
"citation_policy": "always",
"system_prompt_reduce": "Sluč odpovědi, explicitně odděluj doporučení pro různé kontexty provádění. Odstraň duplikaci."
}
Routing: classifier_prompt + profily podle query_type (system_prompt, depth_budget, format).
Cache_policy: min_supportedness, require_sources, min_sources_count, block_if_warnings, confidence_key_points_min.
Do kontextu generátoru jsou přidány reálné dialogy pro analýzu slabých míst.
Hodnocení a metriky soudce
Soudce hodnotí podle 4 metrik (0–10):
- Úplnost: pokrytí dotazu.
- Přesnost: soulad s chunků.
- Zdroje: přítomnost/kvalita citací.
- Stručnost: absence vodního textu.
Průměrný score určuje povýšení. Eval_judge_response ukládá surový výstup LLM.
Co je důležité
- Evoluce vrstev je nezávislá: postprocess zlepšuje text, cache_policy – kvalitu mezipaměti.
- Manuální approve zabraňuje regresím v produkci.
- Kontext z reálné mezipaměti zvyšuje relevanci mutací.
- SQLAlchemy-modely podporují cascade delete pro eval_results.
- Škálovatelné na multidoménu (1C + finance + kódování).
Škálování a osvědčené postupy
Rozšíření: přidejte vrstvy pro domény (finance: system_prompt se zohledněním NSI; kódování: BSL-syntax). Testujte na 10–20 dotazech z mezipaměti. Sledujte score >8.5 pro approve. Vyhněte se přeučení – limit mutací na cyklus.
— Editorial Team
Zatím žádné komentáře.