Створення постійного LLM-агента
Покроковий посібник зі створення LLM-агента, що пам'ятає між сесіями за допомогою Synapse.
Огляд
Цей посібник проведе вас через побудову LLM-агента, що зберігає контекст між сесіями за допомогою Synapse. Наприкінці ваш агент зможе:
- Відкликати минулий контекст на початку сесії
- Зберігати нові висновки в міру їхньої появи
- Відстежувати багатокрокові завдання між сесіями
- Спілкуватися з людьми через асинхронний чат
Архітектура
┌──────────────┐ recall/store ┌──────────┐
│ LLM Agent │ ◀──────────────▶ │ Synapse │
│ (your code) │ │ API │
└──────────────┘ └──────────┘
│
│ poll/reply
▼
┌──────────────┐
│ Human │ (browser or chat UI)
└──────────────┘Крок 1: Налаштуйте Mind Key
# Зареєструйтесь та отримайте JWT
JWT=$(curl -s -X POST https://synapse.schaefer.zone/register \
-H "Content-Type: application/json" \
-d '{"email":"agent@example.com","password":"secret"}' | jq -r .jwt)
# Створіть mind та отримайте Mind Key
MIND_KEY=$(curl -s -X POST https://synapse.schaefer.zone/minds \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"name":"persistent-agent","description":"My persistent agent"}' | jq -r .mind_key)
echo "Save this: $MIND_KEY"Крок 2: Протокол початку сесії
На початку кожної сесії відкличайте всі спогади:
import os
import requests
MIND_KEY = os.environ["SYNAPSE_MIND_KEY"]
URL = "https://synapse.schaefer.zone"
def session_start():
"""Call this at the start of every session."""
# 1. Відкликати всі спогади
r = requests.get(
f"{URL}/memory/recall",
headers={"Authorization": f"Bearer {MIND_KEY}"}
)
memories = r.text # текстове резюме
# 2. Перевірити непрочитані повідомлення чату
r = requests.get(
f"{URL}/chat/poll",
headers={"Authorization": f"Bearer {MIND_KEY}"}
)
messages = r.json().get("messages", [])
# 3. Перевірити завдання в процесі
r = requests.get(
f"{URL}/mind/tasks?status=in_progress",
headers={"Authorization": f"Bearer {MIND_KEY}"}
)
tasks = r.json().get("tasks", [])
return {
"memories": memories,
"unread_messages": messages,
"active_tasks": tasks,
}
context = session_start()
# Побудувати системний промпт із цим контекстомКрок 3: Зберігання нових висновків
Щоразу, коли агент дізнається щось варте запам'ятовування:
def remember(category, key, content, tags=None, priority="normal"):
"""Store a memory."""
requests.post(
f"{URL}/memory",
headers={
"Authorization": f"Bearer {MIND_KEY}",
"Content-Type": "application/json",
},
json={
"category": category,
"key": key,
"content": content,
"tags": tags or [],
"priority": priority,
}
)
# Приклади
remember("identity", "user_name", "User is Michael Schäfer",
tags=["person"], priority="critical")
remember("preference", "communication_style",
"User prefers concise technical responses",
tags=["communication"])
remember("project", "current_project",
"Building Synapse v1.6.0 with docs system",
tags=["synapse", "docs"], priority="high")
remember("mistake", "npm_version_bump",
"Always bump package.json version after changes",
tags=["npm", "ci"], priority="high")Крок 4: Керування завданнями
Відстежуйте багатокрокову роботу між сесіями:
def create_task(title, description="", priority="normal"):
r = requests.post(
f"{URL}/mind/task",
headers={"Authorization": f"Bearer {MIND_KEY}",
"Content-Type": "application/json"},
json={"title": title, "description": description, "priority": priority}
)
return r.json()["id"]
def update_task(task_id, status=None, description=None):
payload = {}
if status: payload["status"] = status
if description: payload["description"] = description
requests.put(
f"{URL}/mind/task/{task_id}",
headers={"Authorization": f"Bearer {MIND_KEY}",
"Content-Type": "application/json"},
json=payload
)
# Багатосесійний робочий процес
task_id = create_task("Deploy v1.6.0", "Push docs system to production", "high")
update_task(task_id, status="in_progress")
# ... робота через кілька сесій ...
update_task(task_id, status="done")Крок 5: Асинхронний чат з людьми
Опитуйте повідомлення між викликами інструментів:
import time
def poll_messages():
r = requests.get(
f"{URL}/chat/poll",
headers={"Authorization": f"Bearer {MIND_KEY}"}
)
return r.json().get("messages", [])
def reply(content):
requests.post(
f"{URL}/chat/reply",
headers={"Authorization": f"Bearer {MIND_KEY}",
"Content-Type": "application/json"},
json={"content": content}
)
# Головний цикл
while working:
# Опитати повідомлення від людини
for msg in poll_messages():
print(f"Human: {msg['content']}")
reply(f"Got it: {msg['content']}. Working on it.")
# Виконати одиницю роботи
do_work()
time.sleep(30) # не опитувати занадто частоКрок 6: Протокол кінця сесії
Наприкінці сесії зберігайте фінальний контекст:
def session_end():
"""Call this before terminating the session."""
# Зберегти, чого досягли
remember("context", "last_session_summary",
f"Session ended at {time.now()}. Accomplished: ...",
tags=["session"], priority="normal")
# Оновити статуси завдань
for task in get_active_tasks():
if task_in_progress(task):
update_task(task["id"], description=f"In progress: {current_step}")
session_end()Повний шаблон
class PersistentAgent:
def __init__(self):
self.mind_key = os.environ["SYNAPSE_MIND_KEY"]
self.url = "https://synapse.schaefer.zone"
def run(self):
# 1. Відкликати контекст
context = self.session_start()
# 2. Обробити непрочитані повідомлення
for msg in context["unread_messages"]:
self.handle_message(msg)
# 3. Продовжити активні завдання
for task in context["active_tasks"]:
self.continue_task(task)
# 4. Виконати нову роботу
self.do_work()
# 5. Зберегти стан
self.session_end()Найкращі практики
Наступні кроки
- Куховарська книга LLM — практичні шаблони
- Найкращі практики роботи з пам'яттю
- Координація кількох агентів