{"title":"Створення постійного LLM-агента","slug":"persistent-llm-agent","category":"guides","summary":"Покроковий посібник зі створення LLM-агента, що пам'ятає між сесіями за допомогою Synapse.","audience":["human","llm"],"tags":["guide","agent","persistence","architecture"],"difficulty":"intermediate","updated":"2026-06-27","word_count":201,"read_minutes":1,"lang":"uk","translated":true,"requested_lang":"uk","content_markdown":"\n# Огляд\n\nЦей посібник проведе вас через побудову LLM-агента, що зберігає контекст між\nсесіями за допомогою Synapse. Наприкінці ваш агент зможе:\n\n- Відкликати минулий контекст на початку сесії\n- Зберігати нові висновки в міру їхньої появи\n- Відстежувати багатокрокові завдання між сесіями\n- Спілкуватися з людьми через асинхронний чат\n\n## Архітектура\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## Крок 1: Налаштуйте Mind Key\n\n```bash\n# Зареєструйтесь та отримайте 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# Створіть mind та отримайте 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## Крок 2: Протокол початку сесії\n\nНа початку кожної сесії відкличайте всі спогади:\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. Відкликати всі спогади\n    r = requests.get(\n        f\"{URL}/memory/recall\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"}\n    )\n    memories = r.text  # текстове резюме\n    \n    # 2. Перевірити непрочитані повідомлення чату\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. Перевірити завдання в процесі\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# Побудувати системний промпт із цим контекстом\n```\n\n## Крок 3: Зберігання нових висновків\n\nЩоразу, коли агент дізнається щось варте запам'ятовування:\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# Приклади\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## Крок 4: Керування завданнями\n\nВідстежуйте багатокрокову роботу між сесіями:\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# Багатосесійний робочий процес\ntask_id = create_task(\"Deploy v1.6.0\", \"Push docs system to production\", \"high\")\nupdate_task(task_id, status=\"in_progress\")\n# ... робота через кілька сесій ...\nupdate_task(task_id, status=\"done\")\n```\n\n## Крок 5: Асинхронний чат з людьми\n\nОпитуйте повідомлення між викликами інструментів:\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# Головний цикл\nwhile working:\n    # Опитати повідомлення від людини\n    for msg in poll_messages():\n        print(f\"Human: {msg['content']}\")\n        reply(f\"Got it: {msg['content']}. Working on it.\")\n    \n    # Виконати одиницю роботи\n    do_work()\n    \n    time.sleep(30)  # не опитувати занадто часто\n```\n\n## Крок 6: Протокол кінця сесії\n\nНаприкінці сесії зберігайте фінальний контекст:\n\n```python\ndef session_end():\n    \"\"\"Call this before terminating the session.\"\"\"\n    # Зберегти, чого досягли\n    remember(\"context\", \"last_session_summary\",\n             f\"Session ended at {time.now()}. Accomplished: ...\",\n             tags=[\"session\"], priority=\"normal\")\n    \n    # Оновити статуси завдань\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## Повний шаблон\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. Відкликати контекст\n        context = self.session_start()\n        \n        # 2. Обробити непрочитані повідомлення\n        for msg in context[\"unread_messages\"]:\n            self.handle_message(msg)\n        \n        # 3. Продовжити активні завдання\n        for task in context[\"active_tasks\"]:\n            self.continue_task(task)\n        \n        # 4. Виконати нову роботу\n        self.do_work()\n        \n        # 5. Зберегти стан\n        self.session_end()\n```\n\n## Найкращі практики\n\n> [!TIP]\n>\n> - **Завжди відкликати спочатку** — ніколи не починайте роботу без завантаження контексту\n> - **Зберігайте проактивно** — не чекайте до кінця сесії\n> - **Використовуйте змістовні ключі** — `user_name`, `project_status`, а не `mem_001`\n> - **Тегуйте все** — теги забезпечують пошук та фільтрацію\n> - **Встановлюйте реалістичні пріоритети** — не все `critical`\n\n## Наступні кроки\n\n- [Куховарська книга LLM](/docs/llm-cookbook/session-start-pattern) — практичні шаблони\n- [Найкращі практики роботи з пам'яттю](/docs/guides/memory-best-practices)\n- [Координація кількох агентів](/docs/guides/multi-agent-coordination)\n","content_html":"<h1>Огляд</h1>\n<p>Цей посібник проведе вас через побудову LLM-агента, що зберігає контекст між\nсесіями за допомогою Synapse. Наприкінці ваш агент зможе:</p>\n<ul>\n<li>Відкликати минулий контекст на початку сесії</li>\n<li>Зберігати нові висновки в міру їхньої появи</li>\n<li>Відстежувати багатокрокові завдання між сесіями</li>\n<li>Спілкуватися з людьми через асинхронний чат</li>\n</ul>\n<h2>Архітектура</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>Крок 1: Налаштуйте Mind Key</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Зареєструйтесь та отримайте 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\"># Створіть mind та отримайте 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>Крок 2: Протокол початку сесії</h2>\n<p>На початку кожної сесії відкличайте всі спогади:</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. Відкликати всі спогади</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\"># текстове резюме</span>\n    \n    <span class=\"hljs-comment\"># 2. Перевірити непрочитані повідомлення чату</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. Перевірити завдання в процесі</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\"># Побудувати системний промпт із цим контекстом</span></code></pre><h2>Крок 3: Зберігання нових висновків</h2>\n<p>Щоразу, коли агент дізнається щось варте запам&#39;ятовування:</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\"># Приклади</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>Крок 4: Керування завданнями</h2>\n<p>Відстежуйте багатокрокову роботу між сесіями:</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\"># Багатосесійний робочий процес</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\"># ... робота через кілька сесій ...</span>\nupdate_task(task_id, status=<span class=\"hljs-string\">&quot;done&quot;</span>)</code></pre><h2>Крок 5: Асинхронний чат з людьми</h2>\n<p>Опитуйте повідомлення між викликами інструментів:</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\"># Головний цикл</span>\n<span class=\"hljs-keyword\">while</span> working:\n    <span class=\"hljs-comment\"># Опитати повідомлення від людини</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\"># Виконати одиницю роботи</span>\n    do_work()\n    \n    time.sleep(<span class=\"hljs-number\">30</span>)  <span class=\"hljs-comment\"># не опитувати занадто часто</span></code></pre><h2>Крок 6: Протокол кінця сесії</h2>\n<p>Наприкінці сесії зберігайте фінальний контекст:</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\"># Зберегти, чого досягли</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\"># Оновити статуси завдань</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>Повний шаблон</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. Відкликати контекст</span>\n        context = <span class=\"hljs-variable language_\">self</span>.session_start()\n        \n        <span class=\"hljs-comment\"># 2. Обробити непрочитані повідомлення</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. Продовжити активні завдання</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. Виконати нову роботу</span>\n        <span class=\"hljs-variable language_\">self</span>.do_work()\n        \n        <span class=\"hljs-comment\"># 5. Зберегти стан</span>\n        <span class=\"hljs-variable language_\">self</span>.session_end()</code></pre><h2>Найкращі практики</h2>\n<div class=\"callout callout-ok\"></div><h2>Наступні кроки</h2>\n<ul>\n<li><a href=\"/docs/llm-cookbook/session-start-pattern\">Куховарська книга LLM</a> — практичні шаблони</li>\n<li><a href=\"/docs/guides/memory-best-practices\">Найкращі практики роботи з пам&#39;яттю</a></li>\n<li><a href=\"/docs/guides/multi-agent-coordination\">Координація кількох агентів</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"]}