Автоматическое создание скриптов Python: подходы и примеры

Раздел: Искусственный интеллект -> Искусственный интеллект

Генерация кода Python с помощью искусственного интеллекта

Как получить готовый скрипт, соответствующий текстовому описанию, без ручного написания?

Наиболее эффективное решение - использование LLM (Large Language Model) через API, например OpenAI GPT. Модель понимает естественный язык и возвращает синтаксически корректный код. Ниже приведён пример обращения к ChatGPT через библиотеку openai.

import openai

openai.api_key = "YOUR_API_KEY"
response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
        {"role": "user", "content": "Напиши функцию на Python, которая принимает список чисел и возвращает их среднее арифметическое."}
    ],
    temperature=0.2
)
code = response.choices[0].message.content
print(code)

ии для написания кодов python (ии для написания кодов python)

def average(numbers):
    return sum(numbers) / len(numbers) if numbers else 0

сгенерировать код python (генерация кода python)

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

Вариант 1: Локальная генерация с помощью модели CodeLLaMA

Как запустить генерацию кода на собственном сервере без передачи данных в облако?

Используйте модель CodeLLaMA из библиотеки transformers. Потребуется GPU с достаточным объёмом памяти (не менее 12 ГБ).

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("codellama/CodeLlama-7b-hf")
model = AutoModelForCausalLM.from_pretrained("codellama/CodeLlama-7b-hf", device_map="auto")

prompt = "def fibonacci(n):\n    \"\"\"Return the nth Fibonacci number\"\"\""
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

основы искусственного интеллекта в примерах на python (основы искусственного интеллекта на python с примерами)

def fibonacci(n):
    """Return the nth Fibonacci number"""
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

Python искусственный интеллект примеры (примеры искусственного интеллекта на python)

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

Вариант 2: Интеграция с GitHub Copilot через API

Как встроить автодополнение кода в собственное приложение, используя технологию Copilot?

GitHub Copilot имеет REST API для получения предложений. Пример запроса к серверу Copilot (требуется токен):

import requests

headers = {
    "Authorization": "Bearer YOUR_COPILOT_TOKEN",
    "Content-Type": "application/json"
}
data = {
    "prompt": "import json\ndef parse_config(filepath):\n    """Load and parse JSON config file"""",
    "max_tokens": 150
}
response = requests.post("https://copilot-proxy.githubusercontent.com/v1/engines/copilot-codex/completions",
                         headers=headers, json=data)
if response.status_code == 200:
    print(response.json()["choices"][0]["text"])

Ai python codes (коды для искусственного интеллекта на python)

    with open(filepath, 'r') as f:
        config = json.load(f)
    return config

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

Вариант 3: Генерация кода с помощью шаблонов Jinja2

Как создавать повторяющиеся фрагменты кода, используя предопределённые шаблоны и параметры?

Библиотека Jinja2 позволяет подставлять переменные и управляющие структуры. Это полезно для генерации boilerplate кода (например, создания классов ORM, API эндпоинтов).

from jinja2 import Template

template = Template("""
class {{ class_name }}:
    def __init__(self, {{ params }}):
        {% for param in params_list %}
        self.{{ param }} = {{ param }}
        {% endfor %}
""")

code = template.render(class_name="User", params="name, email", params_list=["name", "email"])
print(code)
class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

Ошибки: шаблоны не учитывают контекст и семантику, легко допустить синтаксическую ошибку в самом шаблоне. Необходимо тщательно тестировать вывод.

Вариант 4: Использование моделей из Hugging Face Hub (CodeGen, SantaCoder)

Как применить небольшую специализированную модель для генерации коротких фрагментов кода?

Модель Salesforce/codegen-350M-mono быстро работает даже на CPU. Пример:

from transformers import pipeline

generator = pipeline("text-generation", model="Salesforce/codegen-350M-mono")
result = generator("def is_palindrome(s):\n    \"\"\"Check if string is palindrome\"\"\"", max_length=80)
print(result[0]["generated_text"])
def is_palindrome(s):
    """Check if string is palindrome"""
    s = s.lower().replace(" ", "")
    return s == s[::-1]

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

Расширенные примеры генерации кода Python

Представлены более сложные и неочевидные сценарии с полными реализациями и выводами.

Пример 1: Диалоговая генерация с многошаговым уточнением через OpenAI

Запрос: «создай скрипт, который читает CSV и строит гистограмму». Модель может предложить код, а затем пользователь уточняет: «используй seaborn вместо matplotlib».

Пример
import openai

openai.api_key = "sk-..."
messages = [
    {"role": "user", "content": "Напиши скрипт на Python, который загружает данные из CSV файла 'data.csv' (столбцы: name, age, salary) и строит гистограмму колонки age."}
]
response = openai.ChatCompletion.create(model="gpt-4", messages=messages)
first_code = response.choices[0].message.content
print("Первый вариант:")
print(first_code)

messages.append({"role": "user", "content": "Замени matplotlib на seaborn и добавь заголовок графика."})
response = openai.ChatCompletion.create(model="gpt-4", messages=messages)
second_code = response.choices[0].message.content
print("\nУлучшенная версия:")
print(second_code)
Первый вариант:
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.csv')
plt.hist(df['age'])
plt.show()

Улучшенная версия:
import pandas as pd
import seaborn as sns

df = pd.read_csv('data.csv')
sns.histplot(data=df, x='age')
plt.title('Распределение возраста')
plt.show()

Пример 2: Генерация асинхронного кода с помощью модели CodeGen

Модель CodeGen может генерировать код с ключевыми словами async/await. Запрос на создание веб-скрейпера с aiohttp.

Пример
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-2B-mono")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-2B-mono")

prompt = "async def fetch_urls(urls):\n    \"\"\"Fetch multiple URLs concurrently using aiohttp\"\"\""
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=200, do_sample=True, temperature=0.4)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
async def fetch_urls(urls):
    """Fetch multiple URLs concurrently using aiohttp"""
    import aiohttp
    async with aiohttp.ClientSession() as session:
        tasks = [session.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return responses

Пример 3: Создание фабрики кода на основе декораторов и метапрограммирования

Здесь не используется нейросеть, но реализуется автоматическая генерация getter/setter методов для класса на основе аннотаций.

Пример
def auto_properties(**types):
    def wrapper(cls):
        for name, typ in types.items():
            setattr(cls, name, property(
                lambda self, n=name: getattr(self, '_'+n),
                lambda self, val, n=name, t=typ: setattr(self, '_'+n, t(val))
            ))
        return cls
    return wrapper

@auto_properties(name=str, age=int, salary=float)
class Employee:
    def __init__(self, name, age, salary):
        self._name = name
        self._age = age
        self._salary = salary

emp = Employee("Anna", 30, 50000.50)
print(emp.name, emp.age, emp.salary)
emp.salary = 55000
print(emp.salary)
Anna 30 50000.5
55000.0

Пример 4: Генерация кода через RAG (Retrieval Augmented Generation) с локальной базой примеров

Для специфичной предметной области (например, генерация кода для работы с API Яндекс.Метрики) можно извлекать похожие примеры из локального хранилища и добавлять их в промпт.

Пример
import chromadb
from openai import OpenAI

client = OpenAI(api_key="...")
collection = chromadb.Client().create_collection("code_examples")
# Предполагается, что коллекция заполнена парами (описание, код)
results = collection.query(query_texts=["получить список счетчиков метрики"], n_results=2)
context = "\n".join([res['code'] for res in results['metadatas'][0]])

prompt = f"Используя следующие примеры:\n{context}\nНапиши код для получения списка целей счётчика."
response = client.chat.completions.create(model="gpt-4", messages=[{"role":"user", "content": prompt}])
print(response.choices[0].message.content)
(пример вывода зависит от содержимого БД, но обычно это корректный код с авторизацией и обработкой ответа)

Генерация кода Python - comments

En
сгенерировать код python (python)