# SWE-agent Code Fixer

## Обзор

[SWE-agent](https://github.com/SWE-agent/SWE-agent) — это агент по разработке программного обеспечения с ИИ, который **автоматически решает проблемы GitHub** позволяя языковой модели взаимодействовать с репозиторием через терминальный интерфейс. Представлено на **NeurIPS 2024** и с более чем **15 000 звёзд на GitHub**, SWE-agent стал ведущим open-source решением для автоматического исправления ошибок и ремонта кода.

В отличие от большинства инструментов в этой документации, SWE-agent **не требует GPU** — он вызывает внешние API больших языковых моделей (Claude, GPT-4, Gemini или самохостимые модели), чтобы рассуждать о коде и генерировать исправления. Что ему *нужно,* это надёжная среда Docker для безопасного выполнения кода в песочнице. CPU-серверы Clore.ai (или любой арендованный инстанс с Docker) идеально подходят.

**Ключевые особенности:**

* 🐛 Автоматическое решение issues на GitHub одной командой
* 🔒 Выполнение в песочнице внутри Docker-контейнеров — безопасно запускать произвольный код
* 🤖 Поддерживает Claude, GPT-4, Gemini, совместимые с OpenAI и локальные модели
* 🌐 Веб-интерфейс для мониторинга прогресса агента
* 🛡️ Режим кибербезопасности для CTF-задач и пентестинга
* 📊 Совместим с SWE-bench — протестировано на более чем 300 реальных задачах GitHub
* 🔧 Конфигурируемое поведение агента через YAML-файлы конфигурации

***

## Требования

### Требования к аппаратному обеспечению

SWE-agent не требует GPU — он использует LLM по API для рассуждений:

| Тариф                    | CPU        | ОЗУ   | Хранилище  | Clore.ai Цена |
| ------------------------ | ---------- | ----- | ---------- | ------------- |
| **Минимум**              | 4 ядра     | 8 ГБ  | 30 ГБ SSD  | \~$0.03/час   |
| **Рекомендуется**        | 8 ядер     | 16 ГБ | 60 ГБ SSD  | \~$0.06/час   |
| **Интенсивные нагрузки** | 16 ядер    | 32 ГБ | 100 ГБ SSD | \~$0.10/час   |
| **С локальной LLM**      | GPU-сервер | 32 ГБ | 100 ГБ SSD | ≈ $0.20/ч     |

> 💡 **Совет по стоимости:** SWE-agent необычно дешев в эксплуатации на Clore.ai, так как GPU не обязательны. Основная статья расходов — вызовы LLM API (например, Claude Sonnet стоит примерно $0.003 за 1K токенов). Типичное исправление issue стоит $0.50–$2.00 в виде API-оплат.

### Требования к ПО и API

| Требование       | Детали                                             |
| ---------------- | -------------------------------------------------- |
| **Docker**       | Необходимо для выполнения кода в песочнице         |
| **Ключ LLM API** | Anthropic, OpenAI, Google или самохостимый         |
| **Токен GitHub** | Для доступа к приватным репозиториям и создания PR |
| **Python 3.11+** | Для `pip install sweagent` метод                   |

### Справка по ценообразованию LLM API

| Модель            | Вход              | Выход             | Типичная стоимость запуска       |
| ----------------- | ----------------- | ----------------- | -------------------------------- |
| Claude Sonnet 4   | $3/млн токенов    | $15/млн токенов   | \~$1.00–$2.00                    |
| GPT-4o            | $5/млн токенов    | $15/млн токенов   | \~$1.00–$3.00                    |
| GPT-4o mini       | $0.15/млн токенов | $0.60/млн токенов | \~$0.05–$0.20                    |
| Ollama (локально) | Бесплатно         | Бесплатно         | Только почасовая оплата Clore.ai |

***

## Быстрый старт

### Шаг 1 — Арендуйте сервер на Clore.ai

1. Войдите в систему в [clore.ai](https://clore.ai)
2. Фильтр: **С поддержкой Docker** — GPU опционален (подойдёт CPU-сервер)
3. Рекомендуемый образ: `ubuntu:22.04` или любой образ с поддержкой Docker
4. Открытые порты: **22** (SSH), **7860** (веб-интерфейс SWE-agent)
5. Рекомендуется минимум 16 ГБ RAM для запуска Docker-in-Docker

### Шаг 2 — Подключитесь по SSH

```bash
ssh -p <CLORE_SSH_PORT> root@<CLORE_SERVER_IP>

# Убедитесь, что Docker доступен
docker --version
docker run --rm hello-world
```

### Шаг 3 — Загрузите Docker-образ SWE-agent

```bash
# Загрузите официальный образ SWE-agent (предсобранный, рекомендуется)
docker pull sweagent/swe-agent:latest

# Проверка
docker images | grep sweagent
```

Альтернативно, соберите из исходников для самой свежей версии разработки:

```bash
git clone https://github.com/SWE-agent/SWE-agent.git
cd SWE-agent
docker build -t sweagent/swe-agent:local .
```

### Шаг 4 — Настройте API-ключи

```bash
# Создайте каталог для конфигурации SWE-agent
mkdir -p /workspace/sweagent && cd /workspace/sweagent

# Создайте файл окружения с вашими API-ключами
cat > /workspace/sweagent/.env << 'EOF'
# LLM API Keys (добавьте только те, которые у вас есть)
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GOOGLE_API_KEY=...

# Токен GitHub для доступа к репо и создания PR
GITHUB_TOKEN=ghp_...

# Опционально: самохостимый LLM эндпоинт
# OPENAI_BASE_URL=http://your-ollama-server:11434/v1
EOF

chmod 600 /workspace/sweagent/.env
```

### Шаг 5 — Исправьте своё первое issue на GitHub

```bash
# Базовое использование — исправить issue на GitHub с Claude Sonnet
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /workspace/sweagent/output:/output \
  -v /var/run/docker.sock:/var/run/docker.sock \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=claude-sonnet-4-20250514 \
    --agent.model.per_instance_cost_limit=2.00 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/1 \
    --actions.apply_patch_locally=true \
    --output_dir=/output
```

### Шаг 6 — Просмотрите вывод

```bash
# SWE-agent записывает результаты в каталог output
ls -la /workspace/sweagent/output/

# Просмотреть сгенерированный патч
cat /workspace/sweagent/output/*.patch

# Просмотреть полную траекторию агента (что сделал агент)
cat /workspace/sweagent/output/*.traj | python3 -m json.tool | less
```

***

## Конфигурация

### Базовый файл конфигурации

Вместо длинных флагов командной строки используйте YAML-конфиг:

```bash
cat > /workspace/sweagent/config.yaml << 'EOF'
# Конфигурация SWE-agent
agent:
  model:
    name: claude-sonnet-4-20250514
    per_instance_cost_limit: 2.00
    total_cost_limit: 10.00
    temperature: 0.0
  config:
    # Системный prompt для агента
    system_template: "default"
    # Сколько повторов при ошибках API
    retry_with_output_if_run_fails: true

env:
  repo:
    # Будет задано при запуске
    github_url: ""
  deployment:
    docker_args:
      - "--memory=4g"
      - "--cpus=2"

problem_statement:
  github_url: ""

actions:
  apply_patch_locally: true
  open_pr: false  # Установите в true для автоматического создания PR

output_dir: /output
EOF
```

```bash
# Запуск с файлом конфигурации
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /workspace/sweagent/output:/output \
  -v /workspace/sweagent/config.yaml:/config.yaml \
  -v /var/run/docker.sock:/var/run/docker.sock \
  sweagent/swe-agent:latest \
  python run.py \
    --config /config.yaml \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/42
```

### Веб-режим

SWE-agent включает веб-интерфейс на базе Gradio для интерактивного использования:

```bash
# Запустить веб-интерфейс
docker run -d \
  --name sweagent-ui \
  --env-file /workspace/sweagent/.env \
  -p 7860:7860 \
  -v /workspace/sweagent/output:/output \
  -v /var/run/docker.sock:/var/run/docker.sock \
  sweagent/swe-agent:latest \
  python app.py --port 7860 --host 0.0.0.0

# Доступ к UI
echo "Откройте: http://<CLORE_SERVER_IP>:<MAPPED_PORT>"
docker logs -f sweagent-ui
```

### Использование разных провайдеров LLM

```bash
# GPT-4o (OpenAI)
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=gpt-4o-2024-11-20 \
    --agent.model.per_instance_cost_limit=3.00 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/1

# GPT-4o Mini (вариант для бюджета)
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=gpt-4o-mini-2024-07-18 \
    --agent.model.per_instance_cost_limit=0.50 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/1

# Локальный Ollama (в паре с гайдом по Ollama)
# Сначала разверните Ollama на GPU-сервере (см. ../language-models/ollama.md)
# Затем используйте его как бэкенд для SWE-agent:
docker run --rm \
  -e OPENAI_API_KEY=dummy \
  -e OPENAI_BASE_URL=http://<OLLAMA_HOST>:11434/v1 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=qwen2.5-coder:32b \
    --agent.model.per_instance_cost_limit=0.00 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/1
```

### Пакетная обработка нескольких issues

```bash
# Обработайте несколько issue в формате SWE-bench
cat > /workspace/sweagent/batch_issues.json << 'EOF'
[
  {
    "repo": "USER/REPO",
    "issue_number": 1,
    "model": "claude-sonnet-4-20250514"
  },
  {
    "repo": "USER/REPO",
    "issue_number": 2,
    "model": "claude-sonnet-4-20250514"
  }
]
EOF

# Скрипт для пакетного запуска
cat > /workspace/sweagent/run_batch.sh << 'BASH'
#!/bin/bash
set -e

ISSUES_FILE="${1:-/workspace/sweagent/batch_issues.json}"
OUTPUT_DIR="/workspace/sweagent/output"
ENV_FILE="/workspace/sweagent/.env"

echo "Запуск пакетного выполнения SWE-agent..."
python3 -c "
import json
issues = json.load(open('$ISSUES_FILE'))
for i, issue in enumerate(issues):
    print(f'Issue {i+1}/{len(issues)}: {issue[\"repo\"]}#{issue[\"issue_number\"]}')
" 

jq -c '.[]' "$ISSUES_FILE" | while read issue; do
    REPO=$(echo "$issue" | jq -r '.repo')
    ISSUE_NUM=$(echo "$issue" | jq -r '.issue_number')
    MODEL=$(echo "$issue" | jq -r '.model')

    echo "=== Обработка: $REPO#$ISSUE_NUM с $MODEL ==="
    
    docker run --rm \
      --env-file "$ENV_FILE" \
      -v "$OUTPUT_DIR:/output" \
      -v /var/run/docker.sock:/var/run/docker.sock \
      sweagent/swe-agent:latest \
      python run.py \
        --agent.model.name="$MODEL" \
        --agent.model.per_instance_cost_limit=2.00 \
        --env.repo.github_url="https://github.com/$REPO" \
        --problem_statement.github_url="https://github.com/$REPO/issues/$ISSUE_NUM" \
        --output_dir=/output || echo "FAILED: $REPO#$ISSUE_NUM"
done

echo "Пакетная обработка завершена. Результаты в $OUTPUT_DIR"
BASH

chmod +x /workspace/sweagent/run_batch.sh
/workspace/sweagent/run_batch.sh
```

***

## Настройка Docker-in-Docker

SWE-agent запускает код в вложенных Docker-контейнерах для безопасности. Это требует доступа к Docker-сокету:

```bash
# Убедитесь, что Docker-сокет доступен
ls -la /var/run/docker.sock

# Проверьте, что Docker-in-Docker работает
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  docker:latest docker run --rm hello-world

# SWE-agent автоматически загрузит свой образ песочницы
# По умолчанию песочница: sweagent/swe-agent:latest (или специализированный образ окружения)
```

### Вопросы безопасности

```bash
# Ограничения ресурсов песочницы SWE-agent (настраиваются в YAML)
cat >> /workspace/sweagent/config.yaml << 'EOF'
env:
  deployment:
    docker_args:
      - "--memory=4g"          # Ограничить RAM песочницы
      - "--cpus=2"             # Ограничить CPU песочницы
      - "--network=bridge"     # Изолированная сеть
      - "--read-only"          # Файловая система только для чтения (с исключениями)
      - "--tmpfs=/tmp:size=1g" # Записываемый только /tmp
EOF

# Никогда не запускайте SWE-agent непосредственно на хосте — всегда используйте Docker
# Контейнер песочницы изолирует потенциально вредоносный код
```

### Использование предсобранного образа окружения

```bash
# SWE-agent поддерживает кастомные образы окружения для каждого репозитория
# Это ускоряет запуски за счёт предустановки зависимостей
cat > /workspace/sweagent/env-config.yaml << 'EOF'
env:
  deployment:
    image: sweagent/swe-agent:latest
    pre_install:
      - "pip install -e ."
      - "pip install pytest"
    post_clone:
      - "git config --global user.email 'agent@sweagent.ai'"
      - "git config --global user.name 'SWE-agent'"
EOF
```

***

## Подсказки и лучшие практики

### 🎯 Как правильно формулировать проблему

Качество исправления SWE-agent во многом зависит от описания issue:

````bash
# Метод 1: Используйте URL issue на GitHub (рекомендуется)
--problem_statement.github_url=https://github.com/USER/REPO/issues/42

# Метод 2: Предоставьте текстовый файл с подробным описанием
cat > /workspace/sweagent/issue.txt << 'EOF'
## Описание бага
Функция `calculate_total()` в `billing/calculator.py` возвращает 0 
когда скидка точно равна 100%. 

## Шаги для воспроизведения
```python
total = calculate_total(price=100, discount=100)
assert total == 0  # Это падает, возвращает 100 вместо 0
````

## Ожидаемое поведение

Должна возвращать 0, когда скидка 100%.

## Соответствующий код

См. `billing/calculator.py` строки 45-67. EOF

docker run --rm\
\--env-file /workspace/sweagent/.env\
-v /workspace/sweagent/output:/output\
-v /workspace/sweagent/issue.txt:/issue.txt\
-v /var/run/docker.sock:/var/run/docker.sock\
sweagent/swe-agent:latest\
python run.py\
\--agent.model.name=claude-sonnet-4-20250514\
\--env.repo.github\_url=<https://github.com/USER/REPO\\>
\--problem\_statement.text\_file=/issue.txt

````

### 💰 Контроль затрат

```bash
# Всегда указывайте лимиты по стоимости на инстанс
--agent.model.per_instance_cost_limit=2.00  # Макс $2 за issue

# Используйте GPT-4o mini для первичной триажной обработки, Claude для сложных исправлений
# Стратегия бюджета: ~$0.10 на сканирование, ~$1.50 на исправление

# Мониторьте расходы в реальном времени
docker logs -f sweagent-ui | grep -E "(cost|tokens|spent)"

# Установите общий бюджет на все запуски
--agent.model.total_cost_limit=20.00  # Остановить все запуски после $20
````

### 🔄 Автоматическое создание PR

```bash
# Автоматически создать pull request с исправлением
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=claude-sonnet-4-20250514 \
    --agent.model.per_instance_cost_limit=2.00 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/42 \
    --actions.open_pr=true \
    --actions.push_gh_repo_url=https://github.com/USER/REPO
```

### 📊 Оценка на SWE-bench

```bash
# Запустите SWE-agent на официальном бенчмарке SWE-bench
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run_batch.py \
    --agent.model.name=claude-sonnet-4-20250514 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --instances.type=swe_bench \
    --instances.subset=lite \
    --instances.split=test \
    --output_dir=/output \
    --num_workers=4
```

### 🛡️ Режим кибербезопасности

```bash
# SWE-agent поддерживает CTF и задачи по кибербезопасности
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=claude-sonnet-4-20250514 \
    --agent.config=config/default_from_url_ctf.yaml \
    --env.deployment.image=sweagent/ctf-env:latest \
    --problem_statement.text="Найдите флаг в запущенном веб-сервисе по адресу http://challenge.local:8080" \
    --output_dir=/output
```

***

## Устранение неполадок

### Отказ в доступе к Docker-сокету

```bash
# Ошибка: отказано в доступе при попытке подключения к Docker-демону
# Решение: убедитесь, что Docker-сокет правильно примонтирован

docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  sweagent/swe-agent:latest \
  docker ps

# Если вы видите ошибки прав, проверьте права сокета
ls -la /var/run/docker.sock
# Должно быть: srw-rw---- root docker

# Добавьте текущего пользователя в группу docker (если вы не root)
usermod -aG docker $USER
newgrp docker
```

### Ошибки с API-ключами

```bash
# Проверьте, что ваш API-ключ задан корректно
docker run --rm \
  --env-file /workspace/sweagent/.env \
  sweagent/swe-agent:latest \
  python -c "
import os
keys = ['ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'GITHUB_TOKEN']
for k in keys:
    val = os.environ.get(k, 'NOT SET')
    masked = val[:8] + '...' if len(val) > 8 else val
    print(f'{k}: {masked}')
"

# Протестируйте ключ Anthropic API
curl https://api.anthropic.com/v1/models \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01"
```

### Агент застрял в цикле

```bash
# У SWE-agent есть встроенный лимит шагов (по умолчанию ~100 шагов)
# Увеличьте или уменьшите через конфиг:

docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=claude-sonnet-4-20250514 \
    --agent.model.per_instance_cost_limit=2.00 \
    --agent.max_requeries=5 \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/1

# Убить зависший запуск
docker ps | grep sweagent
docker stop <container_id>
```

### Недостаточно памяти во время выполнения кода

```bash
# Увеличьте лимит памяти песочницы
docker run --rm \
  --env-file /workspace/sweagent/.env \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /workspace/sweagent/output:/output \
  sweagent/swe-agent:latest \
  python run.py \
    --agent.model.name=claude-sonnet-4-20250514 \
    --env.deployment.docker_args='["--memory=8g", "--cpus=4"]' \
    --env.repo.github_url=https://github.com/USER/REPO \
    --problem_statement.github_url=https://github.com/USER/REPO/issues/1

# Для больших кодовых баз увеличьте инстанс Clore.ai до 32ГБ RAM
```

### Ограничения по скорости GitHub

```bash
# У GitHub API есть лимиты — используйте персональный токен доступа с областью repo
# Проверьте текущий статус лимита
curl -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/rate_limit | jq '.rate'

# Если лимит исчерпан, подождите сброса или используйте другой токен
# Лимит сбрасывается каждый час
```

***

## Дополнительное чтение

* [SWE-agent на GitHub](https://github.com/SWE-agent/SWE-agent) — Основной репозиторий и документы
* [Документация SWE-agent](https://swe-agent.com/docs/) — Официальная документация
* [Статья SWE-agent (NeurIPS 2024)](https://arxiv.org/abs/2405.15793) — Научная статья
* [Таблица лидеров SWE-bench](https://www.swebench.com/) — Посмотрите, как разные модели показывают себя
* [Начало работы с Clore.ai](/guides/guides_v2-ru/nachalo-raboty/getting-started.md) — Основы платформы
* [Руководство по сравнению GPU](/guides/guides_v2-ru/nachalo-raboty/gpu-comparison.md) — Если вам нужен GPU для локальных LLM
* [Запуск Ollama на Clore.ai](/guides/guides_v2-ru/yazykovye-modeli/ollama.md) — Локальный LLM бэкенд для SWE-agent
* [Запуск vLLM на Clore.ai](/guides/guides_v2-ru/yazykovye-modeli/vllm.md) — Сервер локальной LLM с высокой пропускной способностью
* [Цены Anthropic API](https://www.anthropic.com/pricing) — Стоимость API Claude
* [Цены OpenAI API](https://openai.com/api/pricing/) — Стоимость API GPT-4

> 💡 **Идеальное сочетание Clore.ai + SWE-agent:** Арендуйте CPU-only сервер (4 ядра, 16 ГБ RAM) примерно за \~$0.05/час, запустите SWE-agent с Claude Sonnet 4 и исправляйте issues на GitHub примерно за **$1–2 всего на одно issue** (стоимость API) плюс несколько центов за время работы Clore.ai. Для команд с большим количеством задач это обходится значительно дешевле, чем нанимать разработчика для рутинного исправления багов.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/ai-platformy-i-agenty/swe-agent.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
