Wróć

17. Praktyka OpenClaw: budowa asystenta programistycznego AI

Ten artykuł pokazuje, jak użyć OpenClaw do budowy asystenta programistycznego AI, integrując narzędzia Claude Code, Codex i inne, realizując przegląd kodu, automatyczne testy, integrację CI/CD i inne funkcje zwiększające efektywność programowania.

Dotyczy OpenClaw v2026.2 | Wymagana instalacja umiejętności coding-agent, git-workflows, test-runner oraz dostęp do repozytorium kodu projektu.

TL;DR: Przegląd kodu: Agent analizuje zmiany w PR i generuje raport. Automatyczne testy: "test-runner": {"frameworks": ["jest", "vitest"]}. Integracja CI/CD: Webhook odbiera zdarzenia z GitHub/GitLab. Zarządzanie wieloma projektami: "projects": {"frontend": {...}, "backend": {...}}. Główna komenda: openclaw agent --message "Przejrzyj ten PR".

Cel praktyczny

Budowa asystenta programistycznego AI, który potrafi:

  1. Automatyzować przegląd kodu
  2. Uruchamiać testy i raportować wyniki
  3. Generować dokumentację kodu
  4. Integrować się z pipeline’ami CI/CD
  5. Przełączać konteksty między projektami

Instalacja wymaganych umiejętności

# Umiejętności programistyczne
openclaw skill install coding-agent
openclaw skill install debug-pro
openclaw skill install git-workflows
openclaw skill install docker-essentials

# Umiejętności testowe
openclaw skill install test-runner

Automatyzacja przeglądu kodu

Konfiguracja przeglądu kodu

---
name: code-review-assistant
version: 1.0.0
description: Automated code review with OpenClaw
triggers:
  - code review
  - przegląd kodu
  - review
  - PR review
---

# Code Review Assistant

Automate code review for pull requests.

## Features

- Review code changes
- Check for common issues
- Suggest improvements
- Generate review comments

## Review Checklist

1. **Code Quality**
   - Naming conventions
   - Code structure
   - Error handling

2. **Security**
   - SQL injection
   - XSS vulnerabilities
   - Secret exposure

3. **Performance**
   - N+1 queries
   - Memory leaks
   - Inefficient algorithms

4. **Best Practices**
   - DRY principle
   - SOLID principles
   - Design patterns

Scenariusz przeglądu kodu

Użytkownik: Przejrzyj ten PR

Agent: Dobrze, przeglądam PR #123...

[Pobieranie informacji o PR]
[Analiza zmian w kodzie]
[Sprawdzanie potencjalnych problemów]

## Raport z przeglądu PR #123

### Przegląd
- Gałąź: feature/user-search
- Zmiany: +156 -23
- Pliki: 8

### Znalezione problemy

**Krytyczne** (1):
- 🚨 `auth.js:45` - Ryzyko przechowywania hasła w postaci jawnej

**Ostrzeżenia** (3):
- ⚠️ `search.js:23` - Potencjalne SQL injection
- ⚠️ `user.js:78` - Nieobsłużony Promise
- ⚠️ `utils.js:12` - Przestarzałe API

**Sugestie** (5):
- 💡 Rozważ dodanie testów jednostkowych
- 💡 Użyj stałych zamiast magicznych liczb
- 💡 Sugestia dodania error boundary
- 💡 Rozważ wyodrębnienie wspólnych metod
- 💡 Sugestia dodania adnotacji typów

### Mocne strony kodu
- ✅ Dobre nazewnictwo funkcji
- ✅ Rozsądny podział na moduły
- ✅ Odpowiednie komentarze

Czy chcesz, żebym wygenerował komentarze do przeglądu?

Automatyczne testy

Konfiguracja uruchamiania testów

{
  "skills": {
    "test-runner": {
      "frameworks": ["jest", "vitest", "pytest"],
      "coverage": {
        "enabled": true,
        "threshold": 80
      },
      "reporting": {
        "format": "markdown",
        "output": "test-report.md"
      }
    }
  }
}

Scenariusz testowy

Użytkownik: Uruchom testy i pokaż wyniki

Agent: Uruchamiam testy...

[Wykonywanie komendy testowej]
[Zbieranie wyników testów]
[Analiza pokrycia kodu]

## Raport z testów

### Wyniki testów
- Łącznie: 45 testów
- Zaliczone: 42 ✅
- Niezaliczone: 2 ❌
- Pominięte: 1 ⏭️

### Niezaliczone testy

**1. UserSearch.test.js**

AssertionError: expected [] to equal [{id: 1, name: ’test’}]

Sugestia: Sprawdź połączenie z bazą danych lub dane mockowe

**2. Auth.test.js**

Timeout: Async callback not invoked within 5000ms

Sugestia: Zwiększ timeout lub sprawdź logikę asynchroniczną

### Pokrycie kodu

| Plik | Instrukcje | Gałęzie | Funkcje | Linie |
|-----|-----|-----|-----|-----|
| auth.js | 85% | 78% | 90% | 85% |
| search.js | 72% | 65% | 80% | 70% |
| user.js | 90% | 85% | 95% | 90% |
| **Łącznie** | **82%** | **76%** | **88%** | **82%** |

Czy potrzebujesz, żebym naprawił niezaliczone testy?

Integracja CI/CD

Integracja z GitHub Actions

# .github/workflows/openclaw-review.yml
name: OpenClaw Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup OpenClaw
        run: npm install -g openclaw@latest
        
      - name: Run Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          openclaw agent --message "Review PR #${{ github.event.pull_request.number }}" \
            --output review-comment.md
            
      - name: Post Comment
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const comment = fs.readFileSync('review-comment.md', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: comment
            });

Automatyczne wdrażanie

Użytkownik: Wdróż na staging

Agent: Wdrażam na środowisko staging...

[Pobieranie najnowszego kodu]
[Uruchamianie testów]
[Budowanie projektu]
[Wdrażanie na serwer]

## Raport z wdrożenia

### Informacje o wdrożeniu
- Środowisko: staging
- Gałąź: main
- Commit: abc1234
- Czas: 2026-02-26 15:30

### Kroki wdrożenia
1. ✅ Pobranie kodu
2. ✅ Instalacja zależności
3. ✅ Uruchomienie testów (45/45 zaliczone)
4. ✅ Budowanie projektu
5. ✅ Wdrożenie na serwer

### Sprawdzenie stanu
- API: ✅ Działa poprawnie
- Baza danych: ✅ Połączenie aktywne
- Redis: ✅ Połączenie aktywne

### Adresy dostępowe
- URL: https://staging.example.com
- API: https://api-staging.example.com

Wdrożenie zakończone sukcesem!

Zarządzanie wieloma projektami

Konfiguracja projektów

{
  "projects": {
    "frontend": {
      "path": "~/projects/frontend",
      "skills": ["coding-agent", "test-runner"],
      "context": "AGENTS.md"
    },
    "backend": {
      "path": "~/projects/backend",
      "skills": ["coding-agent", "docker-essentials"],
      "context": "AGENTS.md"
    },
    "mobile": {
      "path": "~/projects/mobile",
      "skills": ["coding-agent"],
      "context": "AGENTS.md"
    }
  }
}

Przełączanie projektów

Użytkownik: Przełącz na projekt backend

Agent: Przełączono na projekt backend.

Informacje o aktualnym projekcie:
- Nazwa: backend
- Ścieżka: ~/projects/backend
- Technologia: Python/FastAPI
- Ostatni commit: Dodanie uwierzytelniania użytkowników

Czym mogę pomóc?

Generowanie kodu

Generowanie kodu szablonowego

Użytkownik: Utwórz CRUD API dla modelu User

Agent: Dobrze, tworzę CRUD API dla modelu User...

[Analiza istniejącej struktury kodu]
[Generowanie plików kodu]

Wygenerowano następujące pliki:

**1. models/user.py**
```python
from pydantic import BaseModel
from datetime import datetime

class User(BaseModel):
    id: int
    name: str
    email: str
    created_at: datetime
    updated_at: datetime

class UserCreate(BaseModel):
    name: str
    email: str

class UserUpdate(BaseModel):
    name: str | None = None
    email: str | None = None

2. routers/users.py

from fastapi import APIRouter, HTTPException
from models.user import User, UserCreate, UserUpdate

router = APIRouter(prefix="/users", tags=["users"])

@router.get("/", response_model=list[User])
async def list_users(): ...

@router.get("/{user_id}", response_model=User)
async def get_user(user_id: int): ...

@router.post("/", response_model=User)
async def create_user(user: UserCreate): ...

@router.put("/{user_id}", response_model=User)
async def update_user(user_id: int, user: UserUpdate): ...

@router.delete("/{user_id}")
async def delete_user(user_id: int): ...

3. tests/test_users.py

from fastapi.testclient import TestClient

def test_list_users(): ...
def test_create_user(): ...
def test_update_user(): ...
def test_delete_user(): ...

Czy uruchomić testy weryfikacyjne?


## Generowanie dokumentacji

### Dokumentacja API

Użytkownik: Wygeneruj dokumentację dla tego API

Agent: Analizuję endpointy API…

[Skanowanie plików routingu] [Ekstrakcja informacji o API] [Generowanie dokumentacji]

Dokumentacja API

Moduł użytkowników

GET /users

Pobierz listę użytkowników

Parametry

Nazwa Typ Wymagany Opis
page int Nie Numer strony
limit int Nie Elementów na stronę

Odpowiedź

{
  "data": [User],
  "total": int,
  "page": int,
  "limit": int
}

POST /users

Utwórz użytkownika

Treść żądania

{
  "name": "string",
  "email": "string"
}

Odpowiedź

{
  "id": 1,
  "name": "string",
  "email": "string",
  "created_at": "2026-02-26T00:00:00Z",
  "updated_at": "2026-02-26T00:00:00Z"
}

Czy zapisać do docs/api.md?


## Rozwiązywanie problemów

### Problemy CI/CD

```bash
# Sprawdzenie statusu CI/CD
openclaw ci status

# Wyświetlenie logów CI/CD
openclaw ci logs --last

# Ponowne uruchomienie nieudanego zadania
openclaw ci retry

Problemy z kodem

# Analiza problemów w kodzie
openclaw analyze --project backend

# Generowanie sugestii naprawy
openclaw suggest --file auth.js

Podsumowanie

Budując asystenta programistycznego z OpenClaw:

  • Przegląd kodu: automatyzacja przeglądu PR
  • Uruchamianie testów: automatyczne testy i raporty
  • Integracja CI/CD: automatyzacja procesu wdrażania
  • Zarządzanie projektami: szybkie przełączanie kontekstu
  • Generowanie kodu: tworzenie kodu szablonowego
  • Generowanie dokumentacji: automatyczna dokumentacja API

Historia zmian:

  • 2026-02-26: Pierwsza publikacja

Nawigacja po serii: