/
Вопросы и ответы
/
Промт-инжиниринг
/

Prompt chaining vs агенты: когда что использовать?

Prompt chaining vs агенты: когда что использовать?

9 часов назад

Никита Вихров

Ответы

0

Prompt chaining vs агенты: когда что использовать

Два паттерна решают похожие задачи по-разному. Prompt chaining — заранее заданная последовательность вызовов. Агент — модель сама решает что делать дальше. Выбор между ними влияет на предсказуемость, стоимость и сложность отладки.


Prompt chaining: ты управляешь потоком

Последовательность шагов жёстко задана в коде. Модель не решает что делать — только выполняет конкретный шаг:

from anthropic import Anthropic

client = Anthropic()


def translate_and_improve(text: str, target_lang: str = "english") -> dict:
    """Цепочка: перевод → улучшение стиля → проверка"""

    # Шаг 1: перевод
    translation = client.messages.create(
        model="claude-haiku-4-5",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": f"Переведи на {target_lang}:\n\n{text}"
        }]
    ).content[0].text

    # Шаг 2: улучшение стиля (вход = выход предыдущего шага)
    improved = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=1024,
        system="Улучшай стиль текста: делай его более естественным для носителя языка.",
        messages=[{
            "role": "user",
            "content": translation
        }]
    ).content[0].text

    # Шаг 3: проверка качества
    quality_check = client.messages.create(
        model="claude-haiku-4-5",
        max_tokens=256,
        messages=[{
            "role": "user",
            "content": f"""Оригинал: {text}
Перевод: {improved}

Оцени точность перевода: high/medium/low. Только одно слово."""
        }]
    ).content[0].text.strip()

    return {
        "original": text,
        "translation": improved,
        "quality": quality_check
    }

Поток всегда одинаковый: шаг 1 → шаг 2 → шаг 3. Модель не может пропустить или добавить шаг.


Агент: модель управляет потоком

Модель сама решает какие инструменты вызвать и сколько раз:

tools = [
    {
        "name": "translate",
        "description": "Переводит текст на указанный язык",
        "input_schema": {
            "type": "object",
            "properties": {
                "text": {"type": "string"},
                "target_language": {"type": "string"}
            },
            "required": ["text", "target_language"]
        }
    },
    {
        "name": "check_grammar",
        "description": "Проверяет грамматику текста и возвращает исправления",
        "input_schema": {
            "type": "object",
            "properties": {"text": {"type": "string"}},
            "required": ["text"]
        }
    },
    {
        "name": "detect_language",
        "description": "Определяет язык текста",
        "input_schema": {
            "type": "object",
            "properties": {"text": {"type": "string"}},
            "required": ["text"]
        }
    }
]


def agent_translate(task: str) -> str:
    messages = [{"role": "user", "content": task}]

    for _ in range(10):
        response = client.messages.create(
            model="claude-sonnet-4-5",
            max_tokens=1024,
            tools=tools,
            messages=messages
        )

        if response.stop_reason == "end_turn":
            return response.content[0].text

        # Агент сам выбирает инструменты и порядок
        # Может сначала определить язык, потом перевести, потом проверить грамматику
        # Или пропустить шаги если не нужны
        for block in response.content:
            if block.type == "tool_use":
                result = execute_tool(block.name, block.input)
                messages.append({"role": "assistant", "content": response.content})
                messages.append({
                    "role": "user",
                    "content": [{"type": "tool_result", "tool_use_id": block.id, "content": result}]
                })
                break

    return "Лимит шагов исчерпан"

Сравнение на практике

Задача: "Переведи этот текст на английский и исправь грамматику" Prompt chaining: Шаг 1: detect_language → "russian" Шаг 2: translate → "english text" Шаг 3: check_grammar → "corrected text" Всегда 3 шага, предсказуемо, дёшево Агент: Думает: "Текст на русском, нужно перевести" Вызывает: translate(text, "english") Думает: "Перевод готов, нужно проверить грамматику" Вызывает: check_grammar(translated_text) Думает: "Всё готово" Отвечает: финальный текст Те же 3 шага, но агент мог добавить или пропустить шаги по ситуации

Когда что выбирать

# Используй prompt chaining когда:
USE_CHAINING = [
    "Шаги всегда одинаковые и известны заранее",
    "Нужна максимальная предсказуемость",
    "Критична стоимость — chaining дешевле",
    "Простая отладка важнее гибкости",
    "Каждый шаг нужно логировать/мониторить отдельно",
]

# Используй агентов когда:
USE_AGENTS = [
    "Шаги зависят от результатов предыдущих шагов",
    "Заранее неизвестно сколько итераций нужно",
    "Нужно адаптироваться к неожиданным ситуациям",
    "Задача требует инструментов с реальными данными",
    "Сложная задача которую сложно декомпозировать заранее",
]

Практическое правило: начни с chaining. Если видишь что нужно ветвление или непредсказуемое количество шагов — переходи к агенту.

Их также комбинируют: агент управляет общим потоком, а каждый инструмент внутри — небольшая chaining-цепочка.


На курсе «ИИ для разработчиков» на Хекслете разбирают оба подхода на реальных задачах — и когда какой применять в продакшне.

9 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845