Skip to main content

Створення постійного 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()

Найкращі практики

Наступні кроки