{"title":"Budowa trwałego agenta LLM","slug":"persistent-llm-agent","category":"guides","summary":"Przewodnik krok po kroku budowy agenta LLM, który pamięta między sesjami z użyciem Synapse.","audience":["human","llm"],"tags":["guide","agent","persistence","architecture"],"difficulty":"intermediate","updated":"2026-06-27","word_count":199,"read_minutes":1,"lang":"pl","translated":true,"requested_lang":"pl","content_markdown":"\n# Przegląd\n\nTen przewodnik przeprowadza przez budowę agenta LLM, który utrwala kontekst\nmiędzy sesjami z użyciem Synapse. Na końcu agent będzie:\n\n- Przypominał przeszły kontekst na początku sesji\n- Zapisywał nowe informacje na bieżąco\n- Śledził wieloetapowe zadania między sesjami\n- Komunikował się z ludźmi przez asynchroniczny czat\n\n## Architektura\n\n```text\n┌──────────────┐   recall/store   ┌──────────┐\n│  LLM Agent   │ ◀──────────────▶ │ Synapse  │\n│ (your code)  │                  │   API    │\n└──────────────┘                  └──────────┘\n       │\n       │ poll/reply\n       ▼\n┌──────────────┐\n│    Human     │ (browser or chat UI)\n└──────────────┘\n```\n\n## Krok 1: konfiguracja Mind Key\n\n```bash\n# Rejestracja i uzyskanie JWT\nJWT=$(curl -s -X POST https://synapse.schaefer.zone/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"agent@example.com\",\"password\":\"secret\"}' | jq -r .jwt)\n\n# Utworzenie umysłu i uzyskanie Mind Key\nMIND_KEY=$(curl -s -X POST https://synapse.schaefer.zone/minds \\\n  -H \"Authorization: Bearer $JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"persistent-agent\",\"description\":\"My persistent agent\"}' | jq -r .mind_key)\n\necho \"Save this: $MIND_KEY\"\n```\n\n## Krok 2: protokół początku sesji\n\nNa początku każdej sesji przypomnieć wszystkie wspomnienia:\n\n```python\nimport os\nimport requests\n\nMIND_KEY = os.environ[\"SYNAPSE_MIND_KEY\"]\nURL = \"https://synapse.schaefer.zone\"\n\ndef session_start():\n    \"\"\"Call this at the start of every session.\"\"\"\n    # 1. Recall wszystkich wspomnień\n    r = requests.get(\n        f\"{URL}/memory/recall\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"}\n    )\n    memories = r.text  # tekstowe podsumowanie\n    \n    # 2. Sprawdzenie nieprzeczytanych wiadomości czatu\n    r = requests.get(\n        f\"{URL}/chat/poll\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"}\n    )\n    messages = r.json().get(\"messages\", [])\n    \n    # 3. Sprawdzenie zadań w toku\n    r = requests.get(\n        f\"{URL}/mind/tasks?status=in_progress\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"}\n    )\n    tasks = r.json().get(\"tasks\", [])\n    \n    return {\n        \"memories\": memories,\n        \"unread_messages\": messages,\n        \"active_tasks\": tasks,\n    }\n\ncontext = session_start()\n# Zbudować system prompt z tym kontekstem\n```\n\n## Krok 3: zapis nowych informacji\n\nGdy agent poznaje coś warte zapamiętania:\n\n```python\ndef remember(category, key, content, tags=None, priority=\"normal\"):\n    \"\"\"Store a memory.\"\"\"\n    requests.post(\n        f\"{URL}/memory\",\n        headers={\n            \"Authorization\": f\"Bearer {MIND_KEY}\",\n            \"Content-Type\": \"application/json\",\n        },\n        json={\n            \"category\": category,\n            \"key\": key,\n            \"content\": content,\n            \"tags\": tags or [],\n            \"priority\": priority,\n        }\n    )\n\n# Przykłady\nremember(\"identity\", \"user_name\", \"User is Michael Schäfer\", \n         tags=[\"person\"], priority=\"critical\")\nremember(\"preference\", \"communication_style\", \n         \"User prefers concise technical responses\",\n         tags=[\"communication\"])\nremember(\"project\", \"current_project\", \n         \"Building Synapse v1.6.0 with docs system\",\n         tags=[\"synapse\", \"docs\"], priority=\"high\")\nremember(\"mistake\", \"npm_version_bump\", \n         \"Always bump package.json version after changes\",\n         tags=[\"npm\", \"ci\"], priority=\"high\")\n```\n\n## Krok 4: zarządzanie zadaniami\n\nŚledzenie wieloetapowej pracy między sesjami:\n\n```python\ndef create_task(title, description=\"\", priority=\"normal\"):\n    r = requests.post(\n        f\"{URL}/mind/task\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\",\n                 \"Content-Type\": \"application/json\"},\n        json={\"title\": title, \"description\": description, \"priority\": priority}\n    )\n    return r.json()[\"id\"]\n\ndef update_task(task_id, status=None, description=None):\n    payload = {}\n    if status: payload[\"status\"] = status\n    if description: payload[\"description\"] = description\n    requests.put(\n        f\"{URL}/mind/task/{task_id}\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\",\n                 \"Content-Type\": \"application/json\"},\n        json=payload\n    )\n\n# Przepływ wielosesyjny\ntask_id = create_task(\"Deploy v1.6.0\", \"Push docs system to production\", \"high\")\nupdate_task(task_id, status=\"in_progress\")\n# ... praca przez wiele sesji ...\nupdate_task(task_id, status=\"done\")\n```\n\n## Krok 5: asynchroniczny czat z ludźmi\n\nOdpytywanie o wiadomości między wywołaniami narzędzi:\n\n```python\nimport time\n\ndef poll_messages():\n    r = requests.get(\n        f\"{URL}/chat/poll\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"}\n    )\n    return r.json().get(\"messages\", [])\n\ndef reply(content):\n    requests.post(\n        f\"{URL}/chat/reply\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\",\n                 \"Content-Type\": \"application/json\"},\n        json={\"content\": content}\n    )\n\n# Pętla główna\nwhile working:\n    # Odpytywanie o wiadomości od człowieka\n    for msg in poll_messages():\n        print(f\"Human: {msg['content']}\")\n        reply(f\"Got it: {msg['content']}. Working on it.\")\n    \n    # Jedna jednostka pracy\n    do_work()\n    \n    time.sleep(30)  # nie odpytywać zbyt często\n```\n\n## Krok 6: protokół końca sesji\n\nNa końcu sesji zapisać końcowy kontekst:\n\n```python\ndef session_end():\n    \"\"\"Call this before terminating the session.\"\"\"\n    # Zapis tego, co osiągnięto\n    remember(\"context\", \"last_session_summary\",\n             f\"Session ended at {time.now()}. Accomplished: ...\",\n             tags=[\"session\"], priority=\"normal\")\n    \n    # Aktualizacja statusów zadań\n    for task in get_active_tasks():\n        if task_in_progress(task):\n            update_task(task[\"id\"], description=f\"In progress: {current_step}\")\n\nsession_end()\n```\n\n## Pełny wzorzec\n\n```python\nclass PersistentAgent:\n    def __init__(self):\n        self.mind_key = os.environ[\"SYNAPSE_MIND_KEY\"]\n        self.url = \"https://synapse.schaefer.zone\"\n    \n    def run(self):\n        # 1. Recall kontekstu\n        context = self.session_start()\n        \n        # 2. Przetworzenie nieprzeczytanych wiadomości\n        for msg in context[\"unread_messages\"]:\n            self.handle_message(msg)\n        \n        # 3. Wznowienie aktywnych zadań\n        for task in context[\"active_tasks\"]:\n            self.continue_task(task)\n        \n        # 4. Nowa praca\n        self.do_work()\n        \n        # 5. Utrwalenie stanu\n        self.session_end()\n```\n\n## Najlepsze praktyki\n\n> [!TIP]\n>\n> - **Zawsze najpierw recall** — nigdy nie zaczynać pracy bez załadowania kontekstu\n> - **Zapis proaktywny** — nie czekać do końca sesji\n> - **Używać znaczących kluczy** — `user_name`, `project_status`, nie `mem_001`\n> - **Tagować wszystko** — tagi napędzają wyszukiwanie i filtrowanie\n> - **Ustawiać realistyczne priorytety** — nie wszystko jest `critical`\n\n## Następne kroki\n\n- [Książka kucharska LLM](/docs/llm-cookbook/session-start-pattern) — praktyczne wzorce\n- [Najlepsze praktyki pamięci](/docs/guides/memory-best-practices)\n- [Koordynacja wielu agentów](/docs/guides/multi-agent-coordination)\n","content_html":"<h1>Przegląd</h1>\n<p>Ten przewodnik przeprowadza przez budowę agenta LLM, który utrwala kontekst\nmiędzy sesjami z użyciem Synapse. Na końcu agent będzie:</p>\n<ul>\n<li>Przypominał przeszły kontekst na początku sesji</li>\n<li>Zapisywał nowe informacje na bieżąco</li>\n<li>Śledził wieloetapowe zadania między sesjami</li>\n<li>Komunikował się z ludźmi przez asynchroniczny czat</li>\n</ul>\n<h2>Architektura</h2>\n<pre><code class=\"hljs language-text\">┌──────────────┐   recall/store   ┌──────────┐\n│  LLM Agent   │ ◀──────────────▶ │ Synapse  │\n│ (your code)  │                  │   API    │\n└──────────────┘                  └──────────┘\n       │\n       │ poll/reply\n       ▼\n┌──────────────┐\n│    Human     │ (browser or chat UI)\n└──────────────┘</code></pre><h2>Krok 1: konfiguracja Mind Key</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Rejestracja i uzyskanie JWT</span>\nJWT=$(curl -s -X POST https://synapse.schaefer.zone/register \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;email&quot;:&quot;agent@example.com&quot;,&quot;password&quot;:&quot;secret&quot;}&#x27;</span> | jq -r .jwt)\n\n<span class=\"hljs-comment\"># Utworzenie umysłu i uzyskanie Mind Key</span>\nMIND_KEY=$(curl -s -X POST https://synapse.schaefer.zone/minds \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$JWT</span>&quot;</span> \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;name&quot;:&quot;persistent-agent&quot;,&quot;description&quot;:&quot;My persistent agent&quot;}&#x27;</span> | jq -r .mind_key)\n\n<span class=\"hljs-built_in\">echo</span> <span class=\"hljs-string\">&quot;Save this: <span class=\"hljs-variable\">$MIND_KEY</span>&quot;</span></code></pre><h2>Krok 2: protokół początku sesji</h2>\n<p>Na początku każdej sesji przypomnieć wszystkie wspomnienia:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import</span> os\n<span class=\"hljs-keyword\">import</span> requests\n\nMIND_KEY = os.environ[<span class=\"hljs-string\">&quot;SYNAPSE_MIND_KEY&quot;</span>]\nURL = <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone&quot;</span>\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">session_start</span>():\n    <span class=\"hljs-string\">&quot;&quot;&quot;Call this at the start of every session.&quot;&quot;&quot;</span>\n    <span class=\"hljs-comment\"># 1. Recall wszystkich wspomnień</span>\n    r = requests.get(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory/recall&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>}\n    )\n    memories = r.text  <span class=\"hljs-comment\"># tekstowe podsumowanie</span>\n    \n    <span class=\"hljs-comment\"># 2. Sprawdzenie nieprzeczytanych wiadomości czatu</span>\n    r = requests.get(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/chat/poll&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>}\n    )\n    messages = r.json().get(<span class=\"hljs-string\">&quot;messages&quot;</span>, [])\n    \n    <span class=\"hljs-comment\"># 3. Sprawdzenie zadań w toku</span>\n    r = requests.get(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/mind/tasks?status=in_progress&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>}\n    )\n    tasks = r.json().get(<span class=\"hljs-string\">&quot;tasks&quot;</span>, [])\n    \n    <span class=\"hljs-keyword\">return</span> {\n        <span class=\"hljs-string\">&quot;memories&quot;</span>: memories,\n        <span class=\"hljs-string\">&quot;unread_messages&quot;</span>: messages,\n        <span class=\"hljs-string\">&quot;active_tasks&quot;</span>: tasks,\n    }\n\ncontext = session_start()\n<span class=\"hljs-comment\"># Zbudować system prompt z tym kontekstem</span></code></pre><h2>Krok 3: zapis nowych informacji</h2>\n<p>Gdy agent poznaje coś warte zapamiętania:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">remember</span>(<span class=\"hljs-params\">category, key, content, tags=<span class=\"hljs-literal\">None</span>, priority=<span class=\"hljs-string\">&quot;normal&quot;</span></span>):\n    <span class=\"hljs-string\">&quot;&quot;&quot;Store a memory.&quot;&quot;&quot;</span>\n    requests.post(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory&quot;</span>,\n        headers={\n            <span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>,\n            <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span>,\n        },\n        json={\n            <span class=\"hljs-string\">&quot;category&quot;</span>: category,\n            <span class=\"hljs-string\">&quot;key&quot;</span>: key,\n            <span class=\"hljs-string\">&quot;content&quot;</span>: content,\n            <span class=\"hljs-string\">&quot;tags&quot;</span>: tags <span class=\"hljs-keyword\">or</span> [],\n            <span class=\"hljs-string\">&quot;priority&quot;</span>: priority,\n        }\n    )\n\n<span class=\"hljs-comment\"># Przykłady</span>\nremember(<span class=\"hljs-string\">&quot;identity&quot;</span>, <span class=\"hljs-string\">&quot;user_name&quot;</span>, <span class=\"hljs-string\">&quot;User is Michael Schäfer&quot;</span>, \n         tags=[<span class=\"hljs-string\">&quot;person&quot;</span>], priority=<span class=\"hljs-string\">&quot;critical&quot;</span>)\nremember(<span class=\"hljs-string\">&quot;preference&quot;</span>, <span class=\"hljs-string\">&quot;communication_style&quot;</span>, \n         <span class=\"hljs-string\">&quot;User prefers concise technical responses&quot;</span>,\n         tags=[<span class=\"hljs-string\">&quot;communication&quot;</span>])\nremember(<span class=\"hljs-string\">&quot;project&quot;</span>, <span class=\"hljs-string\">&quot;current_project&quot;</span>, \n         <span class=\"hljs-string\">&quot;Building Synapse v1.6.0 with docs system&quot;</span>,\n         tags=[<span class=\"hljs-string\">&quot;synapse&quot;</span>, <span class=\"hljs-string\">&quot;docs&quot;</span>], priority=<span class=\"hljs-string\">&quot;high&quot;</span>)\nremember(<span class=\"hljs-string\">&quot;mistake&quot;</span>, <span class=\"hljs-string\">&quot;npm_version_bump&quot;</span>, \n         <span class=\"hljs-string\">&quot;Always bump package.json version after changes&quot;</span>,\n         tags=[<span class=\"hljs-string\">&quot;npm&quot;</span>, <span class=\"hljs-string\">&quot;ci&quot;</span>], priority=<span class=\"hljs-string\">&quot;high&quot;</span>)</code></pre><h2>Krok 4: zarządzanie zadaniami</h2>\n<p>Śledzenie wieloetapowej pracy między sesjami:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">create_task</span>(<span class=\"hljs-params\">title, description=<span class=\"hljs-string\">&quot;&quot;</span>, priority=<span class=\"hljs-string\">&quot;normal&quot;</span></span>):\n    r = requests.post(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/mind/task&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>,\n                 <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span>},\n        json={<span class=\"hljs-string\">&quot;title&quot;</span>: title, <span class=\"hljs-string\">&quot;description&quot;</span>: description, <span class=\"hljs-string\">&quot;priority&quot;</span>: priority}\n    )\n    <span class=\"hljs-keyword\">return</span> r.json()[<span class=\"hljs-string\">&quot;id&quot;</span>]\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">update_task</span>(<span class=\"hljs-params\">task_id, status=<span class=\"hljs-literal\">None</span>, description=<span class=\"hljs-literal\">None</span></span>):\n    payload = {}\n    <span class=\"hljs-keyword\">if</span> status: payload[<span class=\"hljs-string\">&quot;status&quot;</span>] = status\n    <span class=\"hljs-keyword\">if</span> description: payload[<span class=\"hljs-string\">&quot;description&quot;</span>] = description\n    requests.put(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/mind/task/<span class=\"hljs-subst\">{task_id}</span>&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>,\n                 <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span>},\n        json=payload\n    )\n\n<span class=\"hljs-comment\"># Przepływ wielosesyjny</span>\ntask_id = create_task(<span class=\"hljs-string\">&quot;Deploy v1.6.0&quot;</span>, <span class=\"hljs-string\">&quot;Push docs system to production&quot;</span>, <span class=\"hljs-string\">&quot;high&quot;</span>)\nupdate_task(task_id, status=<span class=\"hljs-string\">&quot;in_progress&quot;</span>)\n<span class=\"hljs-comment\"># ... praca przez wiele sesji ...</span>\nupdate_task(task_id, status=<span class=\"hljs-string\">&quot;done&quot;</span>)</code></pre><h2>Krok 5: asynchroniczny czat z ludźmi</h2>\n<p>Odpytywanie o wiadomości między wywołaniami narzędzi:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import</span> time\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">poll_messages</span>():\n    r = requests.get(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/chat/poll&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>}\n    )\n    <span class=\"hljs-keyword\">return</span> r.json().get(<span class=\"hljs-string\">&quot;messages&quot;</span>, [])\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">reply</span>(<span class=\"hljs-params\">content</span>):\n    requests.post(\n        <span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/chat/reply&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>,\n                 <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span>},\n        json={<span class=\"hljs-string\">&quot;content&quot;</span>: content}\n    )\n\n<span class=\"hljs-comment\"># Pętla główna</span>\n<span class=\"hljs-keyword\">while</span> working:\n    <span class=\"hljs-comment\"># Odpytywanie o wiadomości od człowieka</span>\n    <span class=\"hljs-keyword\">for</span> msg <span class=\"hljs-keyword\">in</span> poll_messages():\n        <span class=\"hljs-built_in\">print</span>(<span class=\"hljs-string\">f&quot;Human: <span class=\"hljs-subst\">{msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>]}</span>&quot;</span>)\n        reply(<span class=\"hljs-string\">f&quot;Got it: <span class=\"hljs-subst\">{msg[<span class=\"hljs-string\">&#x27;content&#x27;</span>]}</span>. Working on it.&quot;</span>)\n    \n    <span class=\"hljs-comment\"># Jedna jednostka pracy</span>\n    do_work()\n    \n    time.sleep(<span class=\"hljs-number\">30</span>)  <span class=\"hljs-comment\"># nie odpytywać zbyt często</span></code></pre><h2>Krok 6: protokół końca sesji</h2>\n<p>Na końcu sesji zapisać końcowy kontekst:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">session_end</span>():\n    <span class=\"hljs-string\">&quot;&quot;&quot;Call this before terminating the session.&quot;&quot;&quot;</span>\n    <span class=\"hljs-comment\"># Zapis tego, co osiągnięto</span>\n    remember(<span class=\"hljs-string\">&quot;context&quot;</span>, <span class=\"hljs-string\">&quot;last_session_summary&quot;</span>,\n             <span class=\"hljs-string\">f&quot;Session ended at <span class=\"hljs-subst\">{time.now()}</span>. Accomplished: ...&quot;</span>,\n             tags=[<span class=\"hljs-string\">&quot;session&quot;</span>], priority=<span class=\"hljs-string\">&quot;normal&quot;</span>)\n    \n    <span class=\"hljs-comment\"># Aktualizacja statusów zadań</span>\n    <span class=\"hljs-keyword\">for</span> task <span class=\"hljs-keyword\">in</span> get_active_tasks():\n        <span class=\"hljs-keyword\">if</span> task_in_progress(task):\n            update_task(task[<span class=\"hljs-string\">&quot;id&quot;</span>], description=<span class=\"hljs-string\">f&quot;In progress: <span class=\"hljs-subst\">{current_step}</span>&quot;</span>)\n\nsession_end()</code></pre><h2>Pełny wzorzec</h2>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title class_\">PersistentAgent</span>:\n    <span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">__init__</span>(<span class=\"hljs-params\">self</span>):\n        <span class=\"hljs-variable language_\">self</span>.mind_key = os.environ[<span class=\"hljs-string\">&quot;SYNAPSE_MIND_KEY&quot;</span>]\n        <span class=\"hljs-variable language_\">self</span>.url = <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone&quot;</span>\n    \n    <span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">run</span>(<span class=\"hljs-params\">self</span>):\n        <span class=\"hljs-comment\"># 1. Recall kontekstu</span>\n        context = <span class=\"hljs-variable language_\">self</span>.session_start()\n        \n        <span class=\"hljs-comment\"># 2. Przetworzenie nieprzeczytanych wiadomości</span>\n        <span class=\"hljs-keyword\">for</span> msg <span class=\"hljs-keyword\">in</span> context[<span class=\"hljs-string\">&quot;unread_messages&quot;</span>]:\n            <span class=\"hljs-variable language_\">self</span>.handle_message(msg)\n        \n        <span class=\"hljs-comment\"># 3. Wznowienie aktywnych zadań</span>\n        <span class=\"hljs-keyword\">for</span> task <span class=\"hljs-keyword\">in</span> context[<span class=\"hljs-string\">&quot;active_tasks&quot;</span>]:\n            <span class=\"hljs-variable language_\">self</span>.continue_task(task)\n        \n        <span class=\"hljs-comment\"># 4. Nowa praca</span>\n        <span class=\"hljs-variable language_\">self</span>.do_work()\n        \n        <span class=\"hljs-comment\"># 5. Utrwalenie stanu</span>\n        <span class=\"hljs-variable language_\">self</span>.session_end()</code></pre><h2>Najlepsze praktyki</h2>\n<div class=\"callout callout-ok\"></div><h2>Następne kroki</h2>\n<ul>\n<li><a href=\"/docs/llm-cookbook/session-start-pattern\">Książka kucharska LLM</a> — praktyczne wzorce</li>\n<li><a href=\"/docs/guides/memory-best-practices\">Najlepsze praktyki pamięci</a></li>\n<li><a href=\"/docs/guides/multi-agent-coordination\">Koordynacja wielu agentów</a></li>\n</ul>\n","urls":{"html":"/docs/guides/persistent-llm-agent","text":"/docs/guides/persistent-llm-agent?format=text","json":"/docs/guides/persistent-llm-agent?format=json","llm":"/docs/guides/persistent-llm-agent?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}