Схемы инструментов и функций
Схемы для вызова функций
«Схемы инструментов и функций» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.
Инструменты — это схемы и намерение
Вызов функций позволяет модели запросить выполнение действия вашим кодом. Каждый инструмент объявляется с именем, описанием (когда его использовать) и схемой JSON для его параметров.
Модель никогда не запускает код; она выдаёт структурированный запрос на вызов, который ваша среда выполнения направляет на обработку. Именно схема делает аргументы пригодными для разбора.
Строение определения инструмента
Определение инструмента — это объявление возможности, обёрнутое в схему.
{
'type': 'function',
'function': {
'name': 'get_weather',
'description': 'Get current weather for a city. Use when the user asks about weather.',
'parameters': {
'type': 'object',
'properties': {
'city': {'type': 'string'},
'units': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}
},
'required': ['city', 'units'],
'additionalProperties': False
}
}
}Выбор определяется описанием
Когда доступно много инструментов, модель выбирает их главным образом на основе описания. Пишите описания как правила принятия решений:
- Указывайте, когда использовать инструмент, а когда не использовать.
- Отличайте его от родственных инструментов.
- Упоминайте необходимые предварительные условия.
Плохие описания чаще приводят к выбору неправильного инструмента, чем плохие схемы — к ошибкам аргументов.
Цикл «вызов — выполнение — возврат»
Вызов функций выполняется в несколько ходов. Модель выдаёт вызов, вы выполняете его, добавляете результат с помощью append, и модель продолжает работу.
resp = client.chat.completions.create(model='gpt-4o', messages=msgs, tools=tools)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append(resp.choices[0].message)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps(result)})
# call the model again to continue with the tool resultПараллельные вызовы инструментов
Современные модели могут запрашивать несколько вызовов инструментов за один ход, если действия независимы. Ваша среда выполнения должна перебрать все tool_calls, выполнить их (по возможности параллельно) и вернуть одно сообщение инструмента для каждого tool_call_id.
Никогда не предполагайте наличие единственного вызова; всегда используйте цикл.
for call in resp.choices[0].message.tool_calls:
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps(result)})Принудительное применение и ограничение инструментов
Управляйте выбором с помощью tool_choice:
auto— модель решает.required— необходимо вызвать какой-либо инструмент.{name: ...}— принудительно выбрать конкретный инструмент.none— отключить инструменты на этот ход.
Принудительный выбор конкретного инструмента превращает вызов функций в обычное структурированное извлечение.
client.chat.completions.create(
model='gpt-4o', messages=msgs, tools=tools,
tool_choice={'type': 'function', 'function': {'name': 'get_weather'}}
)Проверяйте аргументы перед выполнением
Даже при строгих схемах рассматривайте аргументы инструмента как ненадёжные входные данные. Повторно проверьте их по схеме и примените бизнес-правила, прежде чем обращаться к реальным системам (базам данных, платежам, удалению файлов).
def dispatch(name, args):
schema = TOOLS[name]['function']['parameters']
jsonschema.validate(args, schema) # defense in depth
if name == 'refund' and args['amount'] > MAX_AUTO_REFUND:
return {'error': 'requires human approval'}
return HANDLERS[name](**args)Ошибки инструментов — часть протокола
Если инструмент завершается ошибкой, верните структурированную ошибку как результат инструмента, а не выбрасывайте исключение. Тогда модель сможет извиниться, повторить попытку с исправленными аргументами или выбрать другой инструмент.
Делайте ошибки понятными для исправления: указывайте причину и, если это безопасно, совет по восстановлению.
{'status': 'error',
'code': 'CITY_NOT_FOUND',
'message': 'No city named Xyz. Ask the user to clarify the city.'}Сохраняйте набор инструментов небольшим
Десятки инструментов снижают точность выбора и увеличивают стоимость токенов (каждая схема присутствует в контексте на каждом ходу). Возможные меры:
- Объединяйте связанные действия за одним инструментом с перечислением
action. - Динамически предоставляйте только инструменты, относящиеся к текущему состоянию.
- Используйте пространства имён, чтобы уменьшить путаницу между похожими инструментами.
Усиление схемы для побочных эффектов
Для деструктивных операций закладывайте безопасность в саму схему: требуйте явное поле подтверждения, ограничивайте диапазоны и вместо идентификаторов в свободной форме используйте перечисления или шаблоны с проверкой.
{
'name': 'delete_records',
'parameters': {
'type': 'object',
'properties': {
'table': {'type': 'string', 'enum': ['logs', 'temp_cache']},
'confirm': {'type': 'boolean'},
'max_rows': {'type': 'integer', 'minimum': 1, 'maximum': 1000}
},
'required': ['table', 'confirm', 'max_rows'],
'additionalProperties': False
}
}Проверка определений инструментов
Рассматривайте выбор инструмента как измеримое поведение. Составьте набор запросов для оценки, сопоставленных с ожидаемым инструментом и аргументами, а затем проверяйте, что модель выбирает их правильно. Отслеживайте регрессии, когда меняете формулировки описаний или добавляете новые инструменты.
cases = [
{'prompt': 'Whats it like in Paris?', 'expect_tool': 'get_weather'},
{'prompt': 'Convert 10 USD to EUR', 'expect_tool': 'fx_convert'}
]
for c in cases:
assert run(c['prompt']).tool_name == c['expect_tool']Быстрая проверка
Модель выдаёт два независимых вызова инструментов в одном сообщении ассистента. Что должна сделать ваша среда выполнения?
Итоги
Схемы инструментов и функций на практике:
- Описания определяют выбор, а схемы — аргументы, пригодные для разбора.
- Обрабатывайте все вызовы инструментов в цикле и поддерживайте параллельное выполнение.
- Управляйте поведением с помощью выбора инструмента; принудительно выбирайте инструмент для простого извлечения данных.
- Перепроверяйте аргументы и возвращайте структурированные ошибки.
- Сократите набор доступных инструментов и усильте защиту деструктивных операций.
Далее: циклы исправления и проверки на случай, если результат всё ещё получается неверным.
Часто задаваемые вопросы
Урок «Схемы инструментов и функций» бесплатный?
Да — полный текст урока «Схемы инструментов и функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.
Чему я научусь в уроке «Схемы инструментов и функций»?
Схемы для вызова функций Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Prompt Engineering?
Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Схемы инструментов и функций»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Prompt Engineering?
Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужен структурированный вывод
- JSON Schema в подсказках
- Схемы инструментов и функций
- Циклы исправления и проверки