«Клюква» — автоматизация документации проектов на Python. ai assistant.. ai assistant. AST.. ai assistant. AST. langchain.. ai assistant. AST. langchain. llm.. ai assistant. AST. langchain. llm. pycharm.. ai assistant. AST. langchain. llm. pycharm. python.. ai assistant. AST. langchain. llm. pycharm. python. uml.. ai assistant. AST. langchain. llm. pycharm. python. uml. UML Design.. ai assistant. AST. langchain. llm. pycharm. python. uml. UML Design. документация.. ai assistant. AST. langchain. llm. pycharm. python. uml. UML Design. документация. искусственный интеллект.. ai assistant. AST. langchain. llm. pycharm. python. uml. UML Design. документация. искусственный интеллект. Подготовка технической документации.. ai assistant. AST. langchain. llm. pycharm. python. uml. UML Design. документация. искусственный интеллект. Подготовка технической документации. Текстовые редакторы и IDE.
«Клюква» — автоматизация документации проектов на Python - 1

Привет!

Меня зовут Алексей Фоменко.

Я разработчик из Нижнего Новгорода.

Сегодня хочу рассказать вам о своем сервисе “Клюква”.

Почему “Клюква” и “автоматизация документации”?

Ответ на самом деле простой — потому что мне это название нравится.

Оно вызывает улыбку, какие-то ассоциации, поднимает настроение.

А когда мы имеем дело с документацией, особенно с ее написанием, улыбка и настроение обычно пропадают…

Ну и вы наверняка слышали выражение “Развесистая клюква”.

Если что, в Википедии есть даже отдельная статья по этому поводу.

«Клюква» — автоматизация документации проектов на Python - 2

«Развесистая клюква» или просто «Клюква» в общем виде означает ложные или искаженные представления о чем‑либо.

Как раз здесь мы приходим к написанию документации.

К сожалению, составить и поддерживать документацию в актуальном состоянии — это проблема.

Скорее всего проблема в том числе и в вашей компании.

Здесь есть как субъективные факторы, когда не хватает кнутов и пряников, так и факторы объективные: новые бизнес задачи, выкатка новых фич, чем больше задач мы решаем, тем больше изменений вносится в проект, и, соответственно, тем быстрее устаревает документация.

И когда смотришь на весь этот процесс, который происходит постоянно, хочется его как‑то автоматизировать?

Именно это я попытался сделать с помощью сервиса «Клюква».

«Клюква» — автоматизация документации проектов на Python - 3

С помощью «Клюквы» вы можете:

  • строить диаграммы зависимостей, аналогичных UML

  • генерировать документацию, код, юнит тесты с использованием ИИ

  • задавать вопросы ИИ в контексте всего проекта или отдельного модуля

  • генерировать код на основе диаграмм зависимостей

Основные компоненты и принцип работы сервиса подробно описаны в инструкции.

Давайте посмотрим на примерах.

«Клюква» — автоматизация документации проектов на Python - 4

Перед вами одиниз модулей сервиса «Клюква». Желтым цветом обозначаются встроенные Python библиотеки, синим — сторонние библиотеки, ну а зеленым обозначаются модули самого проекта.

«Клюква» — автоматизация документации проектов на Python - 5

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

«Клюква» — автоматизация документации проектов на Python - 6
«Клюква» — автоматизация документации проектов на Python - 7
«Клюква» — автоматизация документации проектов на Python - 8

Диаграммы посмотрели, давай перейдем к генерации текста.

Текст документации создается по шаблону:

  • краткое описание модуля

  • описание классов и методов

  • описание зависимостей модуля

Генерация документации для модуля cranberrypy.core.assistant.ai

Генерация документации для модуля cranberrypy.core.assistant.ai

Также в «Клюкве» есть возможность работы с ИИ в формате вопрос‑ответ, при этом в контексте ИИ находится код всего проекта.

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

# cranberrypy/chat.py

MODULE_PATHS = """
/home/aleksei/development/cranberrypy/core/assistant/chains/base.py
/home/aleksei/development/cranberrypy/core/assistant/chains/custom_openai.py
/home/aleksei/development/cranberrypy/core/assistant/chains/factory.py
/home/aleksei/development/cranberrypy/core/assistant/chains/gemini.py
/home/aleksei/development/cranberrypy/core/assistant/chains/mistral.py
"""
Генерация документации для группы модулей cranberrypy.core.assistant.chains

Генерация документации для группы модулей cranberrypy.core.assistant.chains

Мы рассмотрели генерацию текста на основе текста.

Но в “Клюкве” есть возможность генерировать код на основе UML диаграмм.

Происходит это следующим образом:

  1. Вы рисуете диаграммы, в модулях пишите необходимые свойства или функции класса.

  2. Сохраняете диаграмму в JSON-файл.

  3. Отправляете путь к JSON-файлу в чат ИИ.

Выглядит примерно так.

Исходная диаграмма

Исходная диаграмма
# Генерация кода для класса Customer
# Сравните полученный ответ с описанием класса в UML диаграмме


# core/market/clients/customer.py
from core.market.clients.person import Person
from core.market.cards.card import Card
from core.market.products.product import Product
from core.market.discount.discount import Discount


class Customer(Person):
    """
    Represents a customer. Inherits from Person.

    Attributes:
        cards (list): List of the customer's cards.
        balance (float): The customer's balance.
        bucket (list): List of products in the customer's bucket.
    """

    def __init__(self, name: str, age: int, address: str, 
                 phone: str, cards: list = None, balance: float = 0.0):
        super().__init__(name, age, address, phone)
        self.cards = cards if cards is not None else []
        self.balance = balance
        self.bucket = []

    def get_cards(self) -> list:
        return self.cards

    def get_balance(self) -> float:
        return self.balance

    def get_bucket(self) -> list:
        return self.bucket

    def add_to_bucket(self, product: Product, quantity: int, 
                      discount: Discount = None) -> None:
        """
        Adds a product to the customer's bucket.

        Args:
            product (Product): The product to add.
            quantity (int): The quantity of the product to add.
            discount (Discount, optional): The discount to apply. Defaults to None.

        Raises:
            ValueError: If balance is insufficient, gross amount mismatch, or weight limit exceeded.
        """

        # Check balance and gross amount
        gross_amount = product.get_price() * quantity
        if discount:
            if discount.get_condition() in product.get_name():  # Assuming condition is based on product name
                gross_amount *= (1 - discount.get_percent())
        if self.balance < gross_amount:
            raise ValueError("Insufficient balance")

        # Check weight limit
        total_weight = product.get_weight() * quantity
        if total_weight > 5:
            raise ValueError("Weight limit exceeded (5 kg)")

        # Add to bucket
        self.bucket.append({'product': product, 'quantity': quantity, 
                            'gross_amount': gross_amount})
        self.balance -= gross_amount

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

PyCharm Professional vs Клюква

Чтобы понять плюсы и минусы сервиса, давайте сравним функционал «Клюквы» с одним из наиболее популярным инструментов для работы с кодом на Python — PyCharm.

В PyCharm Professional из под коробки доступны и построение диаграмм, и генерация кода, юнит тестов, комментариев с помощью AI Assistant.

Сравнивать будем по трем категориям:

  • построение диаграмм

  • генерация кода

  • генерация текста

Здесь я сразу оговорюсь, что у меня свой опыт использования PyCharm. Я прочитал инструкции. Что не смог сделать — пытался найти. Если вдруг я буду утверждать, что это невозможно, но вы знаете как, пожалуйста, напишите в комментарии. Будем вместе учиться.

Ну поехали.

Построение диаграммы

Плюсы:

  • На мой взгляд, основной плюс PyCharm в сравнении с “Клюквой” — всё встроено в одно IDE, не надо никуда ходить, заполнять конфиги, всё под рукой.

  • В PyCharm есть полноценный редактор, в котором можно изменять диаграммы, редактировать, переходить к источнику кода. Также очень крутая штука, что можно экспортировать диаграммы в разных форматах. В “Клюкве” только JSON.

  • Построение длинной цепочки зависимостей класса. В Клюкве отображаются прямые зависимости.

Минусы:

  • Полноценный редактор — это безусловно плюс, но это и минус. Он зачастую медленно работает и прогружает, особенно если много сущностей одновременно.

  • В PyCharm почему‑то отображаются только импорты.

  • В PyCharm невозможно переходить между объектами через диаграммы.

Итог:

Когда вам необходимо делать документацию, если прям необходимо рисовать‑рисовать, я бы наверно использовал PyCharm. А когда, например, проводить митинг или не надо много рисовать, то однозначно «Клюкву».

Генерация кода

Плюсы:

  • Удобство PyCharm — все встроено в IDE + окошко чата, что явный плюс. В «Клюкве» пока только командная строка.

Минусы:

  • В PyCharm из коробки отсутствует выбор LLM моделей. В «Клюкве» выбор моделей доступен, в том числе и запуск локально.

  • В PyCharm доступны несколько стандартных способ для быстрого создания промпта в ИИ, но нет возможности добавления новых шаблонов или их кастомизации. В «Клюкве» на уровне кода можно добавить любой промпт и настроить добавление контекста.

  • В случае текстового запроса преимущество «Клюквы» станет явным, когда вам необходимо использовать не один модуль, а сразу несколько. Достаточно указать пути к необходимым файлам (копировать‑вставить), и они подгрузятся в контекст.

  • В «Клюкве» доступна генерация кода на основе UML диаграмм, в PyCharm из коробки я не нашел.

Скажем честно, редактор UML диаграмм «Клюквы» сделан на коленке, поэтому говорить о полноценной работе функционала пока рано. Но это уже сейчас возможно, и я пробовал использовать редактор и последующую генерацию кода на коммерческих задачах. Пока не супер удобно, но помогает сократить время от обсуждения архитектуры до написания кода, так как то, что вы только что обсудили с коллегами можно тут же закинуть в ИИ и получить шаблоны вашего будущего сервиса.

Итог:

Если необходимо сгенерить небольшой код прямо здесь и сейчас — PyCharm.

Для более сложных задач, особенно при необходимости подключения контекста или обеспечения конфиденциальности данных — «Клюква».

Генерация текста

Плюсы:

  • Удобство PyCharm.

Минусы:

  • Отсутствие выбора LLM моделей.

  • Нет возможности добавления новых шаблонов или их кастомизации.

  • В «Клюкве» удобнее генерить общую документацию в README или для базы знаний, так как есть возможность работы сразу с несколькими модулями и кастомизировать шаблон документации.

  • Помимо кода и диаграмм зависимостей, в «Клюкву» несложно самостоятельно подключить любой необходимый вам контекст, будто файлы README, Confluence, Jira и тд.

Итог:

Быстро и для небольших задач — PyCharm, в остальных ситуациях — «Клюква».

Здесь самое время вспомнить про анекдот времен запуска ChatGPT

Профессия «промпт‑инженер» не успела появиться, как ее уже автоматизировали.

Да, именно это и делает «Клюква». На основе выбранных вами модулей динамически формируется целая портянка запроса плюс добавляется необходимый контекст.

В PyCharm и AI Assistant в данный момент нет возможности автоматизировать сложные промпты, но, я надеюсь подобный функционал появится в будущем.

Может быть даже благодаря «Клюкве» ;-)

Кстати, о планах.

Цель данной статьи не только порекламировать новый сервис для автоматизации документации, а в первую очередь найти людей, кто готов поучаствовать в его разработке.

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

А между тем идеи для развития «Клюквы» есть.

Начнем от более реалистичных и наименее затратных до сложных, но перспективных:

  1. сделать UI в браузере

  2. написать расширение для IDE

  3. включить сервис в систему CI/CD

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

Если вам лично или вашей компании будет интересно решить какую‑нибудь из этих задач, буду рад помочь и поучаствовать.

Если у вас есть идеи или предложения — пишите fomenko_ai@proton.me, обсудим.

Благодарю за внимание!

Автор: fomenko_ai

Источник

Рейтинг@Mail.ru
Rambler's Top100