Галоўная / Артыкулы

Дайце агентам ШЫ зовнішня памяць у зменшэнне таго, каб не запхваць вікна кантэксту.

Заменіце агентаў з золатымі рыбкамі на цыкл «Чытаць-Разумець-Дзейсці-Пісаць», які працуе з гібрыдным вектарным і графамічным пам’ятай, а таксама включае працэсы консалідаціі, прычэшвання, аналізу і кантролю прыватнасці.

Выдавец: REACTAPP.TOP11 хв чытання2623 слоў

Крыніцы: Your AI Agent’s Memory Problem: The New Architecture You Need

Чат-боты без стану перазначальваюцца пасля кожнай сесіі. Агенты, які пішуць код, аналізуюць рынкі чырагулююць рабочымі працэсамі, частаўна робяць тое ж: калі працэс завершваецца, прыямліванні, памылкі і кантэкст праекту знікаюць. Рашэнняя не ў тым, каб падаць все большыя запіты — гэта ў тым, каб стаўіць памяць у ранг першакласнага зовнішняга падсістэмы, каб агенты моглі вучыцца працаваць праз тыячы крокаў.

Проблема золатай рыбкі: чаму сучасныя AI-агенты забываюць

Можна назваць гэта агентам з золатай рыбкай: кожная взаімадзея начынаецца з нуля, не можучы выкарыстаць урокі, пяраскліванні корыстувальніка чыра пяршнія невыконанні. Найм экспертнага кансалтанта, які ў кожны раз, калі закрывае ноутбук, забывае ваша імя, кодавую базу і цялі, прыведзе да таго, што палова бюджэту будзе выкорыстана на паўтарную інформаванне. Стакі агентаў без статаусу падтвараюць гэты марнатратнасц. Дамы продукту закрываюць проблему, таму што кожная експертыза трывае недазго; але ў рэальных умовах гэта становіцца проблемай, калі корыстувальнік вяртаецца за колькі дзён пазней, а агент знову прасіць пра пяраскліванні, якое ўжо было зборанае, або прапануе дызайн, які команда адхіліла ў пяршнем спрынце. Агенты з калькуляцыямі на колька шагоў паўтараюць гэтыя вітраты: без можлівасці запісу кожны дзейнік работы зноў выявляе особлівасці срэдавышча, якія ўжо былі выявлены падчас пяршніх запускаў.

+-------------------------------------------------------------+
|                     User Session Ends                       |
|                              |                              |
|                              ▼                              |
|   +-----------------------------------------------------+   |
|   |             Stateless LLM Call Clears               |   |
|   |  - System Prompts: Reset                            |   |
|   |  - Session Context: Erased                          |   |
|   |  - Learned Preferences: Forgotten                   |   |
|   +-----------------------------------------------------+   |
|                              |                              |
|                              ▼                              |
|                   Next Run = Day One Again                  |
+-------------------------------------------------------------+

Ілюзія большых вакон кантэксту

Команды частаца выдаваюць адчуванне пераказвання дадзейнаў, заполняючы акно кантэксту вялікімі колькасцямі історыі і файлоў праз кожны раунд. Акна на мільйон токенаў робяць гэта прыемным, але выкарыстоўванне іх як давялега сховішча ўзьмоўваецца за анты-патэрн. Негатыўныя наследкі праявляюцца негайна:

  • Зростаючыя вітраты, калі кожны вызов перапрацоўвае вялікія запіты
  • Затрымкі, калі час адпаведзення зрастае з дужынай запіту
  • Шум у кантэксце з-за эфекту “загублення ў масе” дадзейнаў, калі ключовыя факты тонуць у велікім тэксце

Большыя акна спрыяюць інтэрактыўным чатам, але не заменяюць стойкага стану дадзейнаў. Адночасова яны выказваюць зв’язак между цэнай і затрымкамі і дужыною історыі, таму успешныя корыстнікі стаюць найдорожэйшымі для обслужвання.

Ад большага кантэксту да розумнейшага кантэксту

Аўтонамныя сістэмы патрабуюць памяці як зовнішняй архітэктурны компонент, а не як спосабу падмоўкі пры выкананні задач. Такая змяна ператварае агента з функцыі без стану на агента з станам, які можа чытаць, запісваць і сінтазаваць інфармацыю з часам. Наступна генерація інжынерыі агентоў менш спрамована на расшырэння трымкі увагі, а больш — на роз’еднаную памяць, якая застаецца пасля завершэння адной просьбы.

Цікл памяці: архітэктурны план для кагніцыі агента

Агент не можа спрыятаць кожны крок як чысты ліст. Яму патрабуюцься кагнітывныя ціклы, якія постаўляюць, фільтруюць і зберагаюць інфармацыю — гэтая база ператварае большых мовных мадэляў з прыбліжальных машын у агентоў з станам.

Уявіце сабе дзень апытнаг інжынера: чытанне кодавой базы, планаванне, рэалізацыя, зберэжэння. Памяць агента формалізуе гэты людскі цікл у павтараючыся цыкл.

Цікл чытання-расумавання-дзеяння-запісу

Read-Reason-Act-Write (RRAW) раздзеляе выкананне на чатыры последовальныя фазы:

  • Read — пры падготовцы запіту шукае ў давялінных базах дадзеных актуальную історыю, прагантаванні і паказаныя раней рашэнні
  • Reason — мадэль спаўнае чынны запіт з атрыманай інформацыяй, каб спланаваць дальнейшыя дзеянні
  • Act — выкорыстоўвае інструменты, API або базы дадзеных сагледам таго плану
  • Write — сінтазуе рэзультаты і адзывы, пасля чаго фіксуе іх у памяці

Запісі ў памяць должны выконвацца асінхрональна. Блакаванне адпаведзі да корыстніку пасля абнаўлення вектараў чы графаў створае непрыемны затрэмленне. Практычны падход — негаючы просьбу корыстніка з маршруту прычыны/дзеяння негайна, дадаць у чэргу задачу на кансалідацыю з неапранутым пакетам взаімадзеяння і дазволіць працоўнікам абнаўляць індэксы па звычайным каналу, выкарыстоўваючы прабныя спробы і механізмы обработкі нераспакаваных паведамленняў.

Архітэктурны поток дадзей

Рэалізацыя такога цыклу значыць формалізаванне спосабу, якім дадзеныя пераходзяць між корыстнікам, оркестрактаром, модэлем і сховішчам:

[User Input]
     │
     ▼
[Agent Orchestrator] <─────────────────────────────┐
     │                                             │ (Loopback)
     ├─────────────────► [Memory Retrieval]        │
     │                           │                 │
     ▼                           ▼                 │
[LLM Prompt Assembler] <─── [Context]              │
     │                                             │
     ▼                                             │
[Large Language Model (LLM)]                       │
     │                                             │
     ▼                                             │
[Action Executor]                                  │
     │                                             │
     ▼                                             │
[Memory Writeback Module] ─────────────────────────┘
     │
     ▼
[(Episodic / Semantic / Procedural Stores)]

Тры сталпы агентнай памяці

Адна недзефармаваная база дадзэння створае шум у працэсе выкарыстоўвання дадзэнняў і негнучкія схемы. Давяліце дугастраўную памяць на тры ролі:

  • Эпізодычная памяць — логі взаімадзеяння, аранжаваныя па часу; наратывнае самабіяграфія
  • Семантычная памяць — факты без дуплікацый і адносіны межаў; тое, што ёсць правдай пра свет
  • Процедурная памяць — эфектывныя алгорытмы працы і шаблоны інструментаў; як выканаць работу
  • Раз’ядроўка мозга ад памяці

    Тэхнічны прынт — аддзеленне вычысленняў (LLM) ад стану (хранілішча). Гэта дазволяе ухіліцца ад праблем, зв’язаных з кантэкстным вікнам, і ад вітаткаў, якія выклікае постацейна налаштовванне. Хранілішча можна масштабаваць горызонтальна праз адбіванне історый, тады як мадэль застаецца обмежаным, пераважна безстановым выконавцам. Команды можаць зменяць мадэлі імбедджэў або схемы графаў без перэналяштоввання мадэлі чату, а таксама дзельнаваць памяць за корыстувачамі, каб рост аднае кліентскай групы не паўлічваў скорасць запрашання дадзеных для іншай.

    Стварэнне хранілішча памяці: гібрыдны тэхналогічны стак

    Чалавечыя канцэпты раздзеляюць эпізодычнае адгадванне і семантычныя знанні. Адкладэнне якога-небудзь з іх у адны базе дадзеных стварае сістэмы, якія ўсё чырваўкавыя або ж занадта жорсткія. Таму сістэмы адгадвання спалююць базы вектарных дадзеных для асоцыятывага адгадвання з базамі графаў для дэтэрміністычных асоцыяцый.

    Базы вектарных дадзеных для семантычнага і эпізодычнага адгадвання

    Pinecone, Milvus, Weaviate і іншыя сховваюць вкладкі падзей і дакументаў. Метрыкі блізкасці, такія як косайны схожасць, адкрыюць стосунавыя спомненні:

    import numpy as np
    from openai import OpenAI
    
    client = OpenAI()
    
    def get_embedding(text: str) -> list[float]:
        """Generates a 1536-dimensional vector embedding for semantic search."""
        response = client.embeddings.create(
            model="text-embedding-3-small",
            input=text
        )
        return response.data[0].embedding
    
    # Store an episodic memory with its vector representation
    episodic_memory = "Met with Sarah yesterday. She greenlit the budget for Project Titan."
    memory_vector = get_embedding(episodic_memory)
    
    # This vector allows us to find this memory later using natural language queries
    # like 'What did we agree on with Sarah?' even if 'budget' is omitted.
    

    Вектарныя пошукавальнікі ўзьміцься за адкрытыя запытанні, такія як «Пра што мы говорылі пра міграцыю ў хмару ў пярэднім квартале?» Але яны менш эфектыўны, калі адпаведзь трэба знайсці ў вачынку — прабалістычныя суседзі не ўтвараюць гаранцый. Падобнасць яўляецца правым інструментам для «прапамятаць, пра што мы говорылі пра міграцыю», а не для прав на выплату заробкай чыў стосункоў кантролю доступу, якія павінны даходзіць да адной правільнай вялі.

    Базы дадзеных у фармаце графаў для дэтэрміністычнага караткавання ведамасцей

    Запытанне «Хто керуе праектам Titan?» можа вернуць дакумент, у яком згадваюцца оба імены, але не паказвае зв’язку між ямі. Графы, такія як Neo4j, мадэлююць аб’екты як вузлы, а стосункі — як вялі, што дапамагае досягнуць паведамлення на адной вялі:

    (Project: Titan) <-[:LEADS]- (Employee: Sarah) -[:REPORTS_to]-> (VP: Marcus)
    

    Агент праходзіць перавераны шлях LEADS, а не спробуе здагадацца на адваротнасці.

    Гібрыдны рашэння: оркестраваны пошук з вектараў у графы

    Памэц вырабатчыка зазвычай керуе обомі двойчыкамі. Вектары ператвораюць нечыстыя інтэнціі на ID-ы аб’ектаў; пасля граф вяртае точныя зв’язкі і межы:

    # Real-world query: "Who is the lead on that document-indexing project?"
    
    def hybrid_memory_lookup(user_query: str) -> dict:
        # Step 1: Query Vector DB to find the most contextually relevant project
        query_vector = get_embedding(user_query)
    
        # Mock Vector DB search returning the closest matching entity ID
        matched_project_id = "project_titan_404"  # Found via match on "document-indexing"
    
        # Step 2: Query Graph DB using the strict entity ID to find the exact lead
        # Cypher Query: MATCH (p:Project {id: $id})<-[:LEADS]-(e:Employee) RETURN e.name
        graph_record = mock_neo4j_driver.run(
            "MATCH (p:Project {id: $id})<-[:LEADS]-(e:Employee) RETURN e.name",
            id=matched_project_id
        )
    
        return {
            "project_id": matched_project_id,
            "lead_name": graph_record["e.name"]
        }
    
    # This hybrid flow eliminates vector hallucination by anchoring
    # fuzzy natural language inputs to hard, deterministic graph relationships.
    

    Спачатку выдзейце аб’екты з запіту карыстальніка і запусціце граф на базе эйх ID-аў, а не проста вводзіце неапрануты тэкст у запіты на кшталт Cypher. Спаўненне асоцыяцыйных і структураваных хранэнняў дазволяе агентам падтрымваць кантэкст размовы, заўсёды будучы точнымі ў вопытах, касаючыся корпаратыўных фактов. У практыцы керуючы элемент можа запусціць дэшавы вектарны тэст, выдзеяць кандыдатскія ID-ы аб’ектаў, прабавіць іх проты графа, а толькі пасля чаго ввесты складзены пакет перавераных тройкі ў запрошэнне.

    З неапранутых дадзенняў да выкарыстоўванай памяці: Працэс кансалідацыі

    Запісваўце кожнага выказвання безпосерэдна ў вектарны індэкс створае занадто большы об’ём памяці і шум у працэсе пошуку — стол, заполнены прыклейкамі з кожных нарад, уключаючы прыветственныя заўважэння. Знаходзіць рашэнне, зроблена тры месцы таму, становіцца безнадзейным. Без кансалідацыі час адпаведзення на запіты зростае, рэзультаты пошуку заполняюцца прыветственнымі заўважэннямі, а мадэль начынае цытаваць застарэлія або суперсечныя фрагменты. Асінхронная паўтарна обработка ператварае необработаныя лог-файлы на кантэнцыю з высокай якасцю:

    [Raw Interaction Data] → [Extraction] → [Synthesis] → [Pruning] → [Long-Term Memory]
    

    Тры стадзіі кансалідацыі памяці

    Абрабатка кансалідацыі павінна вестыцца па крытычным шляху запітоў — праз задачы cron або падзеі на заканчанні сесіі — і складацца з трох стадзій:

    1. Экстракцыя — выкарыстоўваецца для выявлення фактов, прыямоў і рашэнняў сярод непатрэбных дэталяў размовы
    2. Сінтэза — злучэнне з існуючымі давгастроковымі запісамі, усуненне суперсечнасцей, апдэйт застарэлых даноў
  • Адаптаванне — адзінакоўваючы па бале, выкарыстоўваецца для адмовы ад памятных элементаў з нізкай корыстнасцю або тымчасовых.
  • Сінтэза кансэрвацый з структураванымі выходамі

    Экстракцыя і сінтэза выкалікаюцца пад контролем схемы. Мадэлі у стыле Pydantic дапамагаюць прыводзіць даныя у стан, падатны для зберагача:

    import os
    from typing import List
    from pydantic import BaseModel, Field
    from openai import OpenAI
    
    # Define the target structure for consolidated memory
    class MemoryItem(BaseModel):
        fact: str = Field(description="A single, atomic statement of fact about the user or their environment.")
        category: str = Field(description="The functional domain (e.g., tech_stack, preference, constraint).")
        importance: int = Field(description="A subjective importance rating from 1 (low) to 5 (high).")
    
    class ConsolidatedMemory(BaseModel):
        memories: List[MemoryItem]
    
    def synthesize_transcript(transcript: str) -> ConsolidatedMemory:
        """
        Parses a raw transcript and extracts high-signal, deduplicated facts.
        This structured parsing prevents raw noise from polluting the vector store.
        """
        client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
    
        prompt = f"""
        Analyze the following chat transcript between a user and an AI.
        Extract key facts, user preferences, and technical constraints.
        Ignore conversational noise, greetings, and transition phrases.
    
        Transcript:
        {transcript}
        """
    
        # Use structured outputs to guarantee the response matches the Pydantic schema
        completion = client.beta.chat.completions.parse(
            model="gpt-4o-mini",
            messages=[
                {"role": "system", "content": "You are an expert data consolidation engine."},
                {"role": "user", "content": prompt}
            ],
            response_format=ConsolidatedMemory,
        )
    
        return completion.choices[0].message.parsed
    # Example Usage
    raw_chat = """
    User: Hey! I'm starting a new web project. I want to use FastAPI and PostgreSQL.
    AI: That's a great stack! Do you want to use Docker?
    User: Yes, Docker is a must. And remember, I hate using MongoDB, so let's avoid that completely.
    """
    
    structured_output = synthesize_transcript(raw_chat)
    for item in structured_output.memories:
        print(f"[{item.category.upper()}] Fact: {item.fact} (Importance: {item.importance}/5)")
    

    Алгорытмічнае адаптаванне і ацэнка рэлевантнасці

    Не кожны сінтэзаваны элемент заслуговае на стойкасць. Бал корыстнасці вылічаецца на аднойчыну з урахоўванням значамасці, свежасці і частоты выкарыстоўвання:

    Корыстнасць = (Значамасць * КолькістьВыкарыстоўвання) / (1 + (КоефіцыентЗанепаду * ДзеныЗаўсёды)

    Запісі, які знаходзяцца ніжэй за певны ўскладнення, выкарыстоўваюцца для скорачэння розмеру індэксаў, каб яны заставаліся малымі і рэлевантнымі. Консолідацыя дадзеных пакетамі у перыяды з меньшай навантажэнням дапамагае скорачыць вітраты на апрацоўку і ухіліцца ад конкурэнціі за право зберагчыць дадзеныя ў актывах з высокай навантажэнням. Рэйтынгі важнасці, якія дае LLM, трэба перыядычна калібруваць на аднойчынку з прыкладамі, пераглянутымі людзьмі, каб сістэма не зберагала занадто многа дробных дадзеных і не прыгналася ад рэдкіх, але важных рашэнняў.

    Практычныя застосоўванні

    Мадэль без стацыонарнага стану — цэх кансалтант з амнезіяй: геніальная у ізоляцыі, але вымоючая ў паўнакладзе. Персістэнтная памяць ператварае генераторы на партнераў, якія прыносяць дадатковую цэннасць:

    • Колегі-ШЫ, якія зберагаюць структуру кодавой базы, умовы API і пакульнія рашэнні пра дызайн
    • Агенты падтрымкі, якія памяцяюць інформацыю пра власніка продукту і настроеныя корыстувачаў праз розныя сесіі
    • Памочнікі CRM, якія сочыць за нюансамі стосункоў, каб адбываць лепшыя наступныя дзеянні
  • Памяць для дапамогі в даследаванні, якая сінтазуе літэратуру ў гіпатэзы з перакрытай асаціяцыёю
  • Адбіранне маршруту за патрэбамі: стан, прыязджанный да сесіі, для падтрымкі, протыва глыбокага структурнага кантэксту для архітэктуры коду. Хадаць ухілецца ад ўжоўскладненага бакета памяці. Боты для падтрымкі часта патрабуюць апошніх калькі сесій плюс метаданыя аблікова; агенты для кодавання — карты рэпазітарыў і падсумкі ADR. Направленне гэтых класаў запытанняў да разных сховішч — або да разных калекцыяў з розным тэрміном зберагачвання — дапамагае заліць кожны індэкс цэлысным.

    Нормы працы ў продакшэне: ад пратотыпу да надзеянага сістэмы

    Дастычка з базайнем дадзеных вектараў недастатня. Часты спосаб абякання — памяць толькі для запісу: зберагчыце всі логі і адпаведзі з інструментаў, пакуль працэс выкарыстання не зламаецца пад вплывам шуму. Агенты для працы ў працэсе выкарыстання патрабуюць строгага цыклу RRAW з фільтрам, сінтэзам і перыядычным адкропленням дадзеных; інакша шум у кантэксце і змяны вектараў будуць домінаваць. Можлівасць абзору дадзеных павінна включаць глыбіню чэргі для заданняў адкроплення, шчыткавыя кантэксты і прагі апавешчэнняя, калі рэшта пасля змены схемы аб методу включэння зменшыцца.

    Канкрэтызацыя значэння памяці за дапамой метрык ацэнкі

    Следзіце за памяцю як і за будзь-яй іншай службай:

    • Рэшта памяці (MHR) — частка выкарыстаных фрагментаў, якія насправды былі выкарыстаны ў адпаведзі
    • Бал якосці адпаведзі (RQS) — ацэнка параванення адпаведзяў, базаваных на памяці, і адпаведзяў у стане нуля

    Карыстоўванне костам, затрымкамі і прыватнасцю

    Кожны выхад у памяці коштае часу і грошаў. Храніце кансалідэйцыю асінхронна, задаўце строгі таймауты для вычыслення даных, каб медлівыя запіты не блакавалі главнага цыклу, і ставіцеся да сховішчаў памяці як да чутлівых даных:

    import asyncio
    import logging
    from typing import List
    
    logging.basicConfig(level=logging.INFO)
    
    async def fetch_memories_from_db(user_id: str, query: str) -> List[str]:
        # Simulate a vector database retrieval latency
        await asyncio.sleep(0.1)
        return ["User prefers Python for data engineering tasks."]
    
    async def retrieve_memory_safely(
        user_id: str,
        query: str,
        timeout_seconds: float = 0.15
    ) -> List[str]:
        """
        Retrieves memories asynchronously with a strict timeout guardrail.
        This prevents slow vector DB lookups from blocking the main agent response loop.
        """
        try:
            # Enforce a strict latency budget using asyncio.wait_for
            memories = await asyncio.wait_for(
                fetch_memories_from_db(user_id, query),
                timeout=timeout_seconds
            )
            return memories
        except asyncio.TimeoutError:
            logging.warning(f"Memory timeout for user {user_id}. Falling back to empty memory.")
            # Fallback to preserve user experience latency
            return []
    
    # Example execution of the guarded memory retrieval
    if __name__ == "__main__":
        memories = asyncio.run(retrieve_memory_safely("usr_90210", "Get programming language"))
        print(f"Retrieved Memories: {memories}")
    

    Анонімізавайце даныя пад час ўваходжэння, застаўце правілы RBAC, каб Агент А не могаў чытаць памяць Агента Б, і дагадвайцеся пра трэбаванні GDPR/CCPA. Ніколы не включайце неапранутыя тэксты корыстнікаў; апрануйце персональныя даныя прышлегаючы да індэксавання.

    Чакліст для працы пад час першага прыемнага выпуску

    Апрабавайце тонкі вертыкальныя фрагменты пры стварэнні ідэальной таксаноміі. Пачніце з логаў эпізодычных сесый плюс адной семантычнай колекцыі для зберагачэння перадпаказаў корыстувальнікаў, дадзіце маленькі граф для організацыяйных ентытаў толькі тады, калі пытанне да продукту выкалічвае неабходнасць дэтэрміністычных з’ўязкаў, і з самага пачатку впрысніце механізмы MHR і RQS. Калі працэс вычыслення мемарыяў сповільнюецца, валічыце таймаауты і адпаведныя, менш якісныя адказы працоўніку, чым блакаванне чатоў. Документавайце трымкі мэтадаў па кожнаму корыстувальцы, рэжысеравайце працэс вярнення дадзэных з рэзервных копій і чыстаце, хто можа за запросам вычысціць мемарыі корыстувальніка. Гэтыя прыкметы маюць большое значэнне, чым выбір самай моднай маркі вектора, таму што сістэмы мемарыяў перастаюць працаваць на практычнай адзыне задоўга перш чым трапляюць проблемы ў концэптуальнай структуры. Нудны комплекс з чыста выражанымі SLO-маў, функціямі рэдакцыі і задачамі чысткі пастане лепшы за модную базу дадзэных, якую ніхто не сочыць, калі шчыльнасьць апрацоўкі дадзэных таямна падыходзіць да нуля.

    Чаго оптымізуе архітэктура

    У гэтым падходзе прыорытэт даёмаеся эвалюяцыйм можлівасцям і стану сістэмы працоўкі, а не толькі хітрасці ў разовых запытаннях. LLM являе сабою двухэтапны механізм; зовнішня памяць выступае як стан сістэмы. Структураваны цыкл зворотнага зв’язку дазволяе агенту ў кожны цыкл удосконаляць свой падход — ад тымчасовых інструментаў клавіатурна-экранавага інтэрфейсу да стабільной прыменной сістэмы.

    Ён таксама паграбляе вартасць, час адпаведзбы і рэлевантнасць: прымусовая пашукальная дзеяльнасць модэлі ў вельмі большым кантэксце спрацоўвае на адзінакі ўвагі і токэнаў. Зовнішня памяць прадзефлектуе гэты кантэкст. Асалідныя якосці агента вынікаюць не столькі з розмеру вікна кантэкста, сколькі з точнасці сістэм адзыскання дадзеных, якія жывляюць модэль. Команды, якія інвестуюць у гібрыдную памяць, кансалідацыю, ацэнку і меры прыватнасці, атрымуюць агентаў, якія павышаюць свою эфектывнасць з часам вжытку, а не падупаюць пад тэчасным історыям. Калі гэтыя меры відсутны, історыя стае прычынай проблем: гучнейшыя запіты, медленнейшыя адпаведзі і корыстувальнікі, якія перастаюць даваць доверле цэй асістэнту, які з недзеляў у недзелю суперасходзіцца сам з сабой. Рэткае выкорыстоўвання зовнішней памяці — гэта спосаб, як продукты на аднойчыну агентаў накапліваюць прыямоць, а не шум.