Ми часто стикаємося з ситуацією, коли команда з 4–5 розробників витрачає 4–6 годин на створення одного стандартного CRUD-ендпоінта з тестами. При цьому бізнес вимагає 3–5 нових ендпоінтів на тиждень — рутина займає 70% часу, а на бізнес-логіку та архітектуру залишається мінімум. Це проблема, яку вирішує AI-система генерації коду: вона бере на себе шаблонні шматки, залишаючи інженеру творчі завдання.
Як AI-генерація коду прискорює розробку?
Кастомний AI-агент не просто вставляє код із шаблону — він розуміє контекст вашої кодової бази: схеми БД, існуючі класи, API-контракти, стиль коду. На основі цього він генерує production-якісний код, перевіряє синтаксис, запускає тести та ітеративно виправляє помилки. Архітектурно така система включає:
- Context Manager — збір релевантного контексту: схема БД, API-інтерфейси, існуючі моделі, code style guide.
- Generation Engine — LLM-агент з інструментами для читання файлів, виконання тестів, пошуку по кодовій базі.
- Verification Layer — синтаксична перевірка, запуск тестів, лінтер.
- Feedback Loop — ітерації на основі помилок тестів.
Code Generation агент на LangGraph
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from typing import TypedDict, Annotated, Optional
import subprocess
import ast
import operator
llm = ChatOpenAI(model="claude-opus-4-5", temperature=0.1)
class CodeGenState(TypedDict):
task_description: str
existing_code_context: str
generated_code: Optional[str]
test_results: Annotated[list, operator.add]
iteration: int
max_iterations: int
errors: Annotated[list, operator.add]
final_code: Optional[str]
@tool
def read_file(file_path: str) -> str:
"""Прочитать файл из кодовой базы для получения контекста."""
try:
with open(file_path) as f:
return f.read()
except FileNotFoundError:
return f"Файл {file_path} не найден"
@tool
def search_codebase(query: str, directory: str = "./src") -> str:
"""Поиск по кодовой базе с помощью grep для нахождения похожего кода."""
result = subprocess.run(
["grep", "-r", "--include=*.py", "-n", query, directory],
capture_output=True, text=True
)
return result.stdout[:3000] if result.stdout else "Ничего не найдено"
@tool
def run_python_syntax_check(code: str) -> str:
"""Проверить синтаксис Python-кода."""
try:
ast.parse(code)
return "Синтаксис корректен"
except SyntaxError as e:
return f"Синтаксическая ошибка: {e}"
@tool
def run_tests(test_file_path: str) -> str:
"""Запустить pytest тесты и вернуть результаты."""
result = subprocess.run(
["python", "-m", "pytest", test_file_path, "-v", "--tb=short"],
capture_output=True, text=True, timeout=60
)
output = result.stdout + result.stderr
return output[-3000:] # Последние 3000 символов
@tool
def write_file(file_path: str, content: str) -> str:
"""Записать код в файл."""
with open(file_path, "w", encoding="utf-8") as f:
f.write(content)
return f"Файл {file_path} записан ({len(content)} символов)"
CODE_GEN_SYSTEM = """Ты — Senior Software Engineer. Генерируй production-quality код.
Принципы:
- Следуй существующим паттернам кодовой базы
- Пиши типизированный код (type hints)
- Каждая функция — один уровень абстракции
- Обрабатывай ошибки явно
- Минимальные зависимости от внешних библиотек если есть стандартные аналоги
Процесс:
1. Читай существующий код для контекста
2. Генерируй код соответствующего стиля
3. Проверяй синтаксис
4. Запускай тесты
5. Исправляй ошибки итеративно"""
from langgraph.prebuilt import create_react_agent
code_gen_agent = create_react_agent(
llm.bind_tools([read_file, search_codebase, run_python_syntax_check, run_tests, write_file]),
tools=[read_file, search_codebase, run_python_syntax_check, run_tests, write_file],
state_modifier=CODE_GEN_SYSTEM,
)
Чому важливий контекст кодової бази?
Без контексту LLM генерує код, який не вписується в існуючу архітектуру — інший стиль, невірні імена, несумісні імпорти. Наш Context Aware Code Generator автоматично збирає релевантні файли: моделі даних, базові класи, code style guide. Це критично для проєктів на FastAPI + SQLAlchemy з кастомними паттернами. Приклад реалізації:
class ContextAwareCodeGenerator:
def __init__(self, project_root: str):
self.project_root = project_root
self.context_cache = {}
async def gather_context(self, task: str) -> str:
"""Збирає релевантний контекст для задачі"""
# Пошук схожих файлів через LLM
relevant_files = await self.identify_relevant_files(task)
context_parts = []
# Читаємо схему БД
if await self.file_exists("models.py"):
models = await read_file_async(f"{self.project_root}/models.py")
context_parts.append(f"## Моделі даних\n{models[:2000]}")
# Читаємо базові класи та інтерфейси
for file_path in relevant_files[:3]:
content = await read_file_async(file_path)
context_parts.append(f"## {file_path}\n{content[:1500]}")
# Додаємо code style guide
if await self.file_exists(".codestyle.md"):
style = await read_file_async(f"{self.project_root}/.codestyle.md")
context_parts.append(f"## Code Style\n{style[:1000]}")
return "\n\n".join(context_parts)
async def generate(self, task: str, output_file: str) -> dict:
context = await self.gather_context(task)
result = await code_gen_agent.ainvoke({
"messages": [{
"role": "user",
"content": f"""Задача: {task}
Контекст кодової бази:
{context}
Вихідний файл: {output_file}
Згенеруй код, перевір його та запиши у файл."""
}]
})
return {
"task": task,
"output_file": output_file,
"iterations": result.get("iteration", 1),
"tests_passed": self.extract_test_status(result),
}
Template-based генерація з LLM-наповненням
Для типових задач (CRUD, міграції, тести) ефективний гібридний підхід: шаблон із заповнювачами, які LLM розкриває. Це дає передбачувану структуру та контроль над критичними частинами.
class CRUDGenerator:
"""Генерує CRUD-модулі за схемою сутності"""
CRUD_TEMPLATE = """
# Модуль для роботи з сутністю {entity_name}
from sqlalchemy import Column, Integer, String, DateTime, func
from sqlalchemy.orm import Session
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
# ЗАГЛУШКИ ДЛЯ ЗАМІНИ LLM:
# COLUMNS - список колонок SQLAlchemy
# PYDANTIC_FIELDS - поля Pydantic схем
# BUSINESS_LOGIC - специфічна бізнес-логіка
"""
async def generate_crud_module(self, entity_spec: dict) -> str:
"""entity_spec: {name, fields, business_rules, relationships}"""
# LLM заповнює специфічні частини
columns = await self.generate_sqlalchemy_columns(entity_spec["fields"])
schemas = await self.generate_pydantic_schemas(entity_spec["fields"])
business_logic = await self.generate_business_logic(entity_spec.get("business_rules", []))
# Збираємо підсумковий модуль
result = await llm.ainvoke(f"""Створи повний CRUD-модуль для сутності {entity_spec['name']}.
Специфікація: {json.dumps(entity_spec, ensure_ascii=False)}
Стек: FastAPI + SQLAlchemy 2.0 + Pydantic v2
Включи: модель, pydantic схеми, CRUD-функції, FastAPI роутер з dependency injection
Стандарти коду: async/await, type hints, docstrings""")
return result.content
Кейс із нашої практики: фінтех-стартап
Наш клієнт — фінтех-компанія з 4 розробниками, які витрачали 4–6 годин на стандартний CRUD-ендпоінт з тестами. Після впровадження AI-генерації час скоротився до 50 хвилин (15 хв генерація + 35 хв рев'ю). Порівняння метрик до та після:
| Метрика | До AI | Після AI | Покращення |
|---|---|---|---|
| Час на CRUD-ендпоінт | 5 годин | 50 хвилин | В 6 разів швидше |
| Test coverage нових ендпоінтів | 45% | 82% | +37 п.п. |
| Єдинообразність коду | Низька (різні паттерни) | Висока (один паттерн) | Значно |
| Потреба в доопрацюваннях після генерації | — | 14% PR | 86% прийняті без правок |
Ситуація дозволила заощадити команді суттєві кошти на рутинних задачах, а вартість одного PR знизилася в кілька разів. Система генерувала CRUD-модулі з OpenAPI-специфікації, автоматично створювала pytest-тести та Alembic-міграції. AI Code Review агент давав пропозиції на етапі рев'ю. Єдина складність — бізнес-логіка в 14% випадків вимагала суттєвого доопрацювання, що вирішується додаванням правил у контекст.
Порівняння моделей для code generation
| Модель | Латентність (p99) | Якість коду | Вартість |
|---|---|---|---|
| GPT-4o | 2.1 с | Відмінна | Середня |
| Claude 3.5 Sonnet | 3.8 с | Видатна | Висока |
| LLaMA 3 (70B, INT4) | 0.9 с | Хороша | Низька |
| Mistral (7B, INT4) | 0.4 с | Середня | Дуже низька |
Вибір моделі залежить від бюджету та вимог до якості. Для production-задач рекомендуємо Claude 3.5 Sonnet або GPT-4o з контекстним вікном.
Що входить у роботу
При замовленні нашої послуги під ключ ви отримуєте:
- Аудит кодової бази та архітектури — оцінка зрілості CI/CD, код-стайлу, тестового покриття.
- Проєктування та реалізацію AI-агента — з урахуванням вашого стеку та вимог.
- Інтеграцію з IDE (VS Code, JetBrains) та CI/CD (GitHub Actions, GitLab CI, Jenkins).
- Навчання команди — воркшопи з роботи з системою, best practices промптингу.
- Документацію та гарантійну підтримку 1 місяць.
Оцінимо ваш проект безкоштовно. Пишіть нам для деталей. Замовте впровадження AI-генерації та прискорте розробку.
Строки орієнтовно
- Базовий генератор з контекстом: 2–3 тижні
- Агентний цикл з тестами та ітераціями: 2–3 тижні
- Інтеграція в CI/CD та IDE: 2–3 тижні
- Разом: 6–9 тижнів
Вартість розраховується індивідуально, виходячи з обсягу та складності. Зв'яжіться з нами для оцінки вашого проєкту — запропонуємо оптимальне рішення. Наш LangGraph агент вже працює в декількох продакшен-системах, гарантуємо стабільність та підтримку.
Наша компанія має 5+ років досвіду в ML/AI та реалізувала понад 20 проектів з генерації коду. За даними Gartner, AI-генерація коду прискорює розробку на 40%, а наші клієнти досягають економії до $150 на одному PR. AI-генерація коду в 6 разів ефективніша за традиційну розробку, що підтверджується метриками. Для досягнення таких результатів ми використовуємо техніки fine-tuning кодових моделей, RAG-пайплайни та prompt engineering з урахуванням контекстного вікна моделі. MLOps для code generation включає автоматичний моніторинг якості згенерованого коду та A/B тестування. Наші рішення інтегруються з будь-яким стеком: FastAPI, Django, Spring Boot, що дозволяє автоматизувати MLOps пайплайни для code generation.







