🛠️ Кастомные инструменты 🧮
(🧑🏿🦱 или задача про 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