/
Вопросы и ответы
/
AI-агенты
/

Чем агент отличается от обычного LLM-вызова?

Чем агент отличается от обычного LLM-вызова?

12 часов назад

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

Ответы

0

Чем агент отличается от обычного LLM-вызова

Обычный LLM-вызов — это один запрос и один ответ. Ты отправляешь промпт, модель генерирует текст, всё.

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


Обычный вызов:

from anthropic import Anthropic

client = Anthropic()

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Сколько файлов в проекте?"}]
)

print(response.content[0].text)
# → "Я не знаю, у меня нет доступа к вашей файловой системе."

Модель ответила — и всё. Она не может пойти и проверить.


Агент с инструментом:

import subprocess
from anthropic import Anthropic

client = Anthropic()

tools = [{
    "name": "count_files",
    "description": "Считает файлы в директории",
    "input_schema": {
        "type": "object",
        "properties": {
            "path": {"type": "string", "description": "Путь к директории"}
        },
        "required": ["path"]
    }
}]

messages = [{"role": "user", "content": "Сколько файлов в проекте?"}]

while True:
    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        tools=tools,
        messages=messages
    )

    # Модель решила вызвать инструмент
    if response.stop_reason == "tool_use":
        tool_call = next(b for b in response.content if b.type == "tool_use")

        # Выполняем инструмент
        result = subprocess.run(
            ["find", tool_call.input["path"], "-type", "f"],
            capture_output=True, text=True
        )
        file_count = len(result.stdout.strip().split("\n"))

        # Добавляем результат в историю и продолжаем
        messages.append({"role": "assistant", "content": response.content})
        messages.append({
            "role": "user",
            "content": [{"type": "tool_result", "tool_use_id": tool_call.id,
                         "content": str(file_count)}]
        })

    # Модель дала финальный ответ
    elif response.stop_reason == "end_turn":
        print(response.content[0].text)
        # → "В проекте 47 файлов."
        break

В чём принципиальная разница

Обычный вызов — модель генерирует текст на основе того, что знает. Агент — модель действует: ходит за данными, выполняет операции, проверяет результат.

Это меняет класс задач. Обычный вызов подходит для «объясни», «напиши», «переведи». Агент нужен для «сделай», «найди», «проверь и исправь».

Цена этого — непредсказуемость. Агент делает несколько шагов, и ошибка на любом шаге влияет на следующий. Чем длиннее цепочка — тем важнее хорошие инструменты и чёткие описания к ним.

12 часов назад

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

+7 800 100 22 47

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

+7 495 085 21 62

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

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