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



Вы уже знакомы с Python, но хотите ускорить написание кода и получать идеи от искусственного интеллекта? В этом уроке вы узнаете, как нейросети (神经网络 shénjīng wǎngluò) могут писать, дополнять и отлаживать ваш Python‑скрипт. Мы разберём, какие модели подходят для кода, как правильно формулировать запросы — prompt — и какие практические инструменты доступны уже сегодня. После урока вы сможете генерировать функции, автоматически исправлять ошибки и использовать ИИ как «парного программиста», экономя часы рутинной работы.
| Термин | Описание | Китайский эквивалент |
|---|---|---|
| Large Language Model (LLM) | Большая языковая модель, обученная на миллионах строк кода и естественного текста. | 大型语言模型 dàxíng yǔyán móxíng |
| Code‑LLM | Специализированная LLM, обученная преимущественно на репозиториях (GitHub, StackOverflow). | 代码语言模型 dàimǎ yǔyán móxíng |
| Prompt | Текстовый запрос, который вы подаёте модели, чтобы получить желаемый ответ. | 提示 tíshì |
| Temperature | Параметр, регулирующий степень «творчества» вывода (0 – детерминированно, 1 – более случайно). | 温度 wēndù |
Почему это полезно?
\n\n или специальный токен). Аналогия: представьте, что вы пишете рассказ, а ваш собеседник подсказывает вам каждое следующее слово, основываясь на уже написанном тексте. Чем больше он знает о стиле и жанре, тем лучше будет история.
В случае кода модель «читаем» ваш текущий файл, понимает типы переменных, импортированные модули и генерирует продолжение, которое синтаксически и семантически согласовано с контекстом.
| Инструмент | Как подключить | Пример использования | Плюсы | Минусы |
|---|---|---|---|---|
| OpenAI API (GPT‑4‑code) | pip install openai openai.api_key = "YOUR_KEY" |
openai.ChatCompletion.create(...) |
Самая мощная модель, поддержка диалогов | Платный, ограничение запросов |
| HuggingFace Transformers | pip install transformers model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-350M-mono") |
model.generate(...) |
Открытый код, можно запускать локально | Требует GPU для больших моделей |
| GitHub Copilot | Расширение VS Code, авторизация через GitHub | Автодополнение в реальном времени | Интеграция в IDE, поддержка многих языков | Платный после пробного периода |
| Tabnine | Плагин для PyCharm/VS Code | Предлагает строки кода на лету | Быстрая работа, офлайн‑режим | Менее «творческий» чем LLM‑модели |
| Local‑LLM (llama.cpp) | Сборка из исходников, загрузка модели в формате GGUF | ./main -m model.gguf -p "def foo():" |
Полностью офлайн, контроль над данными | Требует мощный CPU/GPU, сложнее в настройке |
Выбор инструмента зависит от ваших ресурсов и требований к конфиденциальности. Если вы работаете с чувствительными данными, лучше использовать локальные модели.
| Элемент Prompt | Как формулировать | Пример |
|---|---|---|
| Задача | Кратко опишите, что должно получиться. | «Напишите функцию, которая считает количество уникальных слов в тексте» |
| Контекст | Укажите уже написанный код, импорт, типы. | «У меня уже импортирован re. Пожалуйста, используйте его» |
| Ограничения | Поставьте лимиты (строки, используйте). | «Не более 15 строк, без внешних зависимостей» |
| Тесты | Добавьте пример ввода‑вывода, чтобы модель проверила свою работу. | «Для строки "hello world hello" функция должна вернуть 2» |
| Температура | Установите temperature=0 для детерминированного кода. |
openai.ChatCompletion.create(..., temperature=0) |
Совет: Чем точнее вы задаёте ограничения, тем меньше понадобится править сгенерированный код.
pip install openai tqdm
import openai, os, textwrap, json
openai.api_key = os.getenv("OPENAI_API_KEY")
prompt = textwrap.dedent("""\
Вы – опытный разработчик Python.
Требуется написать функцию `quick_sort(arr: list[int]) -> list[int]`,
которая сортирует список целых чисел методом быстрой сортировки.
Функция должна быть рекурсивной, без использования встроенной `sorted`.
Приведите также несколько юнит‑тестов с использованием `assert`.
Ограничьте длину кода 20 строками.
""")
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0,
max_tokens=500,
)
code = response.choices[0].message.content
print(code)
def quick_sort(arr: list[int]) -> list[int]:
"""Рекурсивная быстрая сортировка."""
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
# Юнит‑тесты
assert quick_sort([]) == []
assert quick_sort([5]) == [5]
assert quick_sort([3, 1, 4, 1, 5, 9, 2]) == [1, 1, 2, 3, 4, 5, 9]
assert quick_sort([-1, -3, -2]) == [-3, -2, -1]
Если что‑то не так, отредактируйте Prompt, добавив уточнение, например: «Используйте типизацию list[int] и typing».
| Ошибка | Причина | Как исправить |
|---|---|---|
| Синтаксическая ошибка | Модель «забыла» закрыть скобку или добавить : |
Добавьте в Prompt «Обязательно проверьте синтаксис». |
| Необработанные исключения | Не учтён случай None или пустой ввод |
Попросите добавить if not arr: return []. |
| Неоптимальная сложность | Модель использует list.sort() вместо собственного алгоритма |
Укажите «Не использовать встроенные функции сортировки». |
| Проблемы с типами | Отсутствует аннотация или неверный тип | В Prompt включите «Укажите типы аргументов и возвращаемого значения». |
| Утечки памяти | Рекурсия без базового случая | Попросите добавить проверку if len(arr) <= 1. |
Генерация функции
flatten(lst: list[list[int]]) -> list[int], «flatten‑ирующую вложенный список целых чисел. Добавьте минимум три юнит‑теста. Отладка сгенерированного кода
median(nums: list[float]) -> float с помощью любой модели. Затем найдите и исправьте ошибку, которая возникает при передаче списка из одного элемента. Контроль длины вывода
data.txt и выводит количество строк, но ограничьте её 12 строками кода. Проверьте, укладывается ли результат в лимит. Тест‑driven Prompt
assert‑ов, а затем просите написать функцию is_palindrome(s: str) -> bool. Сравните, насколько точно модель соблюдает указанные тесты. Сравнение моделей
fib(n: int) -> int. Оцените различия в стиле, читаемости и производительности. С помощью этих шагов вы сможете не только быстро получать рабочий код, но и развить навыки точного формулирования запросов, что является ключевым умением в эпоху нейросетей (神经网络 shénjīng wǎngluò). Удачной практики!