одиниця 1 / 12

Штучний інтелект для програмного забезпечення: робоча модель і обмеження

Прибуток:

  • Здатність пояснити, як помічник кодування працює як мовна модель, а також поняття маркера, контекстного вікна, галюцинації
  • Здатність розрізняти програмні завдання, де штучний інтелект є сильним і слабким, за допомогою ментальної карти
  • Здатність застосовувати базовий робочий цикл запропонувати-виробити-перевірити для своїх власних завдань

День розробника програмного забезпечення рідко витрачається на «написання коду з нуля». реальний час; Читання коду, написаного кимось іншим, спроба відтворити помилку, сканування журналу (рядків журналу, створюваних програмою під час роботи), написання тестів, написання PR (запит на злиття — запит на злиття, коли зміна коду надсилається на перевірку групі) пояснення та оновлення документації. Штучний інтелект (AI) — це мультиплікатор швидкості, який може торкнутися майже всіх цих невидимих ​​завдань. Але найперша умова безпечного використання — правильно розуміти, що це таке, а що ні.

У цьому розділі ми спочатку пояснюємо базову технологію помічника кодування простою мовою; потім ми створюємо ментальну карту сильних і слабких сторін моделі; Нарешті, ми встановлюємо основну робочу дисципліну, яку будемо використовувати протягом усього модуля: пропонувати, створювати, перевіряти. Ці три кроки є основою наступних одинадцяти підрозділів.

Примітка. Цей модуль є загальним тренінгом. У критично важливому для безпеки програмному забезпеченні (обробка платежів, охорона здоров’я, автентифікація, критична інфраструктура) результати штучного інтелекту не замінюють перевірку та затвердження кваліфікованим інженером. ШІ – помічник; Підписувач – інженер.

Що насправді робить помічник кодування?

Більшість помічників кодування побудовані на великій мовній моделі (LLM — штучний інтелект, навчений на величезній кількості тексту та коду, який передбачає наступний, найімовірніший, «фрагмент»). Модель не «розуміє» код, як людина; Він генерує найбільш вірогідне продовження контексту, який ви йому надаєте, на основі шаблонів, які він вивчає з величезної кількості прикладів. Цей, здавалося б, простий механізм дає напрочуд ефективні результати на практиці, тому що більшість програмного забезпечення складається з шаблонів, що повторюються: запит HTTP, цикл, перевірка нуля, тестовий шаблон.

Тут критично важливі три терміни. Токен — це найменша одиниця, яку модель обробляє шляхом поділу тексту; Це приблизно кілька букв або частина слова. Контекстне вікно — це кількість токенів, які модель може «бачити» одночасно; Ваш код, повідомлення про помилку та інструкція мають поміститися в це вікно. Підказка — це всі інструкції та контекст, які ви надаєте моделі. Якість результату, який ви отримаєте, безпосередньо залежить від цих двох: чим кращий контекст і чіткіші інструкції ви дасте моделі, тим кращий результат ви отримаєте. Поганий вхід створює поганий результат, навіть якщо це розумна модель — класичне програмне правило «сміття входить, сміття виходить» також стосується ШІ.

Карта сильних і слабких сторін

Щоб направити ШІ на правильні роботи, необхідно знати, де він світить, а де спотикається. Запам’ятовуючи цю карту, ви з кожною наступною місією будете думати: «Чи доручити цю роботу штучному інтелекту чи зробити це самому?» Це дозволяє відповісти на запитання за лічені секунди.

Його сильними сторонами є: генерація шаблонного коду, переклад з однієї мови на іншу, написання регулярного виразу (регулярного виразу), опис функції, створення тестового скелета, інтерпретація повідомлення про помилку, складання документації, пропозиція назв змінних/функцій та незначні рефакторинги (покращення структури коду без зміни його поведінки).

Слабкі сторони: знання бізнес-правил вашої компанії, запам’ятовування всієї вашої кодової бази, фактичний запуск і перевірка коду, впевнене знання останніх версій бібліотеки, виявлення вразливостей безпеки зі стовідсотковою гарантією. Найнебезпечніше – це галюцинація: модель вигадує неіснуючу функцію, бібліотеку чи API (інтерфейс, що забезпечує обмін даними між програмами) дуже переконливою мовою. Цей ризик можна перетворити на вашу користь, оскільки код, на відміну від звичайного тексту, можна перевірити, щоб побачити, чи він «працює» — просто не пропускайте крок перевірки.

Тип місії

Роль ШІ

чоловіча роль

Виготовити шаблон/скелет

створює тягу

Адаптація, перегляди

Опис коду

Дає короткий підсумок

Перевіряє критичну частину коду

написання контрольних робіт

Справа підказує

Підтверджує покриття та точність

Критична для безпеки логіка

корисна ідея

Рішення та відповідальність повністю покладаються на людей.

Використання API/бібліотеки

Генерує вибірку

Перевіряє існування та версію

архітектурне рішення

Різні варіанти

Вибирає та захищає, знаючи контекст

Крок за кроком: базовий робочий цикл

  1. Уточніть задачу. Якщо ви не можете написати те, що хочете, одним реченням, модель теж не зможе. Чим раніше невизначеність проникає на вхідні дані, тим більше вона зростає на виході.
  2. Дайте контекст. Додайте до підказки відповідний код, повне повідомлення про помилку, версію мови/фреймворку та обмеження. Не кажіть «виправте це», скажіть «Python 3.11, FastAPI 0.110; ця функція видає помилку 500, вона вибухає, коли тіло запиту порожнє».
  3. Роль і формат накладення. Фреймворк на зразок «Ви старший розробник Go; просто надайте код і обґрунтування двома реченнями» фокусує результат.
  4. Просіть малого. Розбийте це на кроки, а не на один гігантський запит; Перевірте кожен крок окремо. Великі зміни є ризикованими, оскільки їх важко перевірити та вони можуть приховати помилки.
  5. Підтвердити. Запустіть, перевірте, прочитайте візуально. Неперевірений код штучного інтелекту – це «ескіз», а не «рішення». Це найбільш необговорений крок у циклі.

Три міні-чохли

Випадок 1. Економія часу реальна, але скромна. Коли команда створила скелет нових кінцевих точок CRUD (Create-Read-Update-Delete) за допомогою штучного інтелекту, час першої чернетки скоротився приблизно з 40 хвилин до 8 хвилин. Однак із оглядом і тестуванням загальний час склав 25 хвилин; тому реальний приріст становить від 40 до 25, приблизно 38%. Ця швидкість, виміряна замість очікування «ми прискорилися в 10 разів», є стійким досягненням.

Випадок 2 — Галюцинація коштує дорого. Розробник використав виклик requests.get_json(), запропонований ШІ, без перевірки; Такого методу (точніше response.json()) не було. 20 хвилин було втрачено, коли код не компілювався. Просте «чи справді існує цей метод?» перевірка скине втрату.

Випадок 3. Хороший контекст подвоює результат. Для тієї самої помилки один розробник просто написав «Я отримую повідомлення про помилку», а інший додав повне трасування стека, версію та зразок введення. Останній отримав правильне рішення з першої спроби; Перший витратив три оберти. Різниця була не в моделі, а у вході.

Чотири шаблони, які можна копіювати

Універсальне, потужне підказка запуску:

Роль: Ви досвідчений {{language}} розробник. Завдання: {{what_want}}Контекст:- Фреймворк/версія: {{framework_and_version}}- Обмеження: {{performance, style, dependency rules}}Правила:- Не використовуйте неіснуючу бібліотеку/функцію; Якщо ви не впевнені, позначте це як «перевірити». - Спочатку дайте короткий план, потім код, потім 2 речення з обґрунтуванням. - Створення робочого коду, який можна перевірити.

Щоб відфільтрувати невизначеність назад у модель:

Перш ніж розв’язувати наведене нижче завдання, перелічіть ПРИНІМШ 3 пункти, які ви вважаєте відсутніми або незрозумілими як питання. НЕ пишіть код до того, як я відповім. Завдання: {{task}}

Щоб самоперевірити вихідні дані:

Ви створили наступний код. Тепер змініть свою роль і розкритикуйте цей код: - Перелічіть 3 випадки (граничні випадки), які можуть не працювати. - Чи є якісь API/функції, які ви могли придумати? Позначити.- Надати виправлену версію. Код:{{код}}

Щоб розбити рішення на варіанти:

Запропонуйте 2-3 підходи до вирішення {{problem}}. Для кожного: короткий опис, плюс/мінус, коли вибрати. Наведіть у вигляді таблиці. НЕ вибирайте за мене; просто уточніть варіант.

Слабка підказка / Сильна підказка

Слабкий: «Виправте помилку в цьому коді». (Яка помилка? Яка мова? Яка очікувана поведінка?)
Сильно: «Python 3.11 / FastAPI 0.110. Наступна кінцева точка повертає 500 із KeyError, коли тіло запиту стає порожнім; я хочу, щоб воно повертало 400 і значуще повідомлення в порожньому тілі. Спочатку поясніть причину, потім надайте виправлену функцію, а потім напишіть тест для цього сценарію. [код]»

Потужна версія; Він надає мову, версію, фактичну помилку, очікувану поведінку та вихідний формат. Модель більше не повинна передбачати.

Поширені помилки

  • Довіра без перевірки. Найпоширеніша і найдорожча помилка. Не кажіть «вирішено», доки код не буде скомпільовано та перевірено.
  • Ставте запитання без контексту. Відповідь без версії, тексту помилки та обмежень є загальною та часто неправильною.
  • Одне величезне прохання. Неможливість запросити та переглянути 300-рядкове виробництво одразу робить помилки непомітними.
  • Приймаючи самовпевненість моделі як доказ. ШІ може впевнено сказати щось не те; Тон не є показником точності.
  • Довільне вставлення секрету компанії. Приватні ключі, дані клієнтів або приватний вихідний код не можна вводити в несхвалені інструменти (ми розглянемо цю тему в блоці 10).
Порада: сприймайте кожен вихід ШІ як «це чернетка». Ця єдина розумова звичка усуває більшість ризиків, які ви побачите протягом усього модуля.

Підсумовуючи

Помічник кодування — це мовна модель, яка передбачає наступний найбільш імовірний фрагмент; Він не розуміє код, він створює шаблони. Ось чому він сильний у повторюваних, шаблонних роботах; Його слід використовувати обережно для роботи, яка потребує перевірки, яка є специфічною для вашого контексту. Найбільший ризик – галюцинація, а єдина протиотрута – перевірка. Дисципліна, якої ми будемо дотримуватися протягом усього модуля, є чіткою: уточніть завдання, надайте контекст, попросіть невелике, перевірте кожен результат.

Аплікаційне завдання

Запишіть три програмні завдання, які ви виконали минулого тижня (наприклад, виправлення помилок, тестування, оновлення README). Подивіться на «карту сильних і слабких сторін» для кожного й опишіть одним реченням, якою була б ваша роль і роль ШІ, якби ШІ зробив це. Потім дайте одне з цих завдань ШІ за допомогою шаблону «підказка запуску» вище, запустіть і перевірте результат; Зверніть увагу, скільки хвилин ви заощадили і скільки помилок вам довелося виправити.

контрольний список

  • [ ] Я зрозумів, що LLM створює шаблони, а не «розуміє» код.
  • [ ] Я можу пояснити поняття маркера, контекстного вікна та підказки одним реченням.
  • [ ] Я можу розрізняти типи завдань, де штучний інтелект є сильним і слабким.
  • [ ] Я знаю, що таке галюцинація, і єдина протиотрута — перевірка.
  • [ ] Я адаптував цикл «запропонувати, створити, перевірити» до свого завдання.
  • [ ] Я можу показати різницю між сильною підказкою та слабкою підказкою на конкретному прикладі.