Автоматическое создание скриптов 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)(пример вывода зависит от содержимого БД, но обычно это корректный код с авторизацией и обработкой ответа)