Введение
Качественный код требует не только мастерства разработчика, но и эффективных инструментов. GitHub Copilot — один из таких инструментов, который за последние годы стал незаменимым помощником для миллионов программистов по всему миру. Однако многие используют его лишь для автодополнения строк или генерации простых функций, упуская из виду его истинный потенциал. Правильные промты (prompts) позволяют Copilot не просто писать код, но и ревьюировать его, генерировать осмысленные коммиты, объяснять сложные алгоритмы и даже проектировать архитектуру.
В этой статье я собрал 18 боевых промтов, которые реально использую в повседневной работе. Они разбиты на три категории: генерация кода, написание коммитов и code review. Каждый промт сопровождается примером использования и комментариями, чтобы вы могли сразу применить его в своих проектах.
1. Промты для генерации кода
1.1 Генерация функции с описанием
Промт: Write a function that takes an array of integers and returns the maximum product of two elements. Include type hints and docstring.
Пример:
def max_product_of_two(arr: list[int]) -> int:
"""
Returns the maximum product of any two distinct elements in the array.
"""
if len(arr) < 2:
raise ValueError("Array must have at least two elements")
max1 = max2 = float('-inf')
min1 = min2 = float('inf')
for num in arr:
if num > max1:
max2 = max1
max1 = num
elif num > max2:
max2 = num
if num < min1:
min2 = min1
min1 = num
elif num < min2:
min2 = num
return max(max1 * max2, min1 * min2)
Этот промт даёт не просто реализацию, а готовую к использованию функцию с обработкой ошибок и оптимизацией O(n).
1.2 Генерация тестов
Промт: Generate pytest tests for the function max_product_of_two. Include edge cases like empty array, negative numbers, and duplicates.
Пример:
import pytest
from your_module import max_product_of_two
def test_basic():
assert max_product_of_two([1, 2, 3]) == 6
def test_negatives():
assert max_product_of_two([-10, -2, 3]) == 20
def test_duplicates():
assert max_product_of_two([5, 5, 1]) == 25
def test_empty():
with pytest.raises(ValueError):
max_product_of_two([])
Copilot автоматически покрывает основные кейсы, экономя минуты на рутинные тесты.
1.3 Генерация API-эндпоинта
Промт: Create a FastAPI endpoint that accepts a POST request with JSON body containing 'name' and 'age', validates that age is between 0 and 150, and returns a greeting message.
Пример:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
app = FastAPI()
class UserInput(BaseModel):
name: str = Field(..., min_length=1)
age: int = Field(..., ge=0, le=150)
@app.post("/greet")
async def greet_user(data: UserInput):
return {"message": f"Hello, {data.name}! You are {data.age} years old."}
Промт с указанием фреймворка и требований даёт готовый эндпоинт с валидацией.
1.4 Генерация SQL-запроса
Промт: Write a SQL query to find the top 5 customers by total purchase amount from the 'orders' table, joining with 'customers' table. Include customer name and total.
Пример:
SELECT c.name, SUM(o.amount) AS total_purchases
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id, c.name
ORDER BY total_purchases DESC
LIMIT 5;
Copilot понимает контекст таблиц и корректно строит JOIN и GROUP BY.
1.5 Генерация Dockerfile
Промт: Create a multi-stage Dockerfile for a Python FastAPI application that runs on port 8080, uses Alpine for final stage, and installs dependencies from requirements.txt.
Пример:
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
FROM python:3.11-alpine
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY . .
EXPOSE 8080
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
Промт с указанием многоступенчатой сборки и целевого образа даёт оптимальный Dockerfile.
2. Промты для написания коммитов
2.1 Генерация сообщения коммита из diff
Промт: Generate a conventional commit message for the following diff:
- Added user authentication with JWT
- Created login and register endpoints
- Added password hashing with bcrypt
- Updated tests
Пример:
feat(auth): add user authentication with JWT
Implement login and register endpoints with password hashing using bcrypt.
Add unit tests for authentication flow.
Copilot автоматически форматирует в Conventional Commits.
2.2 Описание изменений для Pull Request
Промт: Write a summary for a PR that fixes a bug where the app crashes on empty input. Describe root cause, fix, and testing.
Пример:
## Summary
Fixed a crash when user submits empty form.
## Root Cause
The input validation was missing a check for None values, causing a TypeError when accessing .strip() method.
## Fix
Added a guard clause that returns early if input is empty or None.
## Testing
- Added unit test for empty string
- Added unit test for None input
- Verified manually in staging
Такой промт даёт готовый шаблон для PR описания.
2.3 Генерация changelog
Промт: Generate a changelog entry for version 2.1.0 from these commits:
- feat: add dark mode
- fix: correct typo in docs
- chore: update dependencies
Пример:
## [2.1.0] - 2026-07-02
### Added
- Dark mode support
### Fixed
- Typo in documentation
### Changed
- Updated dependencies
Copilot группирует коммиты по типам.
3. Промты для code review
3.1 Общий ревью куска кода
Промт: `Review the following function for potential bugs, performance issues, and style violations. Suggest improvements.
def process_data(data):
result = []
for i in range(len(data)):
if data[i] > 0:
result.append(data[i] * 2)
return result
Ответ Copilot:
- Возможные баги: не обрабатывается None или пустой список.
- Производительность: можно использовать list comprehension для ускорения.
- Стиль: не хватает type hints и docstring.
- Улучшенная версия:
def process_data(data: list[float]) -> list[float]:
"""Return doubled values for positive elements."""
return [x * 2 for x in data if x > 0]
3.2 Поиск уязвимостей
Промт: `Check this code for security vulnerabilities:
@app.route("/user/<int:user_id>")
def get_user(user_id):
query = f"SELECT * FROM users WHERE id = {user_id}"
return db.execute(query)
Ответ:
- Уязвимость: SQL injection из-за f-string в SQL-запросе.
- Исправление: использовать параметризованные запросы.
3.3 Оценка читаемости
Промт: `Evaluate readability of this code and suggest how to make it more maintainable.
def calc(a,b,c):
x=a*b
y=x-c
return y
Ответ:
- Плохие имена переменных.
- Нет docstring.
- Лучше:
def calculate_total_price(price: float, quantity: int, discount: float) -> float:
"""Calculate total price after discount."""
subtotal = price * quantity
return subtotal - discount
3.4 Проверка на соответствие best practices
Промт: `Check if this code follows SOLID principles:
class Report:
def generate(self, data):
# generate report
pass
def save_to_file(self, filename):
# save to file
pass
def send_email(self, recipient):
# send email
pass
Ответ:
- Нарушение Single Responsibility Principle (SRP): класс делает три разные вещи.
- Рекомендация: разделить на классы ReportGenerator, ReportSaver, EmailSender.
3.5 Оптимизация производительности
Промт: `Optimize this code for large datasets:
def find_duplicates(arr):
duplicates = []
for i in range(len(arr)):
for j in range(i+1, len(arr)):
if arr[i] == arr[j] and arr[i] not in duplicates:
duplicates.append(arr[i])
return duplicates
Ответ:
- O(n^2) — неэффективно.
- Использовать set для O(n):
def find_duplicates(arr):
seen = set()
duplicates = set()
for x in arr:
if x in seen:
duplicates.add(x)
else:
seen.add(x)
return list(duplicates)
4. Дополнительные промты для повседневных задач
4.1 Генерация документации
Промт: Generate Sphinx-compatible docstring for a function that calculates Fibonacci numbers recursively with memoization.
Пример:
from functools import lru_cache
def fibonacci(n: int) -> int:
"""
Return the n-th Fibonacci number using recursion with memoization.
:param n: Non-negative integer index
:returns: Fibonacci number F(n)
:raises ValueError: If n is negative
Example:
>>> fibonacci(10)
55
"""
if n < 0:
raise ValueError("n must be non-negative")
@lru_cache(maxsize=None)
def fib(k):
if k < 2:
return k
return fib(k-1) + fib(k-2)
return fib(n)
4.2 Рефакторинг legacy-кода
Промт: `Refactor this JavaScript code to modern ES6+ syntax:
var x = 10;
function add(a, b) {
return a + b;
}
Ответ:
const x = 10;
const add = (a, b) => a + b;
4.3 Генерация mock-данных
Промт: Generate a list of 5 mock users with fields: id, name, email, phone. Use Python dicts. Make names realistic.
Пример:
mock_users = [
{"id": 1, "name": "Alice Johnson", "email": "alice@example.com", "phone": "+1-555-0100"},
{"id": 2, "name": "Bob Smith", "email": "bob@example.com", "phone": "+1-555-0101"},
# ... остальные
]
4.4 Создание регулярного выражения
Промт: Write a regex pattern to validate US phone numbers with or without country code, allowing formats: (123) 456-7890, 123-456-7890, +1 123 456 7890.
Ответ:
^(\+1[\s-]?)?(\(\d{3}\)[\s-]?|\d{3}[\s-]?)\d{3}[\s-]?\d{4}$
4.5 Генерация bash-скрипта
Промт: Create a bash script that finds all .log files older than 7 days in /var/log and archives them to /var/archive with gzip compression.
Пример:
#!/bin/bash
find /var/log -name "*.log" -type f -mtime +7 -exec gzip {} \; -exec mv {}.gz /var/archive/ \;
echo "Archived old log files."
Заключение
Эти 18 промтов — лишь малая часть того, что можно делать с GitHub Copilot, если уметь формулировать задачи. Главное правило: чем точнее промт, тем качественнее результат. Указывайте язык, фреймворк, желаемый формат вывода и ограничения. Copilot не читает мысли, но отлично понимает чёткие инструкции.
Попробуйте применить эти промты в своём проекте уже сегодня. Вы увидите, как ускорится написание кода, улучшится качество коммитов и станет проще ревьюировать чужой код. А если захотите углубиться в тему интеграции AI-инструментов с вашими системами — ASI Biont поддерживает подключение к GitHub Copilot через API — подробнее на asibiont.com/courses.
Comments