Czym jest harness agenta (agent harness)?
Harness agenta to warstwa wokół modelu językowego, która zamienia pojedyncze wywołania modelu w agenta: prowadzi pętlę, wykonuje narzędzia, o które prosi model, zarządza oknem kontekstu i decyduje, co model może robić.
Gdzie przebiegają granice
Pojęcie najłatwiej uchwycić przez eliminację. Działający agent kodowania ma cztery warstwy, z których tylko dwie są harnessem. Pod nim jest model, którego nie trenowałeś, i API HTTP, którego nie kontrolujesz; nad nim — to, co rysuje wynik na ekranie. Harness to wszystko pomiędzy, czyli: wszystko, o czym trzeba zdecydować.
| Warstwa | Kto za nią odpowiada | O czym decyduje |
|---|---|---|
| Wagi modelu i inferencja | Dostawca | Anthropic, OpenAI, Google albo środowisko uruchomieniowe na twoim własnym komputerze. |
| Format komunikacji | Dostawca | Własny kształt HTTP każdego dostawcy dla wiadomości, narzędzi i strumieniowania. |
| Pętla agenta | Harness | Wywołaj, przeczytaj odpowiedź, wykonaj to, o co prosi, wywołaj ponownie, zatrzymaj się, gdy skończy. |
| Wykonywanie narzędzi | Harness | Walidacja argumentów, uruchomienie narzędzia i decyzja, co działa równolegle. |
| Zewnętrzne narzędzia (MCP) | Harness | Wykrywanie serwerów, nadawanie ich narzędziom przestrzeni nazw, komunikacja z nimi przez JSON-RPC. |
| Kontekst | Harness | Co zostaje w oknie, co jest kompaktowane, co jest przywoływane z wcześniejszej części. |
| Uprawnienia | Harness | Co agent może zrobić bez pytania, a o co musi najpierw zapytać. |
| Renderowanie | Interfejs | Terminal, przeglądarka, okno desktopowe albo brak jakiegokolwiek wyświetlania. |
Przeczytaj tabelę z góry na dół, a powód istnienia tego terminu stanie się oczywisty: dwa górne wiersze zmieniają się co kilka miesięcy, dolny wiersz to kwestia gustu, a pięć środkowych to miejsce, w którym naprawdę zapadają wszystkie trudne decyzje w agencie. Nazwanie tego środka — to właśnie robi to słowo.
Dlaczego niezależność od modelu jest najtrudniejsza
Niemal każdy harness jest pisany pod jednego dostawcę, a dopiero potem dostosowywany do innych. Problemem jest właśnie ta kolejność: założenia pierwszego dostawcy trafiają do magazynu rozmów, do schematu narzędzi, do sposobu parsowania strumieniowanej odpowiedzi — w miejsca, do których później nikt nie zagląda. Zmiana oznacza wtedy migrację, a migracja w środku sesji oznacza, że nie zmieniasz.
Alternatywą jest przechowywanie historii w formacie, który nie należy do żadnego dostawcy, i renderowanie jej do formatu komunikacji dostawcy w chwili wysłania zapytania. Przy zmianie modelu nic nie jest konwertowane, bo nic nigdy nie było w formacie starego modelu. To jedyna decyzja projektowa, wokół której zbudowano OHarness, a strona o architekturze opisuje, jak podział na warstwy jest egzekwowany, a nie tylko zamierzony.
Harness, framework, SDK
- SDK wysyła zapytanie do modelu i odbiera odpowiedź. Jedno wywołanie, jeden dostawca, żadnej pamięci poprzedniego.
- Framework daje ci części, z których składasz agenta. Nadal sam decydujesz o pętli, ponowieniach, polityce kompaktowania — i potem to ty je utrzymujesz.
- Harness to złożona całość. Pętla, wykonywanie narzędzi, zarządzanie kontekstem i uprawnienia są już ustalone; ty dostarczasz narzędzia, model i politykę.
Praktyczny test to to, co się dzieje w dniu, w którym chcesz innego modelu. Z SDK przepisujesz miejsce wywołania. Z frameworkiem odkrywasz, ile twoich własnych części zakładało starego dostawcę. Z harnessem zbudowanym z myślą o tym zmieniasz jedno ustawienie.
Częste pytania
Czy harness agenta to to samo co framework agentowy?
Te pojęcia się nakładają, a przydatne rozróżnienie dotyczy tego, co ostatecznie dostajesz do ręki. Framework każe ci zbudować agenta z jego elementów — piszesz pętlę, graf, ponowienia. Harness to pętla, już napisana: dajesz mu narzędzia, model i zestaw uprawnień, a on działa. Większości frameworków można użyć do zbudowania harnessu; harness to rzecz, którą w przeciwnym razie zbudowałbyś sam.
Jeśli dostawca udostępnia już SDK, czy potrzebuję harnessu?
SDK dostawcy doprowadza cię do wywołania modelu i na tym się kończy. Nie ma zdania na temat tego, kiedy wywołać ponownie, co zrobić z wynikiem narzędzia, co odrzucić, gdy okno kontekstu się zapełni, ani czy polecenie powłoki powinno uruchomić się bez pytania. Te decyzje to właśnie harness, a jeśli nie przyjmiesz gotowego, napiszesz własny — zwykle przypadkiem, rozsiany po całym kodzie, pod dokładnie jednego dostawcę.
Czy jeden harness może komunikować się z więcej niż jednym dostawcą modeli?
Może, ale tylko jeśli od początku tak go zbudowano. Trudność nie leży w HTTP: chodzi o to, że historia rozmowy, definicje narzędzi i strumieniowane odpowiedzi mają formę narzuconą przez dostawcę, a harness, który przechowuje historię w formacie jednego dostawcy, musi ją migrować, żeby zmienić model. Przechowywanie historii w neutralnej formie i renderowanie jej do formatu komunikacji dostawcy w chwili wysłania zapytania sprawia, że zmiana nic nie kosztuje.
Czy istnieje harness agenta open source?
Kilka publikuje swój kod źródłowy, m.in. OpenCode, Cline i Gemini CLI. OHarness jest bezpłatny, a jego pakiety npm są publikowane na licencji MIT, ale repozytorium kodu jest na razie prywatne. Komunikuje się natywnie z Anthropic, OpenAI i Google Gemini, z dowolnym endpointem zgodnym z OpenAI oraz z lokalnymi środowiskami, takimi jak Ollama, LM Studio i vLLM — i działa w terminalu, w przeglądarce, w aplikacji desktopowej i w trybie headless, wszędzie na tym samym silniku.
Wypróbuj implementację
OHarness to bezpłatny harness agenta niezależny od modelu: dwie zależności uruchomieniowe, każdy dostawca osiągany przez zwykły fetch i SSE oraz własny klient MCP. Dokumentacja jest pisana obok kodu, który opisuje, a na stronie pobierania znajdziesz wersje desktopowe i wiersz poleceń.