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ć.

WarstwaKto za nią odpowiadaO czym decyduje
Wagi modelu i inferencjaDostawcaAnthropic, OpenAI, Google albo środowisko uruchomieniowe na twoim własnym komputerze.
Format komunikacjiDostawcaWłasny kształt HTTP każdego dostawcy dla wiadomości, narzędzi i strumieniowania.
Pętla agentaHarnessWywołaj, przeczytaj odpowiedź, wykonaj to, o co prosi, wywołaj ponownie, zatrzymaj się, gdy skończy.
Wykonywanie narzędziHarnessWalidacja argumentów, uruchomienie narzędzia i decyzja, co działa równolegle.
Zewnętrzne narzędzia (MCP)HarnessWykrywanie serwerów, nadawanie ich narzędziom przestrzeni nazw, komunikacja z nimi przez JSON-RPC.
KontekstHarnessCo zostaje w oknie, co jest kompaktowane, co jest przywoływane z wcześniejszej części.
UprawnieniaHarnessCo agent może zrobić bez pytania, a o co musi najpierw zapytać.
RenderowanieInterfejsTerminal, 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ń.