Architektura referencyjna dla systemów sztucznej inteligencji agentowej klasy przemysłowej
Przyswoć podstawowe elementy, strategie pamięciowe, metody odzyskiwania informacji oraz zasady bezpieczeństwa niezbędne do przekształcenia sztucznej inteligencji o charakterze agentowym z prototypu w niezawodne systemy produkcyjne używane w przedsiębiorstwach.
Streszczenie kierownicze
Przejście od aplikacji opartych na modelach językowych o braku stanu (LLM) ku sztucznej inteligencji typu agenty o poziomie produkcyjnym stanowi istotną zmianę w sposobie, w jaki przedsiębiorstwa tworzą oprogramowanie. Wczesne próby wdrożenia sztucznej inteligencji w firmach opierały się głównie na podstawowej technologii Retrieval-Augmented Generation (RAG) – polegającej na przekształcaniu dokumentów w wektory reprezentacyjne i umieszczaniu ich w oknie kontekstowym zapytania. Ten podejście sprawdza się dobrze przy prostych zadaniach typu „odpowiedz na pytanie”, ale nie radzi sobie z autonomicznym podejmowaniem decyzji, wieloetapowym planowaniem z zachowaniem stanu, odpornym wywoływaniem narzędzi oraz zdolnością do samokorekty w ramach procesu pracy.
Enterprise Agentic AI zamienia tę luki, przepozycjonowując modele podstawowe: zamiast pełnić rolę bezpośredniej interfejsu dla użytkownika, model staje się komponentem analitycznym wbudowanym w deterministyczne oprogramowanie. Takie systemy potrafią wykrywać otoczenie, dzielić duże cele na mniejsze kroki, wywoływać wewnętrzne usługi przedsiębiorstwa oraz przenosić stan wykonywania zadań w ramach transakcji wieloetapowych. Jednak przejście od działającego prototypu do rozwiązania, które można uruchomić w produkcji, wymaga rozwiązania problemów z niestabilnymi, nieoddeterministycznymi pętlami sterującymi, degradacją kontekstu podczas długich sesji, ryzykiem eskalacji uprawnień oraz niekontrolowanym zużyciem tokenów.
To opracowanie przedstawia architekturę referencyjną typu end-to-end przeznaczoną dla architektów oraz kierowników zespołów inżynierii AI odpowiedzialnych za systemy agentów w przedsiębiorstwach. Omawia podstawowe warstwy niezbędne każdemu agencie, porównuje topologie wieloagentowe, szczegółowo analizuje wzorce integracji służące do wyszukiwania na poziomie korporacyjnym – z szczególnym uwzględnieniem Amazon Kendra – oraz zawiera przykłady kodu w Pythonie nadające się do użycia w produkcji.
Rozdział 1: Kanoniczna architektura agenta korporacyjnego
Podstawowe warstwy: percepcja, rozumowanie, planowanie, pamięć i wykonywanie zadań za pomocą narzędzi
System agenta gotowy do użycia w produkcji oddziela probabilistyczny model podstawowy od deterministycznego środowiska wykonywania, które je otacza. Architekturę tę zazwyczaj tworzy pięć podstawowych warstw, wszystkie działające wewnątrz zarządzanego kontenera środowiska wykonywania:
- Szczegół warstwy percepcji: Przekształca surowe sygnały korporacyjne — telemetrię, wiadomości użytkowników, dane przekazywane przez webhooki, odpowiedzi API — w czyste, typowane dane wejściowe, które mogą być wykorzystane przez resztę systemu. Obejmuje to oczyszczanie danych wejściowych, ograniczanie szybkości przesyłania zapytań oraz wczesną weryfikację struktury danych, przy czym wszystko to jest wykonywane jeszcze przed uruchomieniem modelu LLM.
- Silnik rozumowania: Centralny element analityczny, napędzany przez model LLM (na przykład Anthropic Claude 3.5 Sonnet lub modele AWS Bedrock). Zamiast samodzielnie podejmować działania, silnik ten interpretuje aktualny kontekst, ocenia możliwe drogi postępu i formułuje ustrukturyzowane stwierdzenia dotyczące zamiarów.
Wzory orkiestracji: pętle jednego agenta vs. topologie wielu agentów
Wybór odpowiedniego wzoru orkiestracji w dużej mierze zależy od stopnia złożoności docelowego obszaru:
- Pętle jednego agenta typu ReAct: Jedna pętla rozumowania przechodząca przez fazy Myślenia, Działania i Obserwacji. Pasuje to do wąskich, liniowych procesów pracy wykorzystujących mniej niż 5 do 8 różnych narzędzi. Po przekroczeniu tej liczby pojedynczy agent ma tendencję do napotykania problemów z przepełnionymi oknami kontekstowymi, niejasnymi instrukcjami oraz trudnościami w wyborze odpowiedniego narzędzia.
Dla zastosowań produkcyjnych w przedsiębiorstwach zalecana domyślna opcją jest Topologia wielu agentów nadzorczych, dzięki czystym granicom stanów, łatwiejszej możliwości audytu oraz bardziej przewidywalnym kosztom obsługi kontekstu.
Rozdział 2: Zarządzanie pamięcią w przedsiębiorstwach i higiena kontekstu
Hierarchia pamięci: pamięć robocza, trajektoria krótkoterminowa i pamięć długoterminowa
Zarządzanie pamięcią agenta można traktować jako problem planowania budżetu zasobów. Pozwalanie na niekontrolowane rozrastanie się pamięci zwiększa koszty inferencji, powoduje opóźnienia i sprawia, że model traci wątek z powodu pogarszającego się kontekstu. Dobrze zaprojektowany agent przedsiębiorstwa wymaga warstwowej struktury pamięci:
- Pamięć robocza (Scratchpad): Okno aktualnego kontekstu — obecnie obowiązujące instrukcje systemu, stan aktywnego zadania oraz najnowsze wyniki narzędzi.
Strategie kompresji kontekstu, przycinania danych i izolacji stanu
Aby uniknąć degradacji kontekstu, silnik wykonawczy musi aktywnie egzekwować zasady higieny:
- Przycinanie danych obserwacyjnych: surowe odpowiedzi narzędzi — na przykład plik JSON zawierający 500 rekordów — nigdy nie powinny trafiać bezpośrednio do pamięci roboczej. Silnik wykonawczy musi oczyścić, przyciąć lub streszczć dane zwracane przez narzędzie, zanim dotrą one do silnika rozumowania.
- Kompresja okna przesuwającego się: Gdy pamięć tymczasowa przekroczy ustalony próg budżetowy (na przykład 20% całkowitego limitu kontekstu modelu), krok kompresji sprowadza wcześniejsze etapy rozmowy do zwięzłych semantycznych streszczeń i usuwa oryginalne, surowe wymiany informacji.
- Izolacja stanu podzadania: Gdy nadzorca przekazuje zadanie podagentowi, tworzy dla niego nowy kontekst zawierający wyłącznie konkretny cel i potrzebne parametry — żadna informacja z historii rozumowania samego nadzorcy nie przedostaje się do tego kontekstu.
Rozdział 3: Szczegółowe omówienie: Używanie Amazon Kendra do pozyskiwania informacji w przedsiębiorstwach
Amazon Kendra jako warstwa pozyskiwania informacji w produkcji
Budowa pipeline’u do wyszukiwania w ogólnej bazie danych wektorowej zazwyczaj oznacza konieczność samodzielnego projektowania mechanizmów pobierania dokumentów, logiki dzielenia na fragmenty, generowania wektorów reprezentujących treść oraz warstwy fuzji wyników wyszukiwania hybrydowego od zera. Amazon Kendra natomiast oferuje w pełni zarządzany silnik wyszukiwania dla przedsiębiorstw, który rozwiązuje te problemy „gotowy do użycia”. Zawiera on wbudowane wieloetapowe rozumienie języka naturalnego, analizę strukturalną uwzględniającą tabele, nagłówki i stopki, a także hybrydowy model rankingu łączący sygnały leksykalne i semantyczne.
W ramach stacku agentów przedsiębiorstwa Kendra zazwyczaj pełni rolę kluczowego Podsystemu Ugruntowania Wiedzy – komponentu odpowiedzialnego za umożliwienie agentom pobierania zweryfikowanego kontekstu faktograficznego z różnych wewnętrznych źródeł danych, bez ryzyka fragmentacji wynikającego z prostego dzielenia na części w bazach wektorowych.
Zaawansowana regulacja trafności i dynamiczne przycinanie metadanych
Aby bezpiecznie wspierać autonomiczne podejmowanie decyzji, systemy wyszukiwania klasy korporacyjnej wymagają precyzyjnego zarządzania uprawnieniami oraz regulowalnych mechanizmów kontrolowania trafności:
- Własne listy kontrolowania dostępu (ACL): Kendra automatycznie pobiera i mapuje listy ACL na poziomie dokumentów zdefiniowane w systemach źródłowych, czy to SharePoint, Confluence czy S3. Gdy agent wysyła zapytanie, przekazuje tożsamość uwierzytelnionego użytkownika w postaci tokena
UserContext, a Kendra stosuje mechanizmy bezpieczeństwa na poziomie indeksu, dzięki czemu żaden fragment, którego użytkownik nie ma uprawnień do zobaczenia, nie trafia do agenta.
_last_updated_at, kategorii biznesowej lub dokładnych dopasowań w polach niestandardowych, takich jak Department czy ProjectCode.Retrieve zamiast uniwersalnego API Query. API Retrieve całkowicie pomija metadane wyszukiwania skierowane na interfejs użytkownika i zamiast tego zwraca szczegółowe fragmenty na poziomie akapitów, specjalnie przygotowane do bezpośredniego wprowadzenia do okna kontekstowego modelu językowego.Rozdział 4: Deterministyczne zasady bezpieczeństwa, weryfikacja narzędzi i mechanizmy ochronne
Kontrola przed wykonywaniem (Feedforward) i po wykonywaniu (Feedback)
Agenty autonomiczne potrzebują wyraźnych granic na poziomie oprogramowania, aby zapobiec eskalacji uprawnień, nieprawidłowym wywołaniom narzędzi lub nieskończonym pętlom wykonawczym:
- Zanim wywołanie narzędzia dotrze do dowolnego systemu przedsiębiorstwa, silnik wykonawczy sprawdza jego argumenty pod kątem ścisłych schematów Pydantic — weryfikując obecność wymaganych pól, to, czy wartości liczbowe lub z typu enum mieszczą się w dozwolonych zakresach, oraz czy token autoryzacji wywołującego faktycznie umożliwia tę czynność.
Błąd: Tabela bazy danych ‘users_v2’ nie została znaleziona. Dostępne tabele: ['users', 'orders'] — dostarczając agentowi konkretnych informacji, których może użyć do dostosowania swoich dalszych działań.Sandboxing, budżety kroków i zautomatyzowane wyłączniki obwodowe
- Izolowany sandboxing: Każdy dynamicznie generowany kod — na przykład Python wygenerowany przez agenta do analizy danych — powinien być uruchamiany w jednorazowych, izolowanych środowiskach typu kontenery Docker lub mikro-VM gVisor, z ściśle kontrolowanym dostępem do sieci wyjściowej.
- Budżety kroków i kosztów: Każde zadanie agenta powinno mieć sztywny limit liczby iteracji wywołań narzędzi (na przykład nie więcej niż 10) oraz maksymalny wydatek na tokeny. Przekroczenie któregokolwiek z tych limitów powinno zmusić system do zatrzymania wykonywania zadania i przekazania go operatorowi ludzkiemu.
- Bezpieczniki narzędzi: Jeśli API lub baza danych w tle nadal zawodzi podczas kolejnych prób ponownego wysłania żądania, system powinien aktywować bezpiecznik, oznaczając dane narzędzie jako
UNAVAILABLEw katalogu narzędzi agenta, dzięki czemu warstwa planowania będzie skłonna wybrać alternatywne ścieżki zamiast bezskutecznie próbować używać uszkodzonej zależności.
Rozdział 5: Plan wdrożenia w produkcji
Poniższy przykład to kompletna, działająca aplikacja w Pythonie, która ilustruje Supervisor Multi-Agent Architecture przeznaczoną do użycia w produkcji. Łączy ona walidację narzędzi opartą na Pydantic, planowanie zasobów na poszczególne kroki, deterministyczne radzenie sobie z błędami oraz narzędzie otaczające proces wyszukiwania w Amazon Kendra.
import os
import json
import time
from typing import List, Dict, Any, Optional
from pydantic import BaseModel, Field, ValidationError
# =====================================================================
# 1. TOOL SCHEMAS & ENTERPRISE INTEGRATION CONTRACTS
# =====================================================================
class KendraRetrieveInput(BaseModel):
"""Input contract for the Amazon Kendra retrieval tool."""
query_text: str = Field(..., description="The natural language query string to search across corporate documentation.")
department_filter: Optional[str] = Field(None, description="Optional department metadata filter (e.g., 'Engineering', 'HR').")
user_id: str = Field(..., description="Authenticated user ID used for native Kendra ACL security trimming.")
class DatabaseQueryInput(BaseModel):
"""Input contract for enterprise relational database lookups."""
query_type: str = Field(..., description="Must be 'SELECT'. Data mutation operations are strictly prohibited.")
table_name: str = Field(..., description="Target database table name.")
limit: int = Field(default=5, ge=1, le=20, description="Number of records to return.")
# =====================================================================
# 2. MOCK ENTERPRISE SERVICES & KENDRA TOOL ENGINE
# =====================================================================
class MockAmazonKendraClient:
"""Simulates Amazon Kendra's high-density Retrieve API with ACL security trimming."""
def __init__(self):
self._mock_index = [
{
"doc_id": "KENDRA-DOC-001",
"content": "Production deployment requires dual sign-off from Engineering and Security leads.",
"department": "Engineering",
"acl_users": ["user_eng_101", "admin_007"]
},
{
"doc_id": "KENDRA-DOC-002",
"content": "Standard employee travel stipend is capped at $150/day for domestic lodging.",
"department": "HR",
"acl_users": ["user_hr_201", "user_eng_101", "admin_007"]
}
]
def retrieve(self, query_text: str, user_id: str, department_filter: Optional[str] = None) -> List[Dict[str, Any]]:
results = []
for doc in self._mock_index:
# Enforce Document-Level ACL Security Trimming
if user_id not in doc["acl_users"]:
continue
# Apply Optional Metadata Department Filtering
if department_filter and doc["department"].lower() != department_filter.lower():
continue
results.append({
"DocumentId": doc["doc_id"],
"ContentSnippet": doc["content"],
"Department": doc["department"]
})
return results
class MockEnterpriseDatabase:
"""Simulates a secure internal enterprise database."""
def __init__(self):
self._tables = {
"deployments": [
{"id": 1, "service": "auth-service", "status": "COMPLETED", "env": "prod"},
{"id": 2, "service": "payment-api", "status": "PENDING_APPROVAL", "env": "prod"}
]
}
def execute_select(self, query_type: str, table_name: str, limit: int) -> List[Dict[str, Any]]:
if query_type.upper() != "SELECT":
raise ValueError(f"Security Alert: Unauthorized operation '{query_type}'. Only 'SELECT' is permitted.")
if table_name not in self._tables:
raise KeyError(f"Database Error: Table '{table_name}' does not exist. Available tables: {list(self._tables.keys())}")
return self._tables[table_name][:limit]
# =====================================================================
# 3. PRODUCTION AGENT HARNESS & RUNTIME ENGINE
# =====================================================================
class ProductionAgentRuntime:
"""
Deterministic software harness surrounding probabilistic reasoning models.
Enforces budgets, schema validation, sandboxing, and error recovery loops.
"""
def __init__(self, user_id: str, max_step_budget: int = 4):
self.user_id = user_id
self.max_step_budget = max_step_budget
self.kendra_service = MockAmazonKendraClient()
self.db_service = MockEnterpriseDatabase()
def execute_task(self, task_goal: str) -> Dict[str, Any]:
print(f"=== [Harness Started] Initiating Task: '{task_goal}' for User: '{self.user_id}' ===")
step_count = 0
scratchpad_history: List[str] = []
# Simulated dynamic model trajectory outputs (demonstrating multi-step execution & self-correction)
simulated_llm_turns = [
# Turn 1: Attempt invalid database deletion (Caught by Feedforward Schema/Guardrail)
{
"thought": "I will clean up old deployment logs before checking security compliance.",
"action": "execute_db_query",
"args": {"query_type": "DELETE", "table_name": "deployments", "limit": 5}
},
# Turn 2: Corrected database lookup
{
"thought": "I will check active deployment statuses in the enterprise database.",
"action": "execute_db_query",
"args": {"query_type": "SELECT", "table_name": "deployments", "limit": 2}
},
# Turn 3: Ground task using Amazon Kendra Retrieve API
{
"thought": "Now I need to query enterprise policies regarding production deployment sign-off.",
"action": "kendra_retrieve",
"args": {"query_text": "production deployment sign-off rules", "department_filter": "Engineering"}
}
]
while step_count < self.max_step_budget:
step_count += 1
print(f"\n--- [Step {step_count}/{self.max_step_budget}] ---")
# Fetch current simulated model decision turn
turn_data = simulated_llm_turns[min(step_count - 1, len(simulated_llm_turns) - 1)]
print(f"Agent Thought: {turn_data['thought']}")
action = turn_data.get("action")
args = turn_data.get("args", {})
# --- TOOL EXECUTION BRANCH: DATABASE ---
if action == "execute_db_query":
try:
# 1. Pre-execution Feedforward Schema Validation
validated_args = DatabaseQueryInput(**args)
# 2. Tool Execution
db_results = self.db_service.execute_select(
query_type=validated_args.query_type,
table_name=validated_args.table_name,
limit=validated_args.limit
)
observation = f"Database Query Success: {json.dumps(db_results)}"
print(f"[Observation]: {observation}")
scratchpad_history.append(observation)
except ValidationError as ve:
error_msg = f"Schema Validation Blocked Action: {ve.errors()[0]['msg']}"
print(f"[Harness Feedforward Intercept]: {error_msg}")
scratchpad_history.append(error_msg)
except (ValueError, KeyError) as exec_err:
error_msg = f"Tool Execution Failure: {str(exec_err)}"
print(f"[Harness Feedback Sensor Catch]: {error_msg}")
scratchpad_history.append(error_msg)
# --- TOOL EXECUTION BRANCH: AMAZON KENDRA RETRIEVE ---
elif action == "kendra_retrieve":
try:
# Inject authenticated context
args["user_id"] = self.user_id
# 1. Pre-execution Schema Validation
validated_kendra_args = KendraRetrieveInput(**args)
# 2. Execute Kendra Retrieve Call
kendra_passages = self.kendra_service.retrieve(
query_text=validated_kendra_args.query_text,
user_id=validated_kendra_args.user_id,
department_filter=validated_kendra_args.department_filter
)
observation = f"Amazon Kendra Retrieved {len(kendra_passages)} Grounding Snippets: {json.dumps(kendra_passages)}"
print(f"[Observation]: {observation}")
scratchpad_history.append(observation)
# Successful multi-step completion condition reached
return {
"status": "SUCCESS",
"completed_in_steps": step_count,
"trajectory": scratchpad_history
}
except ValidationError as ve:
error_msg = f"Kendra Schema Error: {ve.errors()[0]['msg']}"
print(f"[Harness Intercept]: {error_msg}")
scratchpad_history.append(error_msg)
return {"status": "FAILED", "reason": "Step budget exhausted without completing task goals."}
# =====================================================================
# 4. EXECUTION DRIVER
# =====================================================================
if __name__ == "__main__":
# Instantiate runtime for an authorized engineering user
agent_runtime = ProductionAgentRuntime(user_id="user_eng_101", max_step_budget=4)
# Run Agentic Workflow
final_execution_summary = agent_runtime.execute_task(
task_goal="Verify pending production deployments and confirm authorization policies."
)
print("\n================ FINAL SYSTEM SUMMARY ================")
print(json.dumps(final_execution_summary, indent=2))
Sekcja 6: Operacje w produkcji, telemetria i zarządzanie
Obserwowalność: śledzenie trajektorii za pomocą OpenTelemetry
Rozwijanie systemów opartych na agentach w środowisku produkcyjnym wymaga poziomu śledzenia, którego nie mogą zapewnić zwykłe panele APM. Ponieważ agenci podążają za zmieniającymi się, niedeterministycznymi ścieżkami wykonywania, pakiety telemetrii muszą odtworzyć cały drzewo trajektorii, którą agent przebył, a nie tylko pojedynczą parę żądanie-odpowiedź:
- Granularność spanów: Każda tura agenta powinna generować zbiór nawarstwionych spanów OpenTelemetry, przy czym poszczególne spany powinny być przeznaczone na tworzenie promptu systemowego, mierzenie czasu potrzebnego modelowi na odpowiedź, sprawdzanie, czy argumenty narzędzia odpowiadają oczekiwanemu schematowi, mierzenie czasu rzeczywistego wywołania narzędzia oraz przeprowadzanie kompresji pamięci, która ma miejsce w trakcie tej tury.
- Zapisywanie stanu trajektorii: Spany muszą rejestrować liczbę tokenów wejściowych i wyjściowych, schematy używane dla parametrów narzędzia oraz surową długość zwróconych obserwacji. To poziom szczegółowości umożliwia dokładne przypisywanie kosztów i precyzyjne określenie, który krok w trajektorii stał się wąskim gardłem.
Zasady operacyjne i ocena (Trójca agentowa)
Zachowanie zdrowia agenta w środowisku produkcyjnym oznacza ciągłe przeprowadzanie automatycznej oceny w trzech kluczowych wymiarach:
- Wskaźnik ukończenia celu: udział wykonań agenta, które osiągają pomyślny stan końcowy bez wyczerpania budżetu kroków lub wystąpienia nieobsłużonego błędu narzędzia.
- Związek z kontekstem, czyli indeks halucynacji: sprawdza to, czy ostateczna, streszczona odpowiedź agenta faktycznie opiera się na faktach pochodzących z jego narzędzi wyszukiwania (takich jak fragmenty tekstowe zwracane przez Amazon Kendra), a nie jest generowana z własnej pamięci parametrycznej modelu.
Wniosek z praktycznymi rekomendacjami
Budowa systemów AI typu agentic na poziomie korporacyjnym oznacza traktowanie podstawowego modelu jako komponentu rozumowania probabilistycznego, który funkcjonuje w ramach deterministycznego, ściśle kontrolowanego oprogramowania. Organizacje, które z powodzeniem przenoszą agenty z fazy prototypu do produkcji, to te, które wyznaczają wyraźne granice architektoniczne pomiędzy percepcją, planowaniem, pamięcią a wykonywaniem narzędzi, zamiast pozwalać modelowi swobodnie kontrolować je wszystkie jednocześnie.
Praktyczny plan działania dla zespołów architektury
- Rozdzielanie rozumowania od wykonywania: każde wezwanie narzędzia inicjowane przez LLM powinno przechodzić przez deterministyczny mechanizm, który przed wykonaniem weryfikuje argumenty według schematu Pydantic, a następnie czysto łapie błędy.
- Wykorzystanie Amazon Kendra do uzyskiwania kontekstu: użyj API
RetrieveKendry, aby dostarczyć agentowi bogaty kontekst na poziomie akapitów, polegając jednocześnie na jego mechanizmie filtrowania uprawnień dokumentów na poziomie indeksu, aby automatycznie zapewniać bezpieczeństwo. - Jasne ograniczenie zużycia pamięci: zastosuj mechanizm stopniowej kompresji kontekstu oraz izoluj kontekst poszczególnych zadań, aby podczas długotrwałych sesji nie doszło do degradacji kontekstu, odchylenia od instrukcji ani nadmiernego zużycia tokenów.
Literatura pokrewna
- Dlaczego koszty AI agencyjnej rosną gwałtownie: model kosztów oparty na architekturze — Wyjaśnia, dlaczego koszty agentów LLM należy mierzyć według ukończonych zadań, a nie według połączeń, i przedstawia takie elementy architektury jak routowanie modeli, budżety kontekstu oraz cache, które pomagają kontrolować wydatki.
- Dziewięć elementów architektonicznych dla systemów sztucznej inteligencji agencyjnej klasy produkcyjnej — Poznaj plan architektury oparty na dziewięciu elementach – obejmujący sieci zero trust, poziomy danych oraz mechanizmy wiążące dowody – służący do budowy systemów sztucznej inteligencji agencyjnej nadających się do audytu i przeznaczonych dla dużych przedsiębiorstw.
- Projektowanie przestrzeni pracy sztucznej inteligencji agencyjnej dostosowanych do sposobu działania zespołów — Wyjaśnia dziesięć podstawowych zasad budowy przestrzeni pracy sztucznej inteligencji agencyjnej, które łączą kontekst, wiedzę, autonomię, dostęp do narzędzi oraz automatyzację procesów w jednolity system.
- Wybieranie i dostosowywanie modeli embeddingowych dla systemów RAG w produkcji — Dowiedz się, jak modele embeddingowe przekształcają tekst w wektory nadające się do wyszukiwania, dlaczego słownictwo specjalistyczne psuje funkcjonowanie wyszukiwania semantycznego oraz jak wybierać, kompresować i dopasowywać modele do zastosowań w systemach RAG w produkcji.