Цифра.Портал
Агенты

Агенты на Claude: системный промпт, инструменты, память

Продвинутый18 мин

Как строить автономных агентов на Claude API. Разбираем системный промпт, tool use, управление контекстом и паттерны для production-агентов.

Что такое агент

Агент — это языковая модель + инструменты + цикл исполнения. Модель решает, какой инструмент вызвать, получает результат и продолжает до завершения задачи.

[задача] → модель → [выбор инструмента] → [исполнение] → [результат] → модель → …

Системный промпт агента

Хороший системный промпт для агента содержит:

1. Роль и цель

# Роль
Ты — автономный агент «Исследователь».
Твоя задача: находить и структурировать информацию по запросу пользователя.

2. Инструменты

# Доступные инструменты
- web_search(query) — поиск в интернете
- read_url(url) — чтение страницы по URL
- save_note(title, content) — сохранение заметки

3. Правила исполнения

# Правила
- Докладывай каждый шаг в формате: [ШАГ N] Действие
- Не придумывай данные — только из источников
- Завершай явным выводом: РЕЗУЛЬТАТ: ...
- Максимум 10 шагов

Tool Use в Claude API

import anthropic

client = anthropic.Anthropic()

tools = [
    {
        "name": "web_search",
        "description": "Search the web for information",
        "input_schema": {
            "type": "object",
            "properties": {
                "query": {"type": "string", "description": "Search query"}
            },
            "required": ["query"]
        }
    }
]

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=4096,
    tools=tools,
    messages=[{"role": "user", "content": "Find top AI news today"}]
)

Управление контекстом

У агентов есть проблема: контекст конечен, а задача может быть длинной.

Паттерн «внешняя память»

Сохраняйте промежуточные результаты вне контекста (в файл, БД), и подгружайте только нужное:

[Агент] → [save_note()] → [БД заметок]
[Агент] → [list_notes()] → [загрузить нужные]

Паттерн «сжатие истории»

Раз в N шагов просите модель сжать историю работы:

«Summarize what you've done so far in 200 words»

И заменяйте историю этим резюме.

Production-паттерны

Retry с backoff

Инструменты могут падать. Всегда оборачивайте вызовы:

import time

def call_with_retry(fn, max_retries=3):
    for i in range(max_retries):
        try:
            return fn()
        except Exception as e:
            if i == max_retries - 1:
                raise
            time.sleep(2 ** i)

Ограничение шагов

Агент без ограничений может зациклиться. Добавьте счётчик:

MAX_STEPS = 15
steps = 0

while not done and steps < MAX_STEPS:
    response = call_claude(...)
    steps += 1
На странице
связанные промпты