Виммельбух, 3, перетяжка
Виммельбух, 3, перетяжка
Виммельбух, 3, перетяжка

Codeium: автодополнение кода при помощи AI

Рассказываем про Codeium — AI-инструменте, который дополняет код вместо разработчика. Показываем примеры на коде Python.

8К открытий10К показов

Всем привет! Меня зовут Тимофей, я Python Engineer с опытом в 3+ года.

Сейчас происходит быстрый рост популярности различных AI-инструментов, начиная с ChatGPT и заканчивая расширениями для IDE и редакторов кода. Именно сегодня мы поговорим об одном из таких расширений, встречайте: Codeium: AI Coding Autocomplete for Python, Javascript, Typescript, Java, Go, and more.

Ремарка: Все примеры из статьи написаны на языке Python.

Данный инструмент умеет автодополнять код на основе ваших комментариев. Работает это примерно так: вы начинаете писать комментарий, например Create a class called User, и после этого плагин начинает предлагать вам автодополнение:

После, соглашаемся на следующие автодополнения, объявляем класс Class User:, нажимаем Tab и происходит магия! Получаем следующий сниппет:

На всякий случай, буду оставлять исходный код:

			# Create a class called User. Create two attributes called first_name and last_name, and then create
# several other attributes that are typically stored in a user profile.
class User:
    def __init__(self, first_name, last_name, age, gender):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.gender = gender

    def describe_user(self):
        print("The user's name is " + self.first_name + " " + self.last_name)
        print("The user's age is " + str(self.age))
        print("The user's gender is " + self.gender)

    def greet_user(self):
        print("Hello, " + self.first_name + " " + self.last_name)
		

Весьма неплохо! Мы получили базовую конструкцию на основе указанных в комментарии классовых атрибутов.

Но все не так радужно, как могло бы показаться на первый взгляд. К сожалению, плагин не умеет работать со сторонними библиотеками(что не удивительно), следовательно не умеет в автоимпорты. Вот, например, что я получил при запросе Create dataclass User:

			# Create dataclass User with first_name, last_name, email, password, created_at, updated_at
@dataclass
class User:
    first_name: str
    last_name: str
    email: str
    password: str
    created_at: datetime
    updated_at: datetime

    def __init__(self, first_name, last_name, email, password, created_at, updated_at):
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.password = password
        self.created_at = created_at
        self.updated_at = updated_at
		

В Python dataclass — это класс, предназначенный только для хранения значений данных. Они ничем не отличаются от обычных классов, но обычно не имеют других методов. Чаще всего они используются для хранения информации, которая будет передаваться между различными частями программы или системы.

То есть, по факту я не хотел инициализировать никаких атрибутов, потому что это бессмысленно. В реальной задаче я бы установил нужную библиотеку и использовал декоратор @dataclass-json для хранения данных в json формате и передавал бы эти данные дальше по функциям.

Попробуем еще. Попросим создать все тот же класс User, но с указанием type hints у атрибутов и методов:

			# Create a class called User. Create two attributes called first_name and last_name, and then create
# several other attributes that are typically stored in a user profile.
# Also use python type hints to define what kind of information you want to store for each attribute.

class User:
    def __init__(self, first_name, last_name, age, city):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.city = city

    def describe_user(self):
        print(f"\n{self.first_name.title()} {self.last_name.title()} is {self.age} years old and lives in {self.city.title()}.")

    def greet_user(self):
        print(f"\nHello, {self.first_name.title()} {self.last_name.title()}!")
		

Чуда не произошло. Да, плагин не умеет работать с питоновскими тайп хинтами.

Для меня это было ожидаемо. Давайте в последний раз попробуем сгенерировать что-нибудь интересное, используя плагин. Например простую функцию, которая будет принимать список и возвращать новый список с уникальными элементами из первого:

			# Create a function that takes a list and returns a new list with unique elements of the first list.

def unique_list(lst):
    return list(set(lst))

print(unique_list([1,1,1,1,2,2,3,3,3,3,4,5])) # => [1, 2, 3, 4, 5]
print(unique_list([1,1,1,1,2,2,3,3,3,3,4,5])) # => [1, 2, 3, 4, 5]
print(unique_list([1,1,1,1,2,2,3,3,3,3,4,5,5,5,5])) # => [1, 2, 3, 4, 5]
		

А вот это уже будет поинтереснее! Плагин сгенерировал рабочий код и даже мини-тесты написал ?

Данный плагин позиционирует себя примерно так:

Нужно внести изменения в незнакомый язык или кодовую базу? Вместо того, чтобы тратить часы на изучение всех синтаксических и стилистических деталей, пишите комментарии на естественном языке и позвольте Codeium сделать свою работу.

После того, как я покопался в плагине все встало на свои места. Не нужно ожидать, что при помощи данного инструмента вы сможете генерировать какие-то сложные конструкции или же использовать сторонние библиотеки.

Я думаю, что плагин отлично справляется с генерацией базовых шаблонов. Например, вы можете описать классовые атрибуты или же функцию и что она должна возвращать. Codeium сгенерирует базовый сниппет с готовым кодом за вас.

На мой взгляд инструмент достаточно интересный, а что главное доступный для всех и не требующий танцев с бубном при установке. Впрочем, можете установить данное расширение для своей IDE и пощупать его сами.

Также, хотел отметить, что на сайте продукта есть интересное и подробное сравнение работы самого плагина с похожими инструментами, вроде Github Copilot или же tabnine.

Установить плагин вы можете тут.

Благодарю за внимание! Если вам понравилась статья, приглашаю подписаться на мой новый телеграм-канал, в котором я рассказываю о закулисье ИТ и разработке на Python глазами практикующего инженера.

Следите за новыми постами
Следите за новыми постами по любимым темам
8К открытий10К показов