Как описать инструмент модели

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

Описание инструмента — структурированная карточка (имя, описание на естественном языке, схема параметров), по которой LLM понимает, что инструмент делает и как его вызвать.

Три части описания

  • Имя — короткий идентификатор, например get_weather. Модель указывает его, когда хочет вызвать инструмент.
  • Описание — фраза на естественном языке: что делает инструмент и когда его применять. Это самая важная часть: по ней модель решает, брать инструмент или нет.
  • Схема параметров — какие аргументы нужны, их типы и какие обязательны. Обычно в формате JSON Schema.

Пример схемы

Так выглядит типичное описание инструмента, которое отдают модели (формат function calling). Это просто данные — соберём их в Python и выведем как JSON.

import json

tool = {
    "name": "get_weather",
    "description": "Возвращает текущую погоду в указанном городе. "
                   "Используй, когда пользователь спрашивает про погоду.",
    "parameters": {
        "type": "object",
        "properties": {
            "city": {"type": "string", "description": "Название города"},
            "units": {"type": "string", "enum": ["c", "f"],
                      "description": "Единицы температуры"},
        },
        "required": ["city"],
    },
}

print(json.dumps(tool, ensure_ascii=False, indent=2))
print("---")
print("Имя:", tool["name"])
print("Обязательные параметры:", tool["parameters"]["required"])

Вывод:

{
  "name": "get_weather",
  "description": "Возвращает текущую погоду в указанном городе. Используй, когда пользователь спрашивает про погоду.",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "Название города"
      },
      "units": {
        "type": "string",
        "enum": [
          "c",
          "f"
        ],
        "description": "Единицы температуры"
      }
    },
    "required": [
      "city"
    ]
  }
}
---
Имя: get_weather
Обязательные параметры: ['city']

Как выглядит вызов в API

В настоящем function calling вы передаёте список таких описаний модели, а она в ответ возвращает не текст, а структуру «хочу вызвать инструмент X с аргументами Y». Это нельзя запустить в браузере (нужен ключ и сеть), поэтому показываем как текст.

// что вернёт модель (упрощённо):
{
  "tool_call": {
    "name": "get_weather",
    "arguments": { "city": "Москва", "units": "c" }
  }
}
// ваш код выполняет get_weather("Москва", "c") и
// возвращает результат модели следующим сообщением

Что делает описание хорошим

  • Понятное «когда применять» — модель чаще ошибается с выбором инструмента, чем с аргументами. Опишите границы: «используй для X, не используй для Y».
  • Говорящие имена параметровcity лучше, чем p1.
  • Перечисления (enum) там, где значений мало, — это снижает число ошибок.
  • Минимум обязательных параметров — чем меньше модель должна угадать, тем надёжнее вызов.

Частые ошибки

  • Слишком общее описание («работает с данными») — модель не понимает, когда брать инструмент.
  • Два инструмента с похожими описаниями — модель путает их.
  • Сложная вложенная схема — модель чаще ошибается в аргументах.

Итог

  • Модель видит инструмент только через описание: имя + текст «что и когда» + схема параметров.
  • Текст описания важнее всего: по нему модель решает, применять ли инструмент.
  • Делайте описания однозначными, имена говорящими, схему простой, обязательных параметров — минимум.
Проверьте себя
1. Какая часть описания инструмента сильнее всего влияет на то, выберет ли модель этот инструмент?
AИмя инструмента
BТекстовое описание «что делает и когда применять»
CТип возвращаемого значения
DПорядок параметров
2. Зачем в схеме параметров использовать enum (перечисление допустимых значений)?
AЧтобы ускорить вызов
BЧтобы ограничить значение набором вариантов и снизить число ошибок модели
CЭто обязательное поле JSON Schema
DЧтобы спрятать параметр от модели
3. Почему два инструмента с похожими описаниями — это проблема?
AОни занимают больше памяти
BМодель путает их и может вызвать не тот
CAPI запрещает дубликаты имён
DЭто удваивает стоимость
Поддержать проект