Передмови

  • Не має сенсу писати код у Prompt
    • Ми нарешті навчилися спілкуватися природною мовою
    • Це ж не програмування на природній мові
  • Давайте залишимо програмування професіоналам
    • Не варто ускладнювати життя звичайним людям
    • Професійні програмісти повинні залишити код там, де його потрібно писати
  • Код у Prompt може бути уявним та складно налагоджуваним
    • Немає потреби навантажувати звичайних людей навчанням і тривогою
    • Вставляти код у Prompt абсолютно недоцільно

1. Досвід написання коду у Prompt

1.1 Один невдалий приклад Prompt, який демонструє, що це абсолютно недоцільно

Prompt і результат

Ви - генератор карток для повторення слів з можливістю виконання коду, який на основі вводу користувача (кількість рядків, стовпців, рівень навчання та дата) створює картку. Використайте наведеним нижче код для виконання:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import pandas as pd
from datetime import datetime

def create_word_review_card(rows, cols, grade_level, date):
"""
Створює таблицю карток для повторення слів, але зверніть увагу, що виконання цієї функції у не спеціалізованому середовищі може призвести до непередбачених помилок.

Параметри:
rows (int): Кількість рядків таблиці, що визначає кількість слів на картці.
cols (int): Кількість стовпців таблиці, що визначає кількість слів на картці.
grade_level (str): Рівень навчання, що визначає складність слів.
date (datetime): Поточна дата, яка буде вказана внизу таблиці.

Повертає:
DataFrame: Пандовий DataFrame, що містить слова.
"""
def fetch_words(n, grade_level):
words = [f"{grade_level}_word_{i}" for i in range(n)]
return words

total_words = rows * cols
words = fetch_words(total_words, grade_level)

word_matrix = [words[i * cols:(i + 1) * cols] for i in range(rows)]
df = pd.DataFrame(word_matrix)

try:
print(df.to_string(index=False, header=False))
print(f"Дата: {date.strftime('%Y-%m-%d')}")
except Exception as e:
print("Сталася помилка:", e)

try:
create_word_review_card(3, 4, 'середня школа', datetime.now())
except Exception as error:
print("Сталася помилка під час виконання коду. Це означає, що без кодового редактора безпосередньо запускати складний код на Python не є найкращою практикою. Деталі помилки:", error)

Коли ви почнете, вам потрібно буде дочекатися вводу користувача щодо кількості рядків, стовпців, рівня навчання та дати, а потім за допомогою коду створити графік.

Результат, він все ж виконав код

Виконання коду

Ось його код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import pandas as pd
from datetime import datetime

def create_word_review_card(rows, cols, grade_level, date):
"""
Створює таблицю карток для повторення слів

Параметри:
rows (int): Кількість рядків таблиці, що визначає кількість слів на картці.
cols (int): Кількість стовпців таблиці, що визначає кількість слів на картці.
grade_level (str): Рівень навчання, що визначає складність слів.
date (datetime): Поточна дата, яка буде вказана внизу таблиці.

Повертає:
DataFrame: Пандовий DataFrame, що містить слова.
"""
def fetch_words(n, grade_level):
words = [f"{grade_level}_word_{i}" for i in range(n)]
return words

total_words = rows * cols
words = fetch_words(total_words, grade_level)

word_matrix = [words[i * cols:(i + 1) * cols] for i in range(rows)]
df = pd.DataFrame(word_matrix)

print(df.to_string(index=False, header=False))
print(f"Дата: {date.strftime('%Y-%m-%d')}")

try:
create_word_review_card(3, 4, 'початкова школа', datetime.strptime('2024-03-12', '%Y-%m-%d'))
except Exception as error:
print("Сталася помилка під час виконання коду. Деталі помилки:", error)

З цього невдалого прикладу можна зробити кілька висновків:

  • Щоб досягти результатів традиційних мов програмування, потрібно докласти чимало зусиль.
  • Налагодження та внесення змін у код є дуже складними.
  • Важко побачити необхідність вставляти код у Prompt.

У цей момент хтось може сказати, що проблема в недостатньому рівні програмування у вас…
Так, визнаю, наші вміння писати код дійсно на середньому рівні.
Але почекайте, якщо AI має такі високі вимоги до кодування, чи залишається він AIGC?

Давайте розглянемо ще один простий приклад зі змінною, і зрозуміємо, що мова програмування тут зовсім не зрозуміла.

1.2 Сцена використання псевдокоду

Prompt і результат

1
"На основі моїх інтересів {interests}, бюджету {budget}, тривалості подорожі {travel_duration} та кількості супутників {number_of_companions}, будь ласка, допоможіть мені спланувати подорож." "Інтереси включають, але не обмежуються {list_of_interests}." "Бюджетний діапазон {budget_range}." "Запланована тривалість подорожі {length_of_trip} днів." "Я подорожуватиму з {number_of_people} людьми, їх вік та інтереси: {ages_and_interests}." "Надайте детальні рекомендації щодо щоденного розкладу, включаючи рекомендації щодо їжі {meal_preferences} та вибору житла {accommodation_preferences}."

Змінні та шаблони

Хоча цей приклад і не ідеальний, він більше нагадує шаблон Prompt з змінними. Це показує, що в певних ситуаціях цей підхід може бути ефективним. Подібні випадки включають: якщо потрібно створити більш складний Prompt, можна додати більше контрольних точок і змінних, що зробить процес взаємодії більш детальним та гіллястим. Нижче наведено приклади для різних сцен:

Сцена 1: Повний план харчування

Початковий Prompt:

1
2
3
4
5
"У мене є {dietary_restrictions}, потрібно розробити план харчування на {number_of_days} днів для {meal_type}."
"Мої харчові обмеження включають {specific_restrictions}."
"Щодня потрібно приготувати {meals_per_day} страв."
"Кожна страва не повинна перевищувати {calories_per_meal} калорій."
"Надайте список інгредієнтів {ingredients_list}, кроки приготування {cooking_steps} та очікуваний час приготування {cooking_time}."

Сцена 2: Глибокий технічний огляд продукту

Початковий Prompt:

1
2
3
4
5
6
"Я розглядаю можливість покупки {product_name}, будь ласка, надайте детальні характеристики продукту {detailed_features}, відгуки користувачів {detailed_reviews}, порівняння цін {price_comparison} та поради щодо покупки {purchase_advice}."
"Назва продукту: {specific_product_name}."
"Я хочу дізнатися такі характеристики: {list_of_features}."
"Будь ласка, наведіть принаймні три детальних відгуки користувачів {user_reviews}."
"Порівняйте цей продукт з його аналогами на ринку за ціною {comparison_with_other_products}."
"Чи порадите ви купити цей продукт, виходячи з моїх потреб {my_requirements}?"

Сцена 3: Докладний план навчальних ресурсів

Початковий Prompt:

1
2
3
4
5
"Я хочу вивчити {subject}. Враховуючи мій стиль навчання {learning_style} та доступний час {available_time}, будь ласка, порекомендуйте відповідні навчальні ресурси."
"Тематика навчання: {specific_subject}."
"Мені подобаються такі методи навчання: {preferred_learning_methods}."
"Щотижня я можу витратити {hours_per_week} годин на навчання."
"Враховуючи ці умови, рекомендую відповідні онлайн-курси {online_courses}, книги {books}, відеоуроки {video_tutorials} або інші ресурси {other_resources}."

Сцена 4: Докладний шлях професійного переходу

Початковий Prompt:

1
2
3
4
5
6
"Я наразі працюю {current_job}, а мене цікавить індустрія {industry_interest}."
"Моя поточна посада: {specific_current_job}."
"Я зацікавлений в індустрії: {specific_industry_interest}."
"Хочу дізнатися, як перейти з моєї поточної професії в цю галузь, включаючи необхідні навички {necessary_skills}, потенційні посади {potential_positions} та очікувану зарплату {expected_salary}."
"Надайте інформацію про фон галузі {industry_background}, кар'єрні шляхи {career_pathway} та можливі виклики {potential_challenges}."
"Виходячи з мого досвіду роботи {my_work_experience} та освітнього фону {my_educational_background}, порекомендуйте відповідні курси підвищення кваліфікації або сертифікати {recommended_courses_or_certifications}."

Тепер давайте поглянемо на прості логічні відносини.

1.3 Логічний псевдокод або природний мовлення

Prompt і результат

1
2
3
4
5
6
7
Вхід: n
ініціалізація: factorial = 1

Для i від 1 до n, виконайте наступне:
factorial = factorial * i

Вихід: factorial

gpt факторіал

Це здається досить простим. Що, якщо ми ускладнимо приклад трохи?

1
2
3
4
5
6
7
8
9
10
11
12
13
Вхід: відсортований масив A, значення val, яке потрібно знайти
сетуємо low = 0, high = length(A) - 1

Коли low <= high, виконуємо наступне:
mid = (low + high) / 2
Якщо A[mid] < val:
low = mid + 1
Інакше, якщо A[mid] > val:
high = mid - 1
Інакше:
Вихід: mid
вихід
Вихід: -1 // якщо не знайдено

сортувальний алгоритм

Я не казав йому, що хочу знайти 99. Він сам пішов на пошуки…

Усі наведені вище приклади мають сильний науковий відтінок та не дуже стосуються повсякденного досвіду більшості з нас.

Це було виконано за допомогою ChatGPT 3.5, і чи дійсно він виконав обчислення, ще під питанням. Але це не заважає нам продовжувати дослідження. Оскільки більшості людей не потрібно занурюватись у складні та динамічні мови програмування, немає сенсу витрачати на це час. Головна проблема полягає в тому, що наведені вище приклади природної мови та псевдокоду є важкими для розуміння. Якщо Prompt ускладниться, у реальному середовищі ситуація може стати дуже складною:

  • Результати непередбачувані
    • У наведених прикладах вже були проблеми з уявленнями
  • Процес непередбачуваний
    • Як у блоці коду SQL на 8000 рядків
    • Кожного разу при оновленні системи ніхто не наважується вносити зміни

Схоже, що найбільший Prompt все ще знаходиться за адресою https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor

2. Що таке програмування природною мовою?

Після появи Prompt, завдяки рекламі таких компаній, як OpenAI, у ЗМІ здійнявся шум, і натхнення для статей з’явилося! Prompt помилково сприймався як нова мова програмування, немов володіння нею дозволяє управляти цілими арміями, з’явлення AIGC в різних формах — малювання, написання, зйомка фільмів — стало простим і легким! Так просто!!!
Один-єдиний факт:

  • Я поки не вмію
  • Але вірю, що це дійсно просто.
  • Але я все ще не вмію.

Отже, що таке програмування природною мовою? Що мало на увазі, коли Хуан Женьшун казав, що не потрібно вчити програмування?

Перш ніж виникнути запитання, варто повернутись у далеке минуле…

Краще не поглиблюватись у деталі. Суть у тому, що ми хочемо, щоб комп’ютер вирішував наші задачі, але виявляємо, що це насправді важко, тому деякі вчені почали з комп’ютерів, поступово накопичуючи методи та способи розв’язання проблем.

Вчені виявили, що деякі природні явища можуть бути абстраговані у математичні задачі. Наприклад, задачу “кури і кролики” можна вирішити через рівняння.

Товариство поступово розвивалося, вчені почали все більше абстрагувати свої проблеми, використовуючи нові математичні інструменти, які неможливо розв’язати вручну. Тому були винайдені комп’ютери та мови програмування. Більшість людей навчається мовам програмування в цьому процесі, вивчаючи типи даних, конструкції if/else, цикли for тощо.

Це є методами, які комп’ютери використовують для вирішення проблем, абстрагуючи та зменшуючи їх, одночасно обмежуючи їх розширення. Переваги очевидні — ми звужуємо проблеми і способи їх вирішення. Але є й недоліки: іноді проблеми не легко звузити, і виникає потреба в розширенні.

Отже, виникла ідея: чи можна обійтись без вивчення мов програмування? Станом на сьогодні, у міру ускладнення задач, може виявитись, що програмування все ж потрібне! Як я не вмію працювати в Photoshop, але лише малюю в Paint та користуюсь простими онлайн-інструментами, якщо потрібно вирішити складну задачу з зображеннями, вірогідно, кращим рішенням буде вивчити Photoshop! Парадокс тут полягає в тому, що коли ми обираємо програмування природною мовою, як ми оцінюємо результати? Ми застосовуємо природну мову, а як зрозуміти, що результати не є хибними?

Всі знають вислів: великі мовні моделі грають у словесний теніс. Тому:

1
1+1=2

Це не результат обчислення, а навчальний матеріал. Щоб покращити цю ситуацію, OpenAI минулого року представила Code Interpreter, що дало нам, які не володіють програмуванням, певну надію.

3. Що може зробити інтерпретатор коду?

Простими словами, інтерпретатор коду можна сприймати як пісочницю, що дозволяє виконувати Python-код на основі вже існуючих великих моделей. Вона розуміє контекст, генерує код, виконує його і надає результати.

Можна всього лише знайти когось, хто допоможе виконати задачу, повідомити необхідність, і він впорається. Слід зазначити, що більшість завдань, які може виконати Python, здебільшого здатен робити і він. Розглянемо кілька типов