Strona główna / Artykuły / Architektura referencyjna dla systemów sztucznej inteligencji agentowej klasy przemysłowej

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.

3032 słów

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.
  • Moduł planowania: Zajmuje się dekompozycją celów, przekształcając ogólne instrukcje użytkownika w ustrukturyzowany, wykonywalny graf skierowanych acyklicznych (DAG) kroków. Może dynamicznie przeplanować działania, gdy wywołanie narzędzia zawiedzie lub zwróci coś nieoczekiwanego lub niekompletnego.
  • Zarządzanie stanem i pamięcią: Śledzi trzy poziomy pamięci — tymczasową pamięć roboczą (tymczasowe miejsce przechowywania danych dla bieżącej wątku), krótkoterminową ewidencję ścieżki wykonywania oraz dłużej trwającą pamięć semantyczną lub epizodyczną, która obejmuje kilka sesji użytkownika.
  • Szczegóły wykonywania narzędzi i zarządzanie nimi: Przekształca ustrukturyzowane intencje agenta w rzeczywiste działania — wywołania API, zapytania SQL lub odległe funkcje. To tutaj znajdują się również mechanizmy statycznego sandboxingu, walidacji parametrów, kontroli dostępu opartej na rolach (RBAC) oraz logiki zapobiegania awariom.
  • 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.
  • Topologia nadzorcy/lidera wielu agentów: Układ warstwowy, w którym agent najwyższego poziomu „nadzorca” otrzymuje początkową prośbę, dzieli ją na podzadania i przekazuje je specjalistycznym agentom (np. agencie SQL, agencie wyszukiwania RAG oraz agencie wykonywania działań). Nadzorca zarządza stanem globalnym, podczas gdy każdy specjalistyczny agent korzysta z wąskiego zestawu narzędzi dostosowanych do jego zadania.
  • Topologia peer-to-peer/sieciowa: Specjalistyczne agenty komunikują się bezpośrednio ze sobą za pośrednictwem wspólnego bufora zdarzeń, bez centralnego koordynatora. Daje to dużą elastyczność, ale może prowadzić do niedeterminizmu, ryzyka pętli wiadomości, które nigdy się nie kończą, oraz trudności w debugowaniu, których trudno uzasadnić w kontekście przedsiębiorstwa.
  • 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.
  • Pamięć trajektorii krótkoterminowej: tymczasowe przechowywanie, takie jak Redis lub DynamoDB, które zawiera surową historię zdarzeń aktualnej sesji — pełne dane wejściowe wywołań narzędzi oraz ich surowe odpowiedzi.
  • Pamięć długoterminowa: trwałe przechowywanie — bazy danych relacyjne, wektorowe lub grafowe — które zachowuje streszczone informacje o wcześniejszych interakcjach, profile preferencji użytkowników oraz wnioski specyficzne dla danej dziedziny uzyskane w trakcie wielu sesji.
  • 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.
  • Zwiększanie istotności: Kendra umożliwia zwiększanie ważności zarówno w czasie wykonywania, jak i na poziomie indeksu, kierowane przez atrybuty dokumentów. Zespoły mogą na przykład zwiększyć ważność na podstawie aktualności za pomocą _last_updated_at, kategorii biznesowej lub dokładnych dopasowań w polach niestandardowych, takich jak Department czy ProjectCode.
  • API Retrieve versus API Query: Podczas łączenia Kendry z zestawem narzędzi agenta, należy preferować API 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ść.
  • Czujniki informacji zwrotnej (po wykonaniu): Gdy narzędzie napotka błąd, system przechwytuje ten błąd w sposób deterministyczny, zamiast pozwolić mu zepsuć działanie pętli lub przesłać surowy ślad błędu do modelu. Zamiast tego przekształca błąd w czytelną, uporządkowaną wiadomość — na przykład 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 UNAVAILABLE w 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.
  • Dokładność wykonywania narzędzi: stosunek prawidłowo sformatowanych, upoważnionych wywołań narzędzi do tych, które miały błędy formatowania, nie przeszły walidacji schematu lub zostały wywołane bez odpowiednich uprawnień. Wysoki odsetek nieważnych wywołań jest zazwyczaj oznaką tego, że instrukcje dostarczane modelowi są zbyt ogólne lub że schematy narzędzi nie są już zsynchronizowane z tym, czego oczekuje model.
  • 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 Retrieve Kendry, 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.
  • Ustal sztywne ograniczenia wykonywania: wdroż strogie limity liczby kroków i zużycia tokenów, a także zaimplementuj mechanizmy ochronne na poziomie narzędzi, aby pojedyncza nieprawidłowo działająca zależność nie mogła spowodować nieskończonego pętli.
  • Zapewnij możliwość obserwacji trajektorii: ustandaryzuj używanie OpenTelemetry do śledzenia każdego etapu pętli rozumowania agenta, rejestrując zużycie tokenów, opóźnienia narzędzi oraz pełne ścieżki trajektorii, aby można było przeprowadzać ciągłą ocenę offline.
  • Literatura pokrewna