Галоўная / Артыкулы

Калькі хто пісвае, калі агенты прыўязуюцца да рабочага прайсупутку?

Адаптаванне ад автодапаміны да агентных зград: прыяжыце кожнаму рангу кодавучых агентоў да радыюса дзеяння, паверхні тэставання і контрольных пунктав, каб людзі зосерціліся на кодзе, якая справаўна мае значэнне.

Выдавец: REACTAPP.TOP10 хв чытання2200 слоў

Крыніцы: AI Coding Agents: Who Writes Code in the New Dev Workflow?

Інструменты для програмавання на асывяцыі больш не обмежваюцца толькі функцыяй автадаптавання. Яны включаюць рэакtyвных партнероў-програмістаў, агентаў задач, якіе выкананяюць паказаныя задачы, автонамных агентаў праектаў, якіе керуюць паводламі, а таксама експэрыментальныя сістэмы, дзе колька агентаў адгукуюцца і прадаюць правкі адзін другаму. Важлівы не пытанне пра тое, каторую марку інструменту інсталаваць, а пра тое, каторы ранг падходзіць да рызыку, які несе змяна.

Ад автадаптавання да автонамнасці

Раннія асістэнты проста дапраўлялі тэкст пад курсорам. Новейшыя агенты відкрываюць файлы, запускаюць тэсты і ствараюць запросы прыўязкі коду. Автонамнасць зрастае разам з масштабамі ўплыву. Так сама павышаецца глубіна перагляду, рэгулювання ў ізольаваных срэдах і чыстасць цялей, якія вы ўпраўляеце ім.

Ранг 1 — асывяцыйскія партнеры-програмісты

Функцыяй рэакtyвага автадаптавання і чату ў асяроддзі IDE. Вы керуеце кожным збіркам коду. Яны найлепшыя для стандартных фрагментаў коду, перэйменавання і пояснення незнаёмага коду. Слабыя ў рэфактораванні колька файлаў без адпаведных вадзімаў.

# Conceptual representation of a Tier 3 agent's execution loop
def execute_project_goal(goal: str):
    plan = agent.generate_plan(goal)
    while not plan.is_complete():
        action = plan.get_next_action()
        result = workspace.run(action)      # Runs commands, edits files
        if result.has_errors():
            plan.replan(result.logs)       # Self-correction loop
        else:
            plan.mark_step_done()

Ранг 2 — агенты, спецыялізаваныя на задачах

Адміністратары, які спрамованы на досягнення целей: «дадзіце логаванне для гэтага працоўніка», «апішыце тэсты для гэтага модуля». Яны плануюць короткія цыклы працы з інструментамі і зупіняюцца, калі пераканальваюцца, што цель досягнута. Пры ўзаўмешчанні дакументацыя яшчэ трэбуе парадзежа людзіна.

import time
from typing import Dict, Any

def run_agent_loop(task_prompt: str, max_iterations: int = 15) -> bool:
    # Initialize the agent's state, workspace, and execution context
    state: Dict[str, Any] = {
        "task": task_prompt,
        "workspace_files": get_project_files(),
        "history": [],
        "completed": False
    }

    for step in range(max_iterations):
        # 1. Perception: Observe current system state and tool outputs
        observation = observe_environment(state)

        # 2. Planning: Reason through the current state to generate a thought and next action
        thought, action = LLM_reasoning_engine(state, observation)
        state["history"].append({"step": step, "thought": thought, "action": action})

        if action.name == "task_complete":
            print(f"Task successfully completed in {step} steps.")
            return True

        # 3. Action: Execute the tool and capture the side effects
        try:
            action_result = execute_action(action)
            state = update_state(state, action_result)
        except Exception as execution_error:
            # Feed the error back to the LLM to allow for self-correction
            state = update_state(state, {"error": str(execution_error)})

        time.sleep(1) # Implement rate limiting and token management

    print("Agent failed: Reached maximum iteration budget.")
    return False

Рэвень 3 — автонамныя агенты праектаў

Інжынеры, якіе працуюць ад початку да канца над практычным праектам: ствараюць структуру, рэалізуюць функцыяны, тэстуюць і праглыбляюць працу. Ім неабходны чысткія тэсты на апроўаджэнне і ізольаванае сераўыс. Без тэстаў яны не можуць эфектыва працаваць.

import subprocess
import json
import sys

def execute_agentic_workflow(specification_path: str) -> bool:
    """
    Orchestrates an agent by feeding it a structured specification,
    applying the generated code changes, and running unit tests to verify correctness.
    """
    # Step 1: Load the structured technical specification
    with open(specification_path, "r") as f:
        spec = json.load(f)

    print(f"🤖 Agent starting task: {spec['task_id']} - {spec['description']}")

    # Step 2: Agent generates code based on spec (simulated here)
    generated_code_diff = simulate_agent_generation(spec)

    # Step 3: Apply the generated patches to the codebase
    if not apply_patch(generated_code_diff):
        print("❌ Critical: Agent-generated patch failed to apply cleanly.")
        return False

    # Step 4: Run automated validation suites
    print("🧪 Running verification test suite...")
    test_result = subprocess.run(["pytest", "tests/test_agent_features.py"], capture_output=True, text=True)

    if test_result.returncode == 0:
        print("✅ Success: Agent changes verified successfully.")
        return True
    else:
        print("❌ Failure: Automated tests failed. Raw stderr output:")
        print(test_result.stderr)
        return False

def simulate_agent_generation(spec: dict) -> str:
    # Simulates returning a git patch block matching the spec constraints
    return "diff --git a/app.py b/app.py..."

def apply_patch(diff: str) -> bool:
    # Logic to apply git patch
    return True

if __name__ == "__main__":
    execute_agentic_workflow("specs/new_feature_spec.json")

Рэвень 4 — агентныя скупы

Кооператыўныя сеткі з калькама агентаў: дзецернавальнік, рэалізатор, пераглядач. Моцныя, але дорогія. Багі ў коордынацыі стаюць новым спосабам неудачы.

+----------------+      +-----------------+      +-----------------+      +-----------------+
|     Define     | ---> |     Prompt      | ---> |      Test       | ---> |     Verify      |
|  (Requirements |      | (Context, Specs |      |   (Automated    |      | (Human Approves |
|  & Interfaces) |      |   & Constraints)|      |  Suites & Runs) |      |   Final Diffs)  |
+----------------+      +-----------------+      +-----------------+      +-----------------+

Структура кодаванага агента

Спрыягчыкі (інструменты рэпазітарыю), планаванне (расчленаванне задач), дзеяння (змены/каманды) і памяць (тэмпарарыянты, кантэкст PR). Без будзь-каго з гэтых элементаў рэвень не можа функцыянацыяваць.

Generated by AI Agent: Provisions a secure, auto-scaling AWS ECS Fargate service
resource "aws_ecs_task_definition" "app" {
  family                   = "production-api"
  requires_compatibilities = ["FARGATE"]
  network_mode             = "awsvpc"
  cpu                      = "256"
  memory                   = "512"

  container_definitions = jsonencode([{
    name      = "api-service"
    image     = "backend-service:latest"
    essential = true
    portMappings = [{
      containerPort = 8080
      hostPort      = 8080
    }]
  }])
}

Выбір рэвеня

Співставляй ранг падынгу з значэнням крытычнасці рэпазітарыя, сілай тэстаў і ступенем можнасці адворачыць змяну. Дакладваючыся да падынгаў 1–2 на шляхах адплатаў, пакуль не будуць створэныя засобы для ацэнкі. Ожывай падынг 3 там, дзе правілы CI ўскладненыя і сандбокс не можа з’явіцца да таямніць прыемлівай сістэмы.

# safe_executor.py
import ast

# An allowlist of pre-approved libraries prevents hallucinated dependency injection.
ALLOWED_PACKAGES = {"requests", "pandas", "numpy", "json", "pydantic"}

def verify_agent_imports(agent_code: str) -> bool:
    """Parses agent code into an AST to audit imports before execution."""
    try:
        tree = ast.parse(agent_code)
        for node in ast.walk(tree):
            if isinstance(node, ast.Import):
                for alias in node.names:
                    base_package = alias.name.split('.')[0]
                    if base_package not in ALLOWED_PACKAGES:
                        raise SecurityError(f"Blocked unapproved import: {alias.name}")
            elif isinstance(node, ast.ImportFrom) and node.module:
                base_package = node.module.split('.')[0]
                if base_package not in ALLOWED_PACKAGES:
                    raise SecurityError(f"Blocked unapproved import from: {node.module}")
        return True
    except (SyntaxError, SecurityError) as e:
        print(f"Safety Gate Tripped: {e}")
        return False

class SecurityError(Exception):
    pass

# Example of agent output containing a hallucinated or malicious library.
untrusted_code = "import requests\nimport fast_json_validator_fake_pkg"
is_safe = verify_agent_imports(untrusted_code)
print(f"Is code safe to execute? {is_safe}") # Prints: Is code safe to execute? False

Звычкі рабочага прайсупутку, якія заставляюць людзей кераваць

Запісваючы пераканальныя перагледы, прычыніце вызыв агента. Абавязкова трэба маты разлікі ў частках, якія можна пераглядаць. Логаваце кожны вызыв інструмента. Забраніце неактыўнае выкананне шэлу на чутлівых хостах. Калі расту ўцёкласць дыфектаў, спрыймайце швальнасць агента як показнік рызыку.

Будучыня „хто пісвае код“ — цэ ўзаўмовая аўтарская прыналежнасць з чысткімі крэтамі, а не неконтрольаваныя зберагаўкі ў галоўную версію. Зберагаеце фікстуры ў стане „зеленага“, меркуце кожны этап окрэма і адмовіцеся ад выпуску на адчутках лячы, калі наступны выпуск можа зноў запрацаваць той самы нявідны спосаб зламу пад новым назвам. Зберагаеце фікстуры ў стане „зеленага“, меркуце кожны этап окрэма і адмовіцеся ад выпуску на адчутках лячы, калі наступны выпуск можа зноў запрацаваць той самы нявідны спосаб зламу пад новым назвам. Зберагаеце фікстуры ў стане „зеленага“, меркуце кожны этап окрэма і адмовіцеся ад выпуску на адчутках лячы, калі наступны выпуск можа зноў запрацаваць той самы нявідны спосаб зламу пад новым назвам. Зберагаеце фікстуры ў стане „зеленага“, меркуце кожны этап окрэма і адмовіцеся ад выпуску на адчутках лячы, калі наступны выпуск можа зноў запрацаваць той самы нявідны спосаб зламу пад новым назвам. Зберагаеце фікстуры ў стане „зеленага“, меркуце кожны этап окрэма і адмовіцеся ад выпуску на адчутках лячы, калі наступны выпуск можа зноў запрацаваць той самы нявідны спосаб зламу пад новым назвам. Зберагаеце фікстуры ў стане „зеленага“, меркуце кожны этап окрэма і адмовіцеся ад выпуску на адчутках лячы, калі наступны выпуск можа зноў запрацаваць той самы нявідны спосаб зламу пад новым назвам.

Асе можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам. Храніце прыстроі ў стане „зеленага“, мерайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражаннях, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам. Храніце прыстроі ў стане „зеленага“, мерайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражаннях, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам. Храніце прыстроі ў стане „зеленага“, мерайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражаннях, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам. Храніце прыстроі ў стане „зеленага“, мерайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражаннях, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам. Храніце прыстроі ў стане „зеленага“, мерайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражаннях, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам.Адаптавацыя пад новым назвам. Чыніце прылады ў стане «зеленага» колеру, вы мерайце кожны этап окрэма і адмовляйцеся ад выпуску на адной ляхтарыце вялікага настрою, калі наступны выпуск можа зноў запрацаваць той самы нягласны спосаб працэйнай несправнасці пад новым назвам. Чыніце прылады ў стане «зеленага» колеру, вы мерайце кожны этап окрэма і адмовляйцеся ад выпуску на адной ляхтарыце вялікага настрою, калі наступны выпуск можа зноў запрацаваць той самы нягласны спосаб працэйнай несправнасці пад новым назвам. Чыніце прылады ў стане «зеленага» колеру, вы мерайце кожны этап окрэма і адмовляйцеся ад выпуску на адной ляхтарыце вялікага настрою, калі наступны выпуск можа зноў запрацаваць той самы нягласны спосаб працэйнай несправнасці пад новым назвам. Чыніце прылады ў стане «зеленага» колеру, вы мерайце кожны этап окрэма і адмовляйцеся ад выпуску на адной ляхтарыце вялікага настрою, калі наступны выпуск можа зноў запрацаваць той самы нягласны спосаб працэйнай несправнасці пад новым назвам. Чыніце прылады ў стане «зеленага» колеру, вы мерайце кожны этап окрэма і адмовляйцеся ад выпуску на адной ляхтарыце вялікага настрою, калі наступны выпуск можа зноў запрацаваць той самы нягласны спосаб працэйнай несправнасці пад новым назвам. Чыніце прылады ў стане «зеленага» колеру, мэ...Зьвярніце увагу на кожны этап окалечна, і не прабуйце выдаваць продукт на адчуваннях лячна, калі наступная версія можа зноў запрацаваць той самы непазначальны спосаб абярэння пад новым назвам.Храніце прыстроі зеленымі, меравайце кожны этап окалечна, і адмовіцеся апрадаваць толькі на падставе вярбовання, калі наступная версія можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам.З’явіце той самы рэжым бесшумнага выключэння пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на інтуіцыі, калі наступны выпуск можа знову запрацавіць той самы рэжым бесшумнага выключэння пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на інтуіцыі, калі наступны выпуск можа знову запрацавіць той самы рэжым бесшумнага выключэння пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на інтуіцыі, калі наступны выпуск можа знову запрацавіць той самы рэжым бесшумнага выключэння пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на інтуіцыі, калі наступны выпуск можа знову запрацавіць той самы рэжым бесшумнага выключэння пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на інтуіцыі, калі наступны выпуск можа знову запрацавіць той самы рэжым бесшумнага выключэння падновая назва. Зберагачыце прыстроі зеленымі, мерайце кожны этап окрэма і адмовяйцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа знову запрацавіць той самы тыхі спосаб працявання пад новай назвой. Зберагачыце прыстроі зеленымі, мерайце кожны этап окрэма і адмовяйцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа знову запрацавіць той самы тыхі спосаб працявання пад новай назвой. Зберагачыце прыстроі зеленымі, мерайце кожны этап окрэма і адмовяйцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа знову запрацавіць той самы тыхі спосаб працявання пад новай назвой. Зберагачыце прыстроі зеленымі, мерайце кожны этап окрэма і адмовяйцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа знову запрацавіць той самы тыхі спосаб працявання пад новай назвой. Зберагачыце прыстроі зеленымі, мерайце кожны этап окрэма і адмовяйцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа знову запрацавіць той самы тыхі спосаб працявання пад новай назвой. Зберагачыце прыстроі зеленымі, мерайце кожны этап окрэма.Разлучыце этапы адна адной, і не прабуйце выкорыстоўваць толькі вібрацыі для перавозкі, калі наступная версія можа зноў запрацаваць той самы непазначальны спосаб працявання пад новым назвам. Чыніце прылады працэспраснымі, меркуйце кожную стадыю адна адной, і не прабуйце выкорыстоўваць толькі вібрацыі для перавозкі, калі наступная версія можа зноў запрацаваць той самы непазначальны спосаб працявання пад новым назвам.