Введение

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

Люди из многих областей, в том числе программисты, исследователи, бухгалтеры, юристы, аспиранты, преподаватели, банкиры и многие другие, находят новые и интересные способы использования ChatGPT, чтобы помочь в своей работе, повысить производительность, избавиться от повторяющихся задач. задачи, и в целом, чтобы быть более эффективным.

ChatGPT — это языковая модель, созданная OpenAI, которая предназначена для понимания и создания разговоров на человеческом языке. Цитата из OpenAI:

Мы обучили модель под названием ChatGPT, которая взаимодействует в диалоговом режиме. Формат диалога позволяет ChatGPT отвечать на дополнительные вопросы, признавать свои ошибки, оспаривать неверные предпосылки и отклонять неуместные запросы. ChatGPT — это родственная модель InstructGPT, которая обучена следовать инструкциям в подсказке и давать подробный ответ.

Связь:



А вот как ChatGPT описывает себя:

Быстрый:

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

Отвечать:

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

Помимо введения — немного технических моментов

Я буду краток: если мы немного коснемся поверхности, ChatGPT — это языковая модель на основе ИИ, предназначенная для понимания и ответа на текст, особенно текст, написанный человеком. Он был обучен человеческим разговорам, сначала под наблюдением тренеров-людей, а затем на наборе данных GPT-3, содержащем 175 миллиардов параметров и текстов из ряда источников.

Если вы хотите узнать больше, я предлагаю начать с блогов OpenAI:





OpenAI API
API для доступа к новым моделям ИИ, разработанным OpenAIplatform.openai.com



Использование ChatGPT — мое использование в качестве ИИ-помощника

Я использую ChatGPT несколькими способами, и я начал с создания введения, сообщений LinkedIn и сообщений Twitter для моих статей на Medium. Прежде чем углубиться в это, давайте посмотрим, что такое подсказка, и несколько способов, которые я нашел полезными при использовании первой и последующей подсказок:

Подсказки ChatGPT — создание подсказок для качественных ответов

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

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

  • Предоставьте как можно больше контекста. ChatGPT не может читать ваши мысли, и как языковая модель ИИ имеет ограниченную способность читать между строк. Таким образом, любая недостающая информация, первичная или контекстная, не будет им учитываться. Оцените качество ответов, чтобы определить, какой информации не хватает, и предоставьте ее.
  • Создавайте несколько ответов от ChatGPT, постепенно заполняя недостающую информацию, чтобы получить более качественные ответы. Сгенерируйте несколько ответов и используйте их части в конечном результате.
  • Предоставьте ChatGPT дополнительный контекст, предоставив ему ответ, который вы написали. Я обнаружил, что это очень полезно для получения дальнейших ответов.
  • Если возможно, предоставьте широкий контекст, я счел иногда полезным вставить всю статью, а затем попросить ее создать сводку, сообщения LinkedIn, Twitter, постепенно улучшая их, прося акцентировать внимание на определенных вещах, некоторых исправлениях и т. д.
  • Попросите ChatGPT оставить отзыв о вашей работе, задав такие вопросы, как «что вы думаете об этом» и «как я могу это переписать», а затем указать текущую работу. Это может дать много полезной информации, включая лучшие способы написания предложений, альтернативные термины, лучший словарный запас, а иногда и фактические исправления. Это наиболее полезно в продолжающемся разговоре, где у ChatGPT есть контекст.
  • Наконец, помните, что, как и любая модель ИИ, ChatGPT не идеальна. Ожидайте выполнения около 30%-40% работы самостоятельно. Тем не менее, это большая помощь, и это может сэкономить много часов работы.

Использование ChatGPT в качестве помощника по написанию: советы и примеры

Самая большая помощь, которую я получил от ChatGPT, была в письменной форме. Недавно я начал писать статьи на Medium, в основном об Apache Spark. Я получаю помощь от ChatGPT во многих отношениях. Я предоставляю ему контекст о статье, а затем прошу сгенерировать 140-символьное резюме для Medium.

Возьмем, к примеру, мою статью Medium about Handling Data Skew in Apache Spark. Если я дам следующую подсказку:

Напишите 140-символьное введение к моей статье на Medium об обработке перекосов данных в Apache Spark.

И получаю следующий ответ:

«Раскройте весь потенциал Apache Spark, овладев искусством обработки перекосов данных. Изучите эффективные методы оптимизации ваших конвейеров данных».

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

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

* Он охватывает обнаружение перекоса данных с помощью пользовательского интерфейса Spark.

* Далее представлены некоторые методы устранения перекоса данных в Spark.

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

* В нем рассказывается об управлении перекосом данных с помощью адаптивного выполнения запросов (AQE), который является новой функцией в Spark 3.0 или более поздней версии, и о том, как использовать его различные функции для устранения перекоса данных.

* Наконец, я расскажу, как использовать обе манипуляции с данными (добавление производного столбца) и AQE вместе для устранения перекоса данных и как это дает наилучшие результаты по сравнению с предыдущими примерами.

Примеры кода написаны на Python и используют API PySpark.

Пожалуйста, напишите 140-символьное SEO-оптимизированное резюме статьи.

И это дает мне более подходящее резюме, которое имеет отношение к информации, которую я рассказал об устранении перекоса данных в Spark:

Добейтесь максимальной производительности Apache Spark с помощью эффективных методов обработки перекосов данных. Узнайте, как обнаруживать, решать и оптимизировать задания Spark для достижения максимальных результатов.

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

Овладейте искусством обработки перекосов данных в Apache Spark. Откройте для себя методы и инструменты для оптимизации заданий Spark и достижения максимальной производительности.

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

Узнайте, как обрабатывать неравномерность данных в Apache Spark. Узнайте о методах и инструментах для оптимизации заданий Spark и устранения узких мест.

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

Далее следует создание поста в LinkedIn, и желательно, чтобы он был оптимизирован для SEO и имел привлекательный заголовок, привлекающий людей к чтению статьи. Я прошу ChatGPT сделать так:

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

И ChatGPT предлагает следующие сообщения LinkedIn. Я попросил создать два возможных поста в LinkedIn:

Хотите максимизировать производительность своих заданий Apache Spark? Ознакомьтесь с моей последней статьей на Medium о том, как справляться с неравномерностью данных! Откройте для себя мощные методы и инструменты для обнаружения перекосов данных в Spark и управления ими, в том числе с помощью Adaptive Query Execution (AQE). Не пропустите эти важные идеи — читайте и делитесь ими со своей сетью! #ApacheSpark #DataSkew #DataScience #BigData #AdaptiveQueryExecution

И

Вниманию пользователей Apache Spark! Узнайте, как оптимизировать задания Spark и избежать узких мест с помощью эффективных методов обработки перекосов данных. Прочтите мою последнюю статью на Medium, чтобы узнать о мощных инструментах и ​​стратегиях для обнаружения перекосов данных в Spark и управления ими. Не пропустите эти ценные знания — читайте и делитесь ими со своей сетью! #ApacheSpark #DataSkew #DataScience #BigData #методыоптимизации

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

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

И дает отличный ответ:

«Вы устали иметь дело с узкими местами и медленными заданиями Spark, вызванными перекосом данных? Прочтите мою последнюю статью на Medium, чтобы узнать об эффективных методах обработки перекосов данных в Apache Spark! Узнайте, как обнаруживать и устранять неравномерность данных с помощью таких инструментов, как Adaptive Query Execution (AQE) и секционирование. С помощью этих мощных стратегий вы можете оптимизировать свои задания Spark для достижения максимальной производительности. Не упустите эти ценные знания — читайте и делитесь со своей сетью!» #ApacheSpark #DataSkew #DataScience #BigData #Методы оптимизации #AdaptiveQueryExecution

Ссылка на статью: [вставить ссылку сюда]

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

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

Разместите SEO-оптимизированный пост в Твиттере, который, скорее всего, будет прочитан и распространен.

И ответ:

Вот SEO-оптимизированный пост в Твиттере:

«Оптимизируйте свои задания Apache Spark и избегайте узких мест, связанных с перекосом данных, с помощью эффективных методов! Прочтите мою последнюю статью на Medium, чтобы узнать, как обнаруживать и устранять неравномерность данных в Spark с помощью таких инструментов, как AQE и секционирование. #ApacheSpark #DataSkew #DataScience #BigData #Optimization» [вставьте ссылку на статью здесь]

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

Один вывод из этого раздела: чтобы получать более качественные и полезные ответы, необходимо работать с ChatGPT, предоставляя ему больше контекста, исправляя его и предоставляя предложения и предпочтения.

Использование ChatGPT в качестве виртуального однорангового программиста: использование ChatGPT для поддержки кодирования

ChatGPT может работать с кодом разными способами. Вот несколько способов, которыми он может помочь разработчикам:

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

Внимание! Обязательно обсудите это с руководителем или менеджером, чтобы не передавать конфиденциальную информацию или код в ChatGPT.

Например, если мы описываем сценарий в Spark и просим ChatGPT написать для него код на Scala, мы получаем следующий ответ:

Сгенерируйте искровой код в scala, учитывая фрейм данных, содержащий продажи (идентификатор, идентификатор продажи, идентификатор клиента, идентификатор товара, отметку времени продажи и сумму), создайте фрейм данных, который вычисляет общую сумму каждой продажи. А затем добавьте во вновь созданный фрейм данных столбец промежуточных сумм, который вычисляет среднее значение последних пяти продаж одного и того же клиента.

Ответ:

import org.apache.spark.sql.expressions.Window

// create a new dataframe that calculates the total of each sale
val salesDF = originalDF.groupBy("sale_id").agg(sum("amount").as("total_sale"))

// create a window specification that partitions by customer id and orders by timestamp of sale
val customerWindowSpec = Window.partitionBy("customer_id").orderBy("timestamp_of_sale")

// add a running total column to the newly created dataframe that computes the average of last five sales of the same customer
val runningTotalDF = salesDF.withColumn("running_total", avg(col("total_sale")).over(customerWindowSpec.rowsBetween(-4, 0)))

// show the resulting dataframe
runningTotalDF.show()

Затем давайте попросим ChatGPT объяснить код, который он написал:

поясните код пожалуйста

Ответ:

Конечно, я был бы рад объяснить код.

Сначала мы импортируем необходимые библиотеки для Spark и создаем DataFrame с именем originalDF, который содержит данные о продажах (идентификатор, идентификатор продажи, идентификатор клиента, идентификатор товара, временная метка продажи и сумма).

Затем мы создаем новый DataFrame с именем salesDF, который группирует данные по sale_id и вычисляет сумму суммы для каждой продажи, в результате чего DataFrame содержит два столбца: sale_id и total_sale.

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

Наконец, мы используем функцию withColumn, чтобы добавить новый столбец в фрейм данных salesDF с именем running_total. Мы вычисляем промежуточную сумму, взяв среднее значение последних пяти продаж для каждого клиента, что выполняется с помощью функции avg и метода rowsBetween с диапазоном от -4 до 0 (что представляет последние пять строк). Полученный DataFrame сохраняется в runningTotalDF.

Затем мы используем метод show для отображения полученного DataFrame.

В целом код выполняет агрегацию данных, работу с окнами и преобразование с использованием Spark DataFrame API в Scala.

Затем давайте попросим обернуть это в функцию и написать для нее модульные тесты:

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

И ответ:

import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.{avg, col, sum}
import org.apache.spark.sql.expressions.Window

def calculateRunningTotal(df: DataFrame): DataFrame = {
  // create a new dataframe that calculates the total of each sale
  val salesDF = df.groupBy("sale_id").agg(sum("amount").as("total_sale"))

  // create a window specification that partitions by customer id and orders by timestamp of sale
  val customerWindowSpec = Window.partitionBy("customer_id").orderBy("timestamp_of_sale")

  // add a running total column to the newly created dataframe that computes the average of last five sales of the same customer
  val runningTotalDF = salesDF.withColumn("running_total", avg(col("total_sale")).over(customerWindowSpec.rowsBetween(-4, 0)))

  // return the resulting dataframe
  runningTotalDF
}

и модульные тесты:

test("the running total dataframe should have the correct running total values") {
    val df = Seq(
      (1, 1, 1, 1, "2021-01-01", 10.0),
      (2, 2, 1, 2, "2021-01-02", 20.0),
      (3, 3, 2, 1, "2021-01-03", 30.0),
      (4, 4, 2, 2, "2021-01-04", 40.0),
      (5, 5, 1, 3, "2021-01-05", 50.0),
      (6, 6, 1, 1, "2021-01-06", 60.0),
      (7, 7, 2, 3, "2021-01-07", 70.0),
      (8, 8, 2, 4, "2021-01-08", 80.0),
      (9, 9, 1, 4, "2021-01-09", 90.0)
    ).toDF("identifier", "sale_id", "customer_id", "item_id", "timestamp_of_sale", "amount")

    val result = calculateRunningTotal(df)
    val expected = Seq(
      (10.0, 15.0, 25.0),
      (30.0, 35.0, 45.0),
      (30.0, 40.0, 50.0),
      (70.0, 75.0, 80.0),
      (80.0, 85.0, 90.0)
    ).toDF("total_sale", "running_total", "expected_running_total")

    assert(result.join(expected, Seq("total_sale")).count() == expected.count())
  }
}

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

Помимо написания кода, также можно получить объяснение кода от ChatGPT, чтобы лучше понять код, написанный кем-то другим или найденный в Интернете. В качестве примера я передам ему код из другой статьи [Ссылка на параллельное чтение данных из JDBC] и спрошу, что делает этот код:

What does the function get_sales_by_product do in the following code, please explain in bullet points:

def read_data_from_db(spark: SparkSession, connection_str: str, username: str, password: str, table: str) -> DataFrame:
    properties = {
        "user": username,
        "password": password,
        "driver": "org.postgresql.Driver"
    }
    data_df = spark.read.jdbc(
        url=connection_str,
        properties=properties,
        table=table
    )

    return data_df


def read_sales(spark: SparkSession, host: str, username: str, password: str) -> DataFrame:
    table = "sales.salesorderheader"
    sales_df = read_data_from_db(spark=spark, connection_str=host, username=username, password=password, table=table)

    return sales_df


def read_sales_order_detail(spark: SparkSession, host: str, username: str, password: str):
    table = "sales.salesorderdetail"
    sales_detail_df = read_data_from_db(spark=spark, connection_str=host, username=username, password=password, table=table)

    return sales_detail_df


def get_sales_by_product(spark: SparkSession, connection_str: str, username: str, password: str) -> DataFrame:
    products = read_data_from_db(spark=spark, connection_str=connection_str, username=username, password=password, table="production.product")
    sales = read_data_from_db(spark=spark, connection_str=connection_str, username=username, password=password, table="sales.salesorderdetail")\
        .repartition(8)

    sales_by_product = sales\
        .withColumn("product_total_in_sale", spark_sql.col("orderqty") * spark_sql.col("unitprice"))\
        .join(products, ["productid"], "inner")\
        .groupby("name")\
        .agg(
            spark_sql.sum("product_total_in_sale").alias("sales_total"),
            spark_sql.sum("orderqty").alias("num_sold")
        )

    return sales_by_product

ChatGPT дает следующий ответ:

Функция get_sales_by_product:

* Считывает данные из таблиц production.product и sales.salesorderdetail в базе данных с помощью функции read_data_from_db.

* Выполняет операцию соединения между кадрами данных о продажах и продуктах на основе столбца productid.

* Рассчитывает общий объем продаж и количество проданных товаров, группируя данные по столбцу имени.

* Возвращает фрейм данных, содержащий название продукта, общий объем продаж продукта и количество проданных продуктов.

Затем в код можно добавить строки документа и комментарии, запросив ChatGPT:

Пожалуйста, добавьте строки документации и комментарии к коду

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

from pyspark.sql import SparkSession, DataFrame, functions as spark_sql


def read_data_from_db(spark: SparkSession, connection_str: str, username: str, password: str, table: str) -> DataFrame:
    """
    Reads data from a database table using the specified connection string, username, and password.

    Args:
        spark (SparkSession): SparkSession object.
        connection_str (str): Connection string for the database.
        username (str): Username for the database.
        password (str): Password for the database.
        table (str): Name of the table to read.

    Returns:
        DataFrame: A dataframe containing the data from the table.
    """
    properties = {
        "user": username,
        "password": password,
        "driver": "org.postgresql.Driver"
    }
    data_df = spark.read.jdbc(
        url=connection_str,
        properties=properties,
        table=table
    )

    return data_df


def read_sales(spark: SparkSession, host: str, username: str, password: str) -> DataFrame:
    """
    Reads data from the 'sales.salesorderheader' table.

    Args:
        spark (SparkSession): SparkSession object.
        host (str): Hostname for the database.
        username (str): Username for the database.
        password (str): Password for the database.

    Returns:
        DataFrame: A dataframe containing the data from the 'sales.salesorderheader' table.
    """
    table = "sales.salesorderheader"
    sales_df = read_data_from_db(spark=spark, connection_str=host, username=username, password=password, table=table)

    return sales_df


def read_sales_order_detail(spark: SparkSession, host: str, username: str, password: str):
    """
    Reads data from the 'sales.salesorderdetail' table.

    Args:
        spark (SparkSession): SparkSession object.
        host (str): Hostname for the database.
        username (str): Username for the database.
        password (str): Password for the database.

    Returns:
        DataFrame: A dataframe containing the data from the 'sales.salesorderdetail' table.
    """
    table = "sales.salesorderdetail"
    sales_detail_df = read_data_from_db(spark=spark, connection_str=host, username=username, password=password, table=table)

    return sales_detail_df


def get_sales_by_product(spark: SparkSession, connection_str: str, username: str, password: str) -> DataFrame:
    """
    Retrieves the total sales and number of units sold for each product by joining the sales and products dataframes.

    Args:
        spark (SparkSession): The SparkSession object.
        connection_str (str): The connection string to the database.
        username (str): The username for the database.
        password (str): The password for the database.

    Returns:
        DataFrame: A dataframe containing the sales total and number of units sold for each product.

    """
    # Read the products dataframe from the database
    products = read_data_from_db(spark=spark, connection_str=connection_str, username=username, password=password, table="production.product")

    # Read the sales dataframe from the database
    sales = read_data_from_db(spark=spark, connection_str=connection_str, username=username, password=password, table="sales.salesorderdetail")\
        .repartition(8)

    # Calculate the product total in each sale
    sales_by_product = sales\
        .withColumn("product_total_in_sale", spark_sql.col("orderqty") * spark_sql.col("unitprice"))\
        .join(products, ["productid"], "inner")\
        .groupby("name")\
        .agg(
            spark_sql.sum("product_total_in_sale").alias("sales_total"),
            spark_sql.sum("orderqty").alias("num_sold")
        )

    return sales_by_product

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

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

Наконец, давайте создадим сценарий для генерации SQL-запроса:

Быстрый:

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

И ответ:

To get students with top 3 scores in each course, you can use the ROW_NUMBER() function to assign a row number to each student in each course based on their score, and then select only the rows where the row number is less than or equal to 3.

Here's an example SQL query that does this:

sql

WITH ranked_scores AS (
  SELECT
    course_name,
    student_name,
    score,
    ROW_NUMBER() OVER (
      PARTITION BY course_name
      ORDER BY score DESC
    ) AS rank
  FROM scores
)

SELECT
  course_name,
  student_name,
  score
FROM ranked_scores
WHERE rank <= 3;

In this query:

* The WITH clause creates a subquery called ranked_scores that selects the course name, student name, score, and row number for each student in each course. The ROW_NUMBER() function is used to assign a row number to each student in each course, based on their score. The PARTITION BY clause is used to group the students by course, and the ORDER BY clause is used to order the students within each course by their score in descending order.
* The main query selects the course name, student name, and score from the ranked_scores subquery, but only returns the rows where the row number is less than or equal to 3. This ensures that only the top 3 students in each course are returned.

Это здорово, ChatGPT дает как SQL-запрос, так и его объяснение. Попробуем получить запрос без CTE:

Пожалуйста, перепишите запрос без CTE и используйте оконные функции.

И ответ:

Certainly! Here's an example SQL query that gets the students with the top 3 scores in each course using window functions:

sql

SELECT
  course_name,
  student_name,
  score
FROM (
  SELECT
    course_name,
    student_name,
    score,
    ROW_NUMBER() OVER (
      PARTITION BY course_name
      ORDER BY score DESC
    ) AS rank
  FROM scores
) ranked_scores
WHERE rank <= 3;

In this query:

* The subquery selects the course name, student name, score, and row number for each student in each course, using the ROW_NUMBER() function to assign a row number to each student in each course based on their score. The PARTITION BY clause is used to group the students by course, and the ORDER BY clause is used to order the students within each course by their score in descending order.
* The main query selects the course name, student name, and score from the subquery, but only returns the rows where the row number is less than or equal to 3. This ensures that only the top 3 students in each course are returned.

Note that window functions are used here instead of a CTE to assign row numbers to each student in each course. The ROW_NUMBER() function is applied to the results of the subquery directly, using the OVER clause to specify the partition and ordering.

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

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

ChatGPT для создания тестовых случаев

Еще один способ использования ChatGPT в качестве помощника ИИ — это описание сценария и создание для него тестовых случаев. В настоящее время ChatGPT не может посещать веб-сайты или анализировать изображения, поэтому здесь очень важна хорошая подсказка. Сценарии использования и функциональность должны быть указаны как можно более подробно, чтобы получить хорошие тестовые примеры и охват. Если есть документация, это даже полезнее, чем подсказка.

Внимание! Обязательно обсудите это с руководителем или менеджером, чтобы не передавать конфиденциальную информацию в ChatGPT.

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

Рассмотрим мобильное приложение, которое после регистрации делает следующее:

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

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

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

— Доступ к этому разделу возможен только в том случае, если пользователь авторизован.

— Сверху находится календарь, в котором можно выбрать недели, месяцы и годы.

— С левой стороны должны быть видны все категории расходов и выбрана первая.

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

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

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

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

Примечание. Я прошу 3 тестовых примера за раз, потому что я заметил, что существует ограничение на размер вывода, и ChatGPT останавливается, когда этот предел символов превышен. Но, поскольку ChatGPT сохраняет контекст, ему может быть предложено продолжить с того места, где вывод был остановлен в последнем ответе.

Вот ответ от ChatGPT:

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

Эта дополнительная информация может быть предоставлена ​​в последующем запросе, и ChatGPT можно попросить повторно сгенерировать тестовые случаи, на которые повлияла эта новая информация. В целом, это довольно всеобъемлющий результат.

Бонус — Мой разговор с ChatGPT для выбора названия этой статьи

Следующие шаги для меня

  • Изучите расширение Visual Studio Code ChatGPT и утилиту, которую оно предоставляет непосредственно в среде IDE.
  • Найдите хорошие расширения ChatGPT для IntelliJ IDEA и PyCharm IDE.
  • Изучите API-интерфейсы OpenAI и попытайтесь автоматизировать генерацию сообщений LinkedIn и Twitter для моих собственных и рекомендованных мною статей для ежедневных публикаций.

дальнейшее чтение

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