🛠️ Кастомные инструменты 🧮
(🧑🏿🦱 или задача про 10 негритят
                                  функций)
                                В этой и следующей задаче мы создадим агента со своими собственными математическими инструментами и используем его для решения нескольких примеров.
                                  В текущей задаче вам нужно реализовать инструменты с помощью декоратора
                                  @tool
                                
Не забывайте в каждую функцию обязательно добавлять описание
                                  (docstring), чтобы агент понимал для чего её нужно применять!
Вот список функций, которые вам нужно реализовать:
- 
                                    add_numbers(num1, num2)- Складывает два числа
- 
                                    convert_meters_to_cm(num)- Переводит метры в сантиметры
- 
                                    convert_cubic_cm_to_liters(num)- Переводит кубические сантиметры в литры
- 
                                    compute_rectangle_perimeter(a, b)- Вычисляет периметр прямоугольника
- 
                                    compute_circle_area(radius)- Вычисляет площадь круга
- 
                                    compute_cylinder_volume(radius, height)- Вычисляет объем цилиндра
- 
                                    compute_cube_volume(a)- Вычисляет объем куба
- 
                                    convert_binary_to_decimal(binary_number: str)- Переводит число из двоичной системы счисления в десятичную систему счисления
- 
                                    convert_decimal_to_binary(decimal_number)- Переводит число из десятичной системы счисления в двоичную систему счисления.
- 
                                    get_count_ones(number: str)- Находит количество единиц в двоичном представлении числа.
Функции, которые реализованы как пример, не удаляйте их, но можете изменить при желании:
- 
                                    compute_arc_length(radius, angle_in_degrees)- Вычисляет длину дуги по радиусу и углу в градусах
- 
                                    compute_triangle_area(a, b, c)- Вычисляет площадь треугольника по формуле Герона
После объявления всех функций, поместите их в список tools.
При отправлении решения, не используйте подключение langchain. Считайте,
                                  что строка from langchain.agents import tool уже выполнена и вы уже
                                  можете использовать нужный декоратор.
P.S. Не забывайте, что всегда можно попросить помощи в написании функций у
                                    ChatGPT.
Не могу понять в чем проблема?
мой код:
from math import pi
from functools import wraps
def tool(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
# 2 реализованные функции, как пример
@tool
def compute_arc_length(radius, angle_in_degrees):
"""Вычисляет длину дуги по радиусу и углу в градусах"""
return (angle_in_degrees / 360) * 2 * math.pi * radius
@tool
def compute_triangle_area(a, b, c):
"""Вычисляет площадь треугольника по длинам его сторон"""
s = (a + b + c) / 2
return math.sqrt(s * (s - a) * (s - b) * (s - c))
@tool
def add_numbers(num1, num2):
"""
Adds two numbers.
:param num1: The first number.
:param num2: The second number.
:return: The sum of num1 and num2.
"""
return num1 + num2
@tool
def convert_meters_to_cm(num):
"""
Converts meters to centimeters.
:param num: The number in meters.
:return: The number in centimeters.
"""
return num * 100
@tool
def convert_cubic_cm_to_liters(num):
"""
Converts cubic centimeters to liters.
:param num: The number in cubic centimeters.
:return: The number in liters.
"""
return num / 1000
tools = [
add_numbers,
convert_meters_to_cm,
convert_cubic_cm_to_liters,
compute_rectangle_perimeter,
compute_circle_area,
compute_cylinder_volume,
compute_cube_volume,
convert_binary_to_decimal,
convert_decimal_to_binary,
get_count_ones,
compute_arc_length,
compute_triangle_area
]
выдает ошибку: Failed. Runtime error Error: Traceback (most recent call last): File "jailed_code", line 187, in <module> assert False, f"Подсказка: Функция {func.__name__} не использует декоратор @tool" AssertionError: Подсказка: Функция add_numbers не использует декоратор @tool
@Timur_Muratov, нe нужно переопределять декоратор tool