Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds
Powrót do kolekcji
Przewodnik14 min czytania

Aider

Aider to potężne narzędzie AI pair programming w terminalu, które pozwala na edycję kodu przez konwersację z Claude lub GPT. Kompletny przewodnik po programowaniu z AI w CLI.

Aider - Kompletny Przewodnik po AI Pair Programming w Terminalu

Czym jest Aider?

Aider to open source'owe narzędzie CLI stworzone przez Paula Gauthier, które umożliwia programowanie w parze z AI bezpośrednio w terminalu. W przeciwieństwie do IDE z wbudowanym AI, Aider działa niezależnie od edytora, co czyni go idealnym wyborem dla programistów preferujących Vim, Emacs, terminal, lub po prostu lubiących pracować z linii poleceń.

Aider wyróżnia się głęboką integracją z Git - każda zmiana wprowadzona przez AI jest automatycznie commitowana z sensownym opisem, co pozwala na łatwe śledzenie i cofanie zmian. Aider może bezpośrednio edytować pliki w Twoim repozytorium, uruchamiać testy i naprawiać błędy - wszystko przez naturalną konwersację.

Aider współpracuje z najlepszymi modelami AI, w tym Claude (Anthropic) i GPT-4 (OpenAI), pozwalając wybrać model najlepiej dopasowany do Twojego workflow.

Dlaczego Aider?

Kluczowe zalety Aider

  1. Terminal-native - Pracuj z AI bez opuszczania terminala
  2. Git integration - Automatyczne commity z sensownymi opisami
  3. Multi-model support - Claude, GPT-4, Ollama, lokalne modele
  4. Repo-aware - Rozumie strukturę całego projektu
  5. Open source - MIT license, aktywny development
  6. Lightweight - Brak ciężkiego IDE, minimalne zużycie zasobów
  7. Editor-agnostic - Działa z każdym edytorem

Aider vs inne narzędzia AI

AspektAiderClaude CodeGitHub CopilotCursor
InterfaceTerminalTerminalIDE pluginIDE
Git integrationAutomatycznaManualnaBrakManualna
Open sourceTakNieNieNie
Multi-modelTakTylko ClaudeTylko CopilotTak
CenaFree + APIAPI cost$10-19/mo$20/mo
OfflineZ lokalnymi modelamiNieNieNie

Instalacja

pip (standardowa)

Code
Bash
# Instalacja z pip
pip install aider-chat

# Weryfikacja
aider --version

pipx (zalecane - izolowane środowisko)

Code
Bash
# Instalacja pipx jeśli nie masz
pip install pipx
pipx ensurepath

# Instalacja aider
pipx install aider-chat

# Upgrade
pipx upgrade aider-chat

Homebrew (macOS)

Code
Bash
brew install aider

Docker

Code
Bash
# Uruchom aider w kontenerze
docker run -it --rm \
  -v $(pwd):/app \
  -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
  paulgauthier/aider

Konfiguracja kluczy API

Code
Bash
# Claude (Anthropic) - zalecany
export ANTHROPIC_API_KEY=sk-ant-...

# OpenAI GPT-4
export OPENAI_API_KEY=sk-...

# Azure OpenAI
export AZURE_API_KEY=...
export AZURE_API_BASE=https://your-resource.openai.azure.com
export AZURE_API_VERSION=2024-02-01

# Ollama (lokalne modele)
# Nie wymaga klucza API - automatyczne wykrywanie

Dodaj do ~/.bashrc lub ~/.zshrc:

Code
Bash
# Aider configuration
export ANTHROPIC_API_KEY="sk-ant-your-key"
export AIDER_MODEL="claude-3-5-sonnet-20241022"
export AIDER_AUTO_COMMITS=true

Podstawowe Użycie

Rozpoczęcie sesji

Code
Bash
# Domyślny model (GPT-4 Turbo)
aider

# Z Claude Sonnet (zalecany)
aider --model claude-3-5-sonnet-20241022

# Z konkretnymi plikami w kontekście
aider src/app.ts src/utils.ts

# Cały katalog
aider src/

# Z glob patterns
aider "src/**/*.ts"

Przykładowa sesja

Code
Bash
$ aider src/api/users.ts

Aider v0.50.0
Model: claude-3-5-sonnet-20241022 with diff edit format
Git repo: .git with 142 files
Repo-map: using 1024 tokens

Added src/api/users.ts to the chat.

> Dodaj walidację email w funkcji createUser

I'll add email validation to the createUser function using a regex pattern.

src/api/users.ts
<<<<<<< SEARCH
export async function createUser(data: CreateUserInput) {
  const user = await db.user.create({
    data: {
      email: data.email,
      name: data.name,
    },
  });
  return user;
}
=======
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

export async function createUser(data: CreateUserInput) {
  if (!EMAIL_REGEX.test(data.email)) {
    throw new Error('Invalid email format');
  }

  const user = await db.user.create({
    data: {
      email: data.email.toLowerCase().trim(),
      name: data.name,
    },
  });
  return user;
}
>>>>>>> REPLACE

Applied edit to src/api/users.ts
Commit 8f3a2b1 feat: add email validation to createUser

> Dodaj też sprawdzanie czy email nie jest już zajęty

I'll add a check for existing email before creating the user.

src/api/users.ts
<<<<<<< SEARCH
export async function createUser(data: CreateUserInput) {
  if (!EMAIL_REGEX.test(data.email)) {
    throw new Error('Invalid email format');
  }

  const user = await db.user.create({
=======
export async function createUser(data: CreateUserInput) {
  if (!EMAIL_REGEX.test(data.email)) {
    throw new Error('Invalid email format');
  }

  const normalizedEmail = data.email.toLowerCase().trim();

  const existingUser = await db.user.findUnique({
    where: { email: normalizedEmail },
  });

  if (existingUser) {
    throw new Error('Email already exists');
  }

  const user = await db.user.create({
>>>>>>> REPLACE

Applied edit to src/api/users.ts
Commit 2d4f6a9 feat: check for duplicate email before creating user

Komendy Aider

Zarządzanie plikami

Code
Bash
/add <file>       # Dodaj plik do kontekstu czatu
/drop <file>      # Usuń plik z kontekstu
/ls               # Pokaż pliki w kontekście
/clear            # Wyczyść kontekst (zacznij od nowa)

# Przykłady:
> /add src/components/Button.tsx
> /add src/hooks/*.ts
> /drop src/utils.ts

Git i historia

Code
Bash
/diff             # Pokaż niezcommitowane zmiany
/undo             # Cofnij ostatnią zmianę AI (git reset)
/commit           # Commituj bieżące zmiany
/git <cmd>        # Uruchom dowolną komendę git

# Przykłady:
> /diff
> /undo
> /git status
> /git log --oneline -5

Uruchamianie kodu

Code
Bash
/run <cmd>        # Uruchom komendę shell
/test             # Uruchom testy (konfigurowalny)
/lint             # Uruchom linter

# Przykłady:
> /run npm test
> /run python -m pytest tests/
> /test

Kontrola sesji

Code
Bash
/help             # Pokaż wszystkie komendy
/quit             # Zakończ sesję
/voice            # Włącz tryb głosowy
/tokens           # Pokaż zużycie tokenów
/model <name>     # Zmień model w trakcie sesji
/settings         # Pokaż bieżące ustawienia

# Przykłady:
> /model gpt-4-turbo
> /tokens
> /settings

Praca z kodem

Code
Bash
/architect        # Tryb architektury (planowanie)
/ask              # Zadaj pytanie bez edycji
/code             # Powrót do trybu edycji

# Przykłady:
> /architect Jak najlepiej zorganizować ten projekt?
> /ask Co robi ta funkcja?

Tryby Edycji

Diff Mode (domyślny)

Code
DIFF
# Aider pokazuje zmiany w formacie diff
# Najlepszy dla precyzyjnych, małych zmian

src/utils.ts
<<<<<<< SEARCH
function formatDate(date: Date): string {
  return date.toISOString();
}
=======
function formatDate(date: Date, format: string = 'ISO'): string {
  switch (format) {
    case 'ISO':
      return date.toISOString();
    case 'locale':
      return date.toLocaleDateString();
    case 'relative':
      return formatRelative(date);
    default:
      return date.toISOString();
  }
}
>>>>>>> REPLACE

Whole File Mode

Code
Bash
# Dla mniejszych plików - AI przepisuje cały plik
aider --edit-format whole

# Lub ustaw w .aider.conf.yml
edit-format: whole

Unified Diff Mode

Code
Bash
# Format podobny do git diff
aider --edit-format udiff

# Przykład output:
--- src/app.ts
+++ src/app.ts
@@ -10,6 +10,10 @@
 function main() {
+  // Initialize logging
+  setupLogger();
+
   startServer();
 }

Ask Mode (bez edycji)

Code
Bash
# Tylko pytania, bez modyfikacji plików
aider --ask

# W sesji:
> /ask Wyjaśnij jak działa ten algorytm
> /ask Jakie są potencjalne problemy z tym kodem?

Praca z Git

Automatyczne commity

Code
Bash
# Domyślnie włączone - każda zmiana = commit
# Wyłączenie:
aider --no-auto-commits

# Lub ręczne commitowanie:
> /commit "moja wiadomość"

Sensowne commit messages

Code
Bash
$ aider src/auth.ts

> Dodaj obsługę JWT token refresh

Applied edit to src/auth.ts
Commit a3f8d21 feat(auth): implement JWT token refresh mechanism

> Napraw błąd z wygaśniętym tokenem

Applied edit to src/auth.ts
Commit 7b2c4e9 fix(auth): handle expired token edge case

# Aider automatycznie generuje sensowne commit messages
# w formacie conventional commits

Cofanie zmian

Code
Bash
# Cofnij ostatnią zmianę AI
> /undo

Undoing: feat(auth): implement JWT token refresh mechanism
HEAD is now at previous commit

# Cofnij kilka zmian
> /git reset --soft HEAD~3

Praca z branchami

Code
Bash
# Utwórz feature branch przed pracą
git checkout -b feature/new-auth

# Pracuj z aider
aider src/auth/

> Zaimplementuj OAuth2 flow

# Po zakończeniu
git push -u origin feature/new-auth

Wybór Modelu

Claude (Anthropic) - Zalecany

Code
Bash
# Claude 3.5 Sonnet - najlepszy balans
aider --model claude-3-5-sonnet-20241022

# Claude 3 Opus - najbardziej zaawansowany
aider --model claude-3-opus-20240229

# Claude 3 Haiku - najszybszy/najtańszy
aider --model claude-3-haiku-20240307

OpenAI GPT

Code
Bash
# GPT-4 Turbo
aider --model gpt-4-turbo

# GPT-4o - szybszy
aider --model gpt-4o

# GPT-4o-mini - ekonomiczny
aider --model gpt-4o-mini

Lokalne modele (Ollama)

Code
Bash
# Zainstaluj Ollama
curl -fsSL https://ollama.ai/install.sh | sh

# Pobierz model
ollama pull codellama:34b
ollama pull deepseek-coder:33b

# Użyj z aider
aider --model ollama/codellama:34b
aider --model ollama/deepseek-coder:33b

# Dla lepszych wyników - większy context
aider --model ollama/codellama:34b --map-tokens 4096

Porównanie modeli

ModelJakość koduSzybkośćKosztUwagi
claude-3-5-sonnet⭐⭐⭐⭐⭐Szybki$$Najlepszy wybór
claude-3-opus⭐⭐⭐⭐⭐Wolny$$$$Kompleksowe zadania
gpt-4-turbo⭐⭐⭐⭐Szybki$$$Dobra alternatywa
gpt-4o⭐⭐⭐⭐Bardzo szybki$$Szybszy GPT-4
ollama/codellama⭐⭐⭐Zależy od GPUFreeOffline, prywatność
deepseek-coder⭐⭐⭐⭐Średni$Dobry stosunek jakość/cena

Konfiguracja

Plik konfiguracyjny

~/.aider.conf.yml
YAML
# ~/.aider.conf.yml (globalny)
# lub .aider.conf.yml (projektowy)

# Model domyślny
model: claude-3-5-sonnet-20241022

# Automatyczne commity
auto-commits: true
dirty-commits: true

# Format edycji
edit-format: diff

# Kolorowanie
dark-mode: true
pretty: true

# Git
attribute-author: true
attribute-committer: false

# Kontekst
map-tokens: 1024
max-chat-history-tokens: 4000

# Ignorowane pliki (dodatkowo do .gitignore)
aiderignore:
  - "*.log"
  - "node_modules/"
  - "dist/"

# Automatyczne dodawanie plików
auto-add: true

# Voice (jeśli używasz)
voice-language: pl

Zmienne środowiskowe

~/.bashrc
Bash
# ~/.bashrc lub ~/.zshrc

# API Keys
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."

# Domyślne ustawienia
export AIDER_MODEL="claude-3-5-sonnet-20241022"
export AIDER_AUTO_COMMITS="true"
export AIDER_DARK_MODE="true"
export AIDER_PRETTY="true"

# Edytor dla dłuższych wiadomości
export AIDER_EDITOR="vim"
export AIDER_EDITOR_MODEL="claude-3-5-sonnet-20241022"

.aiderignore

Code
GITIGNORE
# .aiderignore - pliki ignorowane przez aider
# (dodatkowo do .gitignore)

# Duże pliki binarne
*.bin
*.exe
*.dll

# Generowane pliki
dist/
build/
*.min.js

# Pliki z sekretami
.env*
*credentials*
*.pem
*.key

# Testy (jeśli nie chcesz ich edytować)
__tests__/
*.test.ts
*.spec.ts

# Dokumentacja
docs/
*.md

Zaawansowane Użycie

Architect Mode

Code
Bash
# Tryb planowania - AI proponuje architekturę bez edycji
aider --architect

> /architect Jak zorganizować system autentykacji dla tej aplikacji?

Based on your codebase, I recommend:

1. **Structure**:
   - src/auth/
     - providers/ (OAuth, JWT, etc.)
     - middleware/
     - utils/
     - types.ts

2. **Flow**:
   - Login → Validate → Generate tokens → Store session
   - Middleware checks token on protected routes

3. **Security considerations**:
   - Use httpOnly cookies for refresh tokens
   - Implement rate limiting
   - Add CSRF protection

Should I implement this structure?

> Tak, zaimplementuj

# Aider przechodzi do trybu edycji i implementuje plan

Multi-file refactoring

Code
Bash
# Dodaj wiele plików do kontekstu
aider src/api/*.ts src/models/*.ts src/utils/*.ts

> Zmień wszystkie endpointy API na async/await zamiast .then()

I'll refactor the API endpoints to use async/await.

[Aider modyfikuje wiele plików jednocześnie]

Applied edits to:
- src/api/users.ts
- src/api/posts.ts
- src/api/comments.ts

Commits:
- refactor(api): convert users endpoints to async/await
- refactor(api): convert posts endpoints to async/await
- refactor(api): convert comments endpoints to async/await

Testowanie i debugging

Code
Bash
# Uruchom testy po każdej zmianie
> /run npm test

# Jeśli testy failują
> Napraw failing testy

# Aider widzi output testów i naprawia kod
Applied edit to src/utils.ts
Commit fix: correct date formatting in utils

> /run npm test
All tests passed!

Voice Mode

Code
Bash
# Włącz tryb głosowy
aider --voice

# Lub w sesji
> /voice

Listening... (say 'stop' to end)

[Mów do mikrofonu]
"Dodaj funkcję do walidacji numeru telefonu"

I'll add a phone number validation function...

Watch Mode

Code
Bash
# Automatyczne reagowanie na zmiany w plikach
aider --watch

# Aider obserwuje pliki i reaguje na komentarze typu:
// AI: dodaj obsługę błędów tutaj
// AIDER: zrefaktoruj tę funkcję

Integracja z Workflow

VS Code + Aider

.vscode/tasks.json
JSON
// .vscode/tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Aider: Start Session",
      "type": "shell",
      "command": "aider --model claude-3-5-sonnet-20241022 ${file}",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      }
    },
    {
      "label": "Aider: Ask About File",
      "type": "shell",
      "command": "aider --ask ${file}",
      "presentation": {
        "reveal": "always"
      }
    }
  ]
}

Neovim + Aider

Code
LUA
-- lua/plugins/aider.lua
return {
  "joshuavial/aider.nvim",
  config = function()
    require("aider").setup({
      auto_manage_context = true,
      default_bindings = true,
    })

    -- Keybindings
    vim.keymap.set("n", "<leader>ao", "<cmd>AiderOpen<cr>", { desc = "Open Aider" })
    vim.keymap.set("n", "<leader>as", "<cmd>AiderSend<cr>", { desc = "Send to Aider" })
    vim.keymap.set("v", "<leader>as", "<cmd>AiderSend<cr>", { desc = "Send selection to Aider" })
    vim.keymap.set("n", "<leader>ac", "<cmd>AiderComplete<cr>", { desc = "Complete with Aider" })
  end
}

tmux + Aider

~/.tmux.conf
Bash
# ~/.tmux.conf
# Otwórz aider w nowym pane

bind-key a split-window -h "aider"
bind-key A split-window -v -l 40% "aider --ask"

# Session script
#!/bin/bash
# dev-session.sh

tmux new-session -d -s dev -n code
tmux send-keys -t dev:code 'nvim .' Enter

tmux split-window -h -t dev:code
tmux send-keys -t dev:code 'aider' Enter

tmux select-pane -t dev:code.0
tmux attach -t dev

Git hooks z Aider

Code
Bash
#!/bin/bash
# .git/hooks/pre-commit

# Sprawdź czy są TODO/FIXME i zaproponuj naprawę
if git diff --cached | grep -E "(TODO|FIXME):" > /dev/null; then
    echo "Found TODO/FIXME comments in staged changes."
    echo "Consider running: aider --ask 'Review TODOs and suggest fixes'"
fi

# Uruchom linter przed commitem
npm run lint || exit 1

Best Practices

Efektywne prompty

Code
Bash
# ❌ Zbyt ogólne
> Napraw błędy

# ✅ Konkretne
> Napraw błąd TypeError w funkcji processUser na linii 45 -
> zmienna 'user' może być undefined

# ❌ Bez kontekstu
> Dodaj walidację

# ✅ Z kontekstem
> Dodaj walidację inputu dla formularza rejestracji:
> - email: prawidłowy format
> - hasło: min 8 znaków, 1 cyfra, 1 wielka litera
> - imię: 2-50 znaków, tylko litery

Organizacja sesji

Code
Bash
# 1. Zacznij od małego kontekstu
aider src/api/users.ts

# 2. Dodawaj pliki w miarę potrzeby
> /add src/types/user.ts
> /add src/utils/validation.ts

# 3. Usuwaj niepotrzebne
> /drop src/utils/validation.ts

# 4. Regularnie sprawdzaj kontekst
> /ls
> /tokens

Praca z dużymi projektami

.aider.conf.yml
YAML
# .aider.conf.yml dla dużych projektów

# Zwiększ limit mapy repozytorium
map-tokens: 2048

# Automatycznie dodawaj powiązane pliki
auto-add: true

# Ignoruj duże/niepotrzebne pliki
aiderignore:
  - "node_modules/"
  - "dist/"
  - "*.min.js"
  - "package-lock.json"

Rozwiązywanie Problemów

Duże zużycie tokenów

Code
Bash
# Sprawdź zużycie
> /tokens

# Zmniejsz kontekst
> /drop <niepotrzebne-pliki>

# Użyj mniejszej mapy repozytorium
aider --map-tokens 512

# Lub wyłącz mapę
aider --no-map

Model odmawia edycji

Code
Bash
# 1. Sprawdź czy plik jest w kontekście
> /ls

# 2. Jawnie dodaj plik
> /add plik-do-edycji.ts

# 3. Sprawdź uprawnienia
ls -la plik-do-edycji.ts

# 4. Upewnij się, że plik nie jest ignorowany
cat .aiderignore

Git problemy

Code
Bash
# Jeśli aider nie commituje
> /git status

# Sprawdź czy repo jest zainicjalizowane
git status

# Napraw dirty state
git stash
# lub
git add -A && git commit -m "WIP"

Wolne odpowiedzi

Code
Bash
# Użyj szybszego modelu
aider --model gpt-4o-mini
aider --model claude-3-haiku-20240307

# Zmniejsz kontekst
> /clear
> /add tylko-potrzebny-plik.ts

# Sprawdź połączenie
curl -I https://api.anthropic.com

Porównanie kosztów

Przykładowa sesja kodowania

Code
TEXT
Typowa sesja: 1 godzina, ~50 interakcji

| Model | Input tokens | Output tokens | Koszt |
|-------|-------------|---------------|-------|
| claude-3-5-sonnet | ~100k | ~50k | ~$0.90 |
| claude-3-opus | ~100k | ~50k | ~$4.50 |
| gpt-4-turbo | ~100k | ~50k | ~$2.00 |
| gpt-4o-mini | ~100k | ~50k | ~$0.15 |
| ollama/codellama | ~100k | ~50k | $0.00 |

Miesięczne koszty (aktywny developer)

Code
TEXT
40 godzin/miesiąc programowania z AI:

claude-3-5-sonnet: ~$36/miesiąc
gpt-4-turbo: ~$80/miesiąc
gpt-4o-mini: ~$6/miesiąc
ollama: $0 (+ koszt GPU)

FAQ

Czy aider jest bezpieczny dla mojego kodu?

Tak. Aider nie wysyła kodu nigdzie poza wybranym API (Anthropic/OpenAI). Dla maksymalnej prywatności użyj lokalnych modeli przez Ollama.

Czy mogę używać aider offline?

Tak, z lokalnymi modelami przez Ollama. Potrzebujesz GPU dla sensownej wydajności.

Jak aider różni się od Claude Code?

  • Aider: Open source, multi-model, głęboka integracja z Git
  • Claude Code: Zamknięte źródło, tylko Claude, prostsze użycie

Czy aider nadpisuje moje pliki bez pytania?

Aider pokazuje proponowane zmiany w formacie diff i czeka na potwierdzenie (lub automatycznie stosuje z --yes). Zawsze możesz cofnąć z /undo.

Jaki model wybrać?

  • Claude 3.5 Sonnet: Najlepszy ogólny wybór
  • GPT-4o-mini: Budżetowa opcja
  • Ollama: Maksymalna prywatność, offline

Podsumowanie

Aider to potężne narzędzie dla programistów preferujących terminal i linię poleceń. Dzięki głębokiej integracji z Git, wsparciu dla wielu modeli AI i open source'owemu podejściu, Aider oferuje elastyczność i kontrolę, której brakuje w IDE-based solutions.

Kluczowe zalety Aider:

  • Terminal-native - Idealne dla Vim/Emacs/CLI users
  • Git-first - Automatyczne commity, łatwe cofanie
  • Multi-model - Claude, GPT-4, lokalne modele
  • Open source - Pełna transparentność, MIT license
  • Ekonomiczne - Płać tylko za API, bez subskrypcji

Jeśli cenisz terminal workflow i chcesz zachować pełną kontrolę nad swoim środowiskiem, Aider jest doskonałym wyborem do AI pair programming.