2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00
2026-03-11 22:51:42 +01:00

Aplikacja do Kategoryzacji Ludzi

Aplikacja w Go zbudowana w architekturze czystej (Clean Architecture), która pobiera dane ludzi z pliku CSV i kategoryzuje je przy użyciu LLM.

Funkcjonalności

  • Projekt oparty na Clean Architecture
  • Pobieranie danych ludzi ze zdalnego pliku CSV
  • Inteligentne filtrowanie: Filtruje dane na podstawie określonych kryteriów:
    • Płeć: Mężczyzna (M)
    • Wiek w 2026 roku: 20-40 lat (urodzeni 1986-2006)
    • Miasto: Grudziądz
    • Branża: Transport (na podstawie słów kluczowych w opisie zawodu)
  • Przetwarzanie wsadowe: Przetwarza ludzi w konfigurowalnych partiach (np. 1000 dla OpenRouter, 10 dla lokalnego)
  • Wznowienie: Może kontynuować od miejsca przerwania - pomija już przetworzone partie
  • Śledzenie postępu: Pokazuje postęp w czasie rzeczywistym z informacjami o ETA i czasie
  • Logowanie statystyk: Pokazuje liczbę oryginalnych rekordów vs. przefiltrowanych
  • Kategoryzuje ludzi używając LLM ze strukturyzowanym wyjściem
  • Obsługuje wielu dostawców LLM:
    • OpenRouter API (zalecany batch_size: 1000)
    • Lokalne LM Studio (zalecany batch_size: 10)
  • Konfiguracja poprzez plik JSON
  • Tagi: IT, transport, edukacja, medycyna, praca z ludźmi, praca z pojazdami, praca fizyczna

Struktura Projektu

.
├── cmd/app/              # Punkt wejścia aplikacji
├── internal/
│   ├── domain/          # Encje domenowe i interfejsy
│   ├── usecase/         # Logika biznesowa
│   ├── infrastructure/  # Usługi zewnętrzne
│   │   ├── csv/        # Pobieranie danych CSV
│   │   └── llm/        # Dostawcy LLM
│   └── config/          # Obsługa konfiguracji
├── config.json          # Twój plik konfiguracyjny
└── output.json          # Wygenerowane wyniki

Konfiguracja

Utwórz plik config.json na podstawie jednego z przykładów:

Użycie OpenRouter

{
  "data_source": {
    "url": "https://hub.ag3nts.org/data/b8307041-adb1-4101-bc7a-b0533e93078a/people.csv"
  },
  "llm": {
    "provider": "openrouter",
    "model": "anthropic/claude-3.5-sonnet",
    "api_key": "TWOJ_KLUCZ_API_OPENROUTER"
  },
  "output_dir": "./output",
  "batch_size": 1000
}

Użycie LM Studio

{
  "data_source": {
    "url": "https://hub.ag3nts.org/data/b8307041-adb1-4101-bc7a-b0533e93078a/people.csv"
  },
  "llm": {
    "provider": "lmstudio",
    "model": "local-model",
    "base_url": "http://localhost:1234"
  },
  "output_dir": "./output",
  "batch_size": 10
}

Uwaga dotycząca batch_size:

  • Dla dostawców chmurowych jak OpenRouter: Używaj większych partii (500-1000) dla lepszej wydajności i efektywności kosztowej
  • Dla modeli lokalnych z ograniczonym kontekstem: Używaj mniejszych partii (10-50) aby uniknąć błędów przekroczenia długości kontekstu

Użycie

  1. Zainstaluj zależności:
go mod tidy
  1. Utwórz plik konfiguracyjny:
cp config.example.openrouter.json config.json
# lub
cp config.example.lmstudio.json config.json
  1. Edytuj config.json z własnymi ustawieniami

  2. Uruchom aplikację:

go run cmd/app/main.go

Lub z niestandardową ścieżką do konfiguracji:

go run cmd/app/main.go -config=mojakonfiguracja.json
  1. Zbuduj aplikację:
go build -o categorizer cmd/app/main.go
./categorizer

Wyjście

Aplikacja:

  • Zapisuje każdą partię do oddzielnego pliku JSON w katalogu output_dir
  • Każdy plik jest nazwany: batch_{start}_{end}.json (np. batch_0_999.json)
  • Wyświetla końcowe połączone wyniki na stdout
  • Zapisuje połączone wyniki do output.json

Format pliku partii:

[
  {
    "name": "Jan",
    "surname": "Kowalski",
    "gender": "M",
    "born": 1987,
    "city": "Warszawa",
    "tags": ["IT", "praca z ludźmi"]
  },
  {
    "name": "Anna",
    "surname": "Nowak",
    "gender": "F",
    "born": 1993,
    "city": "Kraków",
    "tags": ["medycyna"]
  }
]

Format końcowego wyjścia:

{
  "answer": [
    {
      "name": "Jan",
      "surname": "Kowalski",
      "gender": "M",
      "born": 1987,
      "city": "Warszawa",
      "tags": ["IT", "praca z ludźmi"]
    }
  ]
}

Wznawialne Przetwarzanie

Aplikacja jest w pełni wznawialna:

  1. Każda partia jest zapisywana natychmiast po przetworzeniu
  2. Po ponownym uruchomieniu, sprawdza które pliki partii już istnieją
  3. Pomija już przetworzone partie
  4. Kontynuuje z pozostałymi partiami

To oznacza, że możesz:

  • Zatrzymać aplikację w dowolnym momencie (Ctrl+C)
  • Uruchomić ją ponownie później i będzie kontynuować od miejsca przerwania
  • Uruchamiać wielokrotnie bez ponownego przetwarzania wszystkiego
  • Dostosować batch_size między uruchomieniami (ale już przetworzone partie nie będą przetwarzane ponownie)

Rozwój

Dodawanie Nowych Dostawców LLM

  1. Zaimplementuj interfejs domain.LLMProvider w internal/infrastructure/llm/
  2. Dodaj inicjalizację dostawcy w cmd/app/main.go
  3. Zaktualizuj walidację konfiguracji w internal/config/config.go

Licencja

MIT

Description
No description provided
Readme 74 KiB
Languages
Go 100%