GigaCode: как ИИ-ассистент упрощает жизнь системным аналитикам

Сценарии применения ИИ-ассистента в работе системного аналитика

Здравствуйте! Меня зовут Щедрин Николай, и я являюсь ведущим аналитиком продукта GigaCode от Сбер. Хочу поделиться с вами сценариями применения ИИ-ассистента в работе системного аналитика, которые использую сам. Надеюсь, статья позволит вам посмотреть на привычные вещи под другим углом и побудит поделиться своими мыслями, идеями и предложениями о применении ИИ-ассистентов в вашей профессиональной деятельности.

Если вы системный аналитик, эта статья — ваш must read. Остальным коллегам (разработчикам, архитекторам, владельцам продукта) будет полезно узнать, как ИИ-инструменты выходят за рамки генерации кода и помогают проектировать системы.

А ещё здесь есть мемы от Kandinsky — куда же без них?

Media content

Бесконечная вселенная мемов

Media content

Как ИИ это придумывает?

Немного о GigaCode (нескрытая реклама)

В конце 2023 года мы запустили первый разработанный в России ИИ-ассистент разработчика — GigaCode. За год он научился не только генерировать код, но и стал настоящим «швейцарским ножом» для команд: 30 миллионов принятых строк кода в режиме inline-подсказок, появился встроенный чат с ИИ-ассистентом (CodeChat — не путать с GigaChat) и поддержка новых сценариев (например, объяснение кода и создание документации).

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

Прежде всего, давайте определим основные роли, которые обычно присутствуют в стандартной команде по разработке ИТ-продукта. Совершенно очевидно, что в команде должен быть владелец продукта (ВП) или продукт-менеджер (ПM), нескольких разработчиков, архитектор, QA-инженер, системный аналитик (СА), специалист по DevOps и другие роли. Каждый член команды может выполнять одну роль или объединять в себе несколько функций. Хотя сценарии использования ассистента для разработчиков и специалистов по DevOps вполне очевидны, сценарии для системных аналитиков остаются не до конца ясными.

Системный аналитик и код: где пересекаются их пути?

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

Примеры задач СА, где пригодится GigaCode:

  • работа с БД: от проектирования таблиц до миграций между СУБД;
  • создание спецификаций для интеграций;
  • документирование через UML (Use Case, ER-диаграммы) с привязкой к коду через PlantUML.
Media content

Схемы тоже будут

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

Задача: «Необходимо проработать процесс списания средств со счёта Клиента при подключении или автопродлении пакета услуг».

В начале бизнес-аналитик должен проработать список заинтересованных лиц (стейкхолдеров) и взаимодействующих систем, составить перечень требований и ограничений. Работу бизнес-аналитика здесь не рассматриваем, поэтому давайте попросим GigaChat сгенерировать примеры стейкхолдеров и их требования.

Перечень стейкхолдеров (GigaChat сгенерировал гораздо больший список, чем в примере ниже):

  1. Клиент (основной пользователь услуги, чьи средства списываются) — хочет безопасность и удобство.
  2. Финансовый отдел (отвечает за управление финансами компании, контроль денежных потоков) — требует соблюдение нормативов.
  3. ИТ-отдел (разрабатывает и поддерживает систему автоматизации процесса списания средств) — заботится о стабильности работы систем, надёжности интеграций.
  4. Служба поддержки клиентов (обеспечивает техническую поддержку пользователей, решает возникающие проблемы) — заботится о высоком качестве клиентского сервиса.
  5. Банки (организации, через которые осуществляются денежные переводы) — минимум комиссий, максимум скорости.

Попросим GigaChat сгенерировать пользовательскую историю клиента:

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

Контекст:

- Клиент использует мобильное приложение или сайт для подключения к услугам.

- Автоматическое списание средств должно происходить после успешного завершения процедуры подключения/автопродления

Основные этапы: Выбор услуги → проверка данных → оплата → уведомление.

Цель: минимум действий, максимум прозрачности.

Подготовленный на шаге бизнес-аналитики материал (артефакты) передаются в системную аналитику. Именно отсюда начинается самая важная часть статьи.

Рассмотрим несколько сервисов, которые могут поддержать процесс, описанный выше:

1. Веб-сайт/приложение — интерфейс для клиента.

2. Backend — обработка запросов и логика.

3. Сервис авторизации — управление учетными записями.

4. Платежный шлюз — проведение транзакций.

5. Сервис уведомлений — информирование пользователей.

Рассмотрим гипотетически возможные сценарии взаимодействия сервисов на примере бэкенда:

Backend получает POST-запрос от сайта.

Backend проверяет данные → авторизует пользователя → создает заказ.

Backend передает данные в платежный сервис → отправляет уведомление.

Media content

А почему бы и нет? Сценарий использования пиццей не испортишь

Попросим GigaCode через окно CodeChat сгенерировать скрипт в формате PlantUML-диаграммы последовательности для этого сценария. Ответ выглядит так:

@startuml
actor "Веб-сайт" as website
participant "Backend" as backend
participant "Сервис авторизации" as auth
participant "База данных" as db
participant "Сервис обработки платежей" as payment
website \-\> backend: POST-запрос с данными пользователя и услугами
backend \-\> backend: Проверка данных
alt Данные верны
   backend \-\> auth: Запрос на аутентификацию пользователя
   auth \-\> backend: Результат аутентификации
   alt Пользователь аутентифицирован
       backend \-\> db: Создание заказа
       db \-\> backend: Подтверждение создания заказа
       backend \-\> payment: Обработка платежа
       payment \-\> backend: Результат обработки платежа
       backend \-\> website: Результат операции
   else Пользователь не аутентифицирован
       backend \-\> website: Ошибка аутентификации
   end
else Данные неверны
   backend \-\> website: Ошибка проверки данных
end
@enduml

Этот скрипт можно перевести в изображение с помощью онлайн-сервисов или специального плагина для VSCode. В результате получим:

Media content

За эти схемы нам платят ;)

Следующий запрос к CodeChat направлен на генерацию скриптов для базы данных. Предложения:

CREATE TABLE Users (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    password\_hash VARCHAR(255) NOT NULL,
    phone\_number VARCHAR(20),
    \-- Другие поля, связанные с пользователем
);

CREATE TABLE Services (
    id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2\) NOT NULL,
    \-- Другие поля, связанные с услугой
);

CREATE TABLE Orders (
    id INT PRIMARY KEY,
    user\_id INT,
    service\_id INT,
    order\_date TIMESTAMP DEFAULT CURRENT\_TIMESTAMP,
    status VARCHAR(50),
    FOREIGN KEY (user\_id) REFERENCES Users(id),
    FOREIGN KEY (service\_id) REFERENCES Services(id),
    \-- Другие поля, связанные с заказом
);

CREATE TABLE Payments (
    id INT PRIMARY KEY,
    order\_id INT,
    payment\_date TIMESTAMP DEFAULT CURRENT\_TIMESTAMP,
    amount DECIMAL(10, 2\) NOT NULL,
    status VARCHAR(50),
    FOREIGN KEY (order\_id) REFERENCES Orders(id),
    \-- Другие поля, связанные с платежом

Для визуализации связей таблиц просим сгенерировать скрипт ER-диаграммы.

N.B. Некоторые парсеры PlantUML не поддерживают ключевое слово table. Поэтому рекомендуется в запросе вместо table использовать ключевое слово entity.

Результат запроса:

@startuml
\!define entity(x) class x \<\< (E,\#FF7700) \>\>
\!define column(x) note right: x
entity Users {
   id : INT
   email : VARCHAR(255)
   password\_hash : VARCHAR(255)
   phone\_number : VARCHAR(20)
   \-- Другие поля, связанные с пользователем
}
entity Services {
   id : INT
   name : VARCHAR(255)
   description : TEXT
   price : DECIMAL(10, 2\)
   \-- Другие поля, связанные с услугой
}
entity Orders {
   id : INT
   user\_id : INT
   service\_id : INT
   order\_date : TIMESTAMP
   status : VARCHAR(50)
   \-- Другие поля, связанные с заказом
}
entity Payments {
   id : INT
   order\_id : INT
   payment\_date : TIMESTAMP
   amount : DECIMAL(10, 2\)
   status : VARCHAR(50)
   \-- Другие поля, связанные с платежом
}
Users ||--o{ Orders : "has"
Services ||--o{ Orders : "has"
Orders ||--o{ Payments : "has"
@enduml
Media content

ER-диаграмма

Да, есть вопросы к качеству проработки диаграммы. Но мы начали с того, что результаты будут поверхностными, так как мы не уточняем запросы и не корректируем ответы. Наша цель — показать возможности ИИ в качестве ассистента аналитика.

Media content

Добавим же и отрисуем?

В конце попросим чат-бота сгенерировать спецификацию API в формате OpenAPI. При генерировании учитываются сущности сгенерированных ранее таблиц.

openapi: 3.0.0
info:
 title: Backend API
 version: 1.0.0
paths:
 /users:
   post:
     summary: Создание пользователя
     requestBody:
       required: true
       content:
         application/json:
           schema:
             $ref: '\#/components/schemas/UserRequest'
     responses:
       '200':
         description: Пользователь успешно создан
         content:
           application/json:
             schema:
               $ref: '\#/components/schemas/UserResponse'
       '400':
         description: Ошибка проверки данных
   get:
     summary: Получение списка пользователей
     responses:
       '200':
         description: Список пользователей
         content:
           application/json:
             schema:
               type: array
               items:
                 $ref: '\#/components/schemas/UserResponse'
 /services:
   get:
     summary: Получение списка услуг
     responses:
       '200':
         description: Список услуг
         content:
           application/json:
             schema:
               type: array
               items:
                 $ref: '\#/components/schemas/ServiceResponse'
 /orders:
   post:
     summary: Создание заказа
     requestBody:
       required: true
       content:
         application/json:
           schema:
             $ref: '\#/components/schemas/OrderRequest'
     responses:
       '200':
         description: Заказ успешно создан
         content:
           application/json:
             schema:
               $ref: '\#/components/schemas/OrderResponse'
       '400':
         description: Ошибка проверки данных
       '401':
         description: Ошибка аутентификации
   get:
     summary: Получение списка заказов
     responses:
       '200':
         description: Список заказов
         content:
           application/json:
             schema:
               type: array
               items:
                 $ref: '\#/components/schemas/OrderResponse'
 /payments:
   post:
     summary: Обработка платежа
     requestBody:
       required: true
       content:
         application/json:
           schema:
             $ref: '\#/components/schemas/PaymentRequest'
     responses:
       '200':
         description: Платеж успешно обработан
         content:
           application/json:
             schema:
               $ref: '\#/components/schemas/PaymentResponse'
       '400':
         description: Ошибка проверки данных
       '401':
         description: Ошибка аутентификации
components:
 schemas:
   UserRequest:
     type: object
     properties:
       email:
         type: string
       password\_hash:
         type: string
       phone\_number:
         type: string
     required:
       \- email
       \- password\_hash
     example:
       email: user@example.com
       password\_hash: 'hashed\_password'
       phone\_number: '+1234567890'
   UserResponse:
     type: object
     properties:
       id:
         type: integer
       email:
         type: string
       phone\_number:
         type: string
     example:
       id: 1
       email: user@example.com
       phone\_number: '+1234567890'
   ServiceResponse:
     type: object
     properties:
       id:
         type: integer
       name:
         type: string
       description:
         type: string
       price:
         type: number
         format: double
     example:
       id: 1
       name: 'Service 1'
       description: 'Service 1 description'
       price: 100.0
   OrderRequest:
     type: object
     properties:
       user\_id:
         type: integer
       service\_id:
         type: integer
     required:
       \- user\_id
       \- service\_id
     example:
       user\_id: 1
       service\_id: 2
   OrderResponse:
     type: object
     properties:
       id:
         type: integer
       user\_id:
         type: integer
       service\_id:
         type: integer
       order\_date:
         type: string
         format: date-time
       status:
         type: string
     example:
       id: 1
       user\_id: 1
       service\_id: 2
       order\_date: '2022-01-01T00:00:00Z'
       status: 'success'
   PaymentRequest:
     type: object
     properties:
       order\_id:
         type: integer
       amount:
         type: number
         format: double
     required:
       \- order\_id
       \- amount
     example:
       order\_id: 1
       amount: 100.0
   PaymentResponse:
     type: object
     properties:
       id:
         type: integer
       order\_id:
         type: integer
       payment\_date:
         type: string
         format: date-time
       amount:
         type: number
         format: double
       status:
         type: string
     example:
       id: 1
       order\_id: 1
       payment\_date: '2022-01-01T00:00:00Z'
       amount: 100.0
       status: 'success'

Скрипт можно загрузить в Swagger — и вуаля, документация готова!

Media content

Swagger-документация

Media content

Пример тела запроса и ответа

Итоги: GigaCode — отличный инструмент для аналитиков

В этой статье мы рассмотрели на примере GigaCode возможности ИИ-ассистентов в помощи системным аналитикам. На наши запросы ассистент сгенерировал:

1. диаграммы в формате PlantUML-скриптов (диаграмму последовательности, ER-диаграмму);

2. таблицы для базы данных;

3. спецификацию в формате openAPI.

Мы видим, как GigaCode выходит за рамки традиционного ассистента разработчика и становится универсальным помощником для всех ролей, работающих с кодом. GigaCode может упростить работу системным аналитикам. Вам доступен не только текстовый ввод в CodeChat, но и возможность прикреплять файлы. Например, вы можете отправить HTML-файл страницы Confluence с таблицами, алгоритмами и другим содержимым, чтобы GigaCode сгенерировал таблицы. Или передать yml-файл с описанием API, чтобы получить тесты для него.

Не бойтесь экспериментировать и предлагайте свои сценарии использования нашего ИИ-ассистента. Важно лишь точно формулировать свои запросы. И не бойтесь начинать новые диалоги, если ИИ «зациклился».

Мы ценим ваше мнение и ждём обратной связи: ваши истории, задачи и предложения по новым функциям. Желаем вам успеха!

Попробуйте бесплатно — https://gigacode.ru. Если что-то пойдёт не так, пишите в комментариях, разберёмся вместе.