Вызов инструментов: выбор делает модель, выполняет программа
При вызове инструментов (function calling) модель вместо текста ответа указывает имя инструмента и аргументы в структурированном виде, например {"vosita": "qosh", "args": [2, 3]}. Программа читает этот текст, запускает нужную функцию и возвращает результат модели.
import json
def qosh(a, b):
return a + b
chaqiriq = json.loads("""{"vosita": "qosh", "args": [2, 3]}""")
print(qosh(*chaqiriq["args"]))Результат5В примере ниже json.loads превращает текст вызова в словарь, а * передаёт значения из списка в функцию как отдельные аргументы. Если инструменты хранятся в словаре, их легко находить по имени.
Безопасность: выполняйте только заранее зарегистрированные инструменты; неизвестное имя отклоняйте. Никогда не выполняйте без разрешения действия, не относящиеся к вызванной функции (например, удаление файлов).
Запомните
- Модель называет инструмент и аргументы, программа выполняет.
json.loadsпревращает текст вызова в словарь;*argsраспаковывает аргументы.- Выполняйте только зарегистрированные инструменты.
Упражнение
Модель назвала инструмент, которого нет в списке. Что должна сделать программа?
Ответ и пояснение
- Отклонить вызов и вернуть понятное сообщение. (верный ответ)выполнять неизвестный вызов опасно.
- Найти в системе команду с таким именем и выполнить.это дыра в безопасности.
- Аварийно остановиться.лучше контролируемое сообщение, чем сбой.
Упражнения с кодом
- Напишите функцию
bajar(chaqiriq_matn): она читает JSON-текст; если инструмент есть в списке, вызывает его сargsи возвращает результат, иначе возвращаетvosita topilmadi.
Подсказка: Откройте черезjson.loads; проверьтеnom not in VOSITALAR; вызов:VOSITALAR[nom](*d["args"]). - Функция
vosita_xabari(nom, natija)должна вернуть словарь:rol=vosita,vosita= nom,matn= текстовый вид результата.
Подсказка: Число превратите в текст черезstr(natija).
Выполните упражнение в приложении.
Практическое задание
Добавьте ещё один инструмент (например, умножение двух чисел) и проверьте его текстом вызова.
- Добавил инструмент
- Проверил текстом вызова
Словарь
Интерактивный режим: поиск, прогресс и упражнения на Python.
