Biblioteka SmolAgents od Hugging Face to proste i potężne narzędzie umożliwiające budowanie customowych agentów wspomaganych modelami językowymi (LLM). Ale czym dokładnie są „agenci” i dlaczego warto ich używać? W tym wpisie dowiesz się więcej na ten temat.
Czym są agenci AI?
Agenci AI to systemy, które wykorzystują modele językowe jako silnik, ale ich działanie wykracza poza generowanie tekstu. Są w stanie wykonywać zadania poprzez wykorzystanie narzędzi, przetwarzanie danych czy podejmowanie decyzji w oparciu o wcześniej zdefiniowane reguły.
Dlaczego SmolAgents?
SmolAgents wyróżnia kilka kluczowych cech:
- Prostota – Logika agentów mieści się w ~1000 liniach kodu, co pozwala skupić się wyłącznie na najważniejszych elementach.
- Wsparcie dla dowolnego LLM – Agenci mogą być napędzani przez modele Hugging Face, OpenAI, Anthropic i inne.
- Code Agents – Obsługa agentów, które generują kod w Pythonie w trakcie wykonywania zadań.
- Integracja z Hugging Face Hub – Możesz udostępniać i ładować narzędzia oraz inne zasoby bezpośrednio od społeczności z Huba.
Jak zbudować agenta?
Aby stworzyć minimalnego agenta, wystarczy zdefiniować dwa kluczowe elementy:
- Model – Silnik generujący tekst:
- TransformersModel – Pipeline do lokalnego przetwarzania danych.
- HfApiModel – Wykorzystuje Hugging Face Inference API.
- LiteLLMModel – Obsługuje ponad 100 modeli poprzez LiteLLM.
- Narzędzia (Tools) – Lista funkcji, które agent może wykorzystywać. Narzędzia są opisane za pomocą nazwy, opisu, typów wejść i wyjść.
Przykład:
from smolagents import CodeAgent, DuckDuckGoSearchTool, LiteLLMModel
model = LiteLLMModel(model_id="gpt-4o")
agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=model)
agent.run("Jem sobie właśnie drożdzówkę, nie wiem zjadłem mozę z 3 takie większy gryzy. Ile to będzie mialo kalorii?")
Python vs JSON
Generowanie i wykonanie kodu w Pythonie – CodeAgent
W przypadku CodeAgent, agent nie tylko podejmuje decyzje, ale także generuje i wykonuje kod Python w trakcie działania. Na przykład, jeśli agent ma obliczyć wartość liczby Fibonacciego, napisze i uruchomi odpowiedni skrypt Python w środowisku wykonawczym.
dodatkowo wygeneruje i wykona kod Python. Na przykład podczas uruchomienia powyższego przykładu agent najpierw znajdzie wartość kaloryczną drożdżówki oraz średnią wielkość ugryzienia i odpowiednią wartość kaloryczną wyliczy na podstawie tego kodu:

Cechy szczególne:
- Wykonywanie kodu lokalnie – Agent uruchamia generowany kod w bezpiecznym środowisku Pythona.
- Ograniczenia bezpieczeństwa – Domyślnie tylko wybrane funkcje i moduły mogą być wykorzystywane. Aby zwiększyć elastyczność, można autoryzować dodatkowe importy.
- Ryzyko – Jeśli nie zostaną wprowadzone odpowiednie ograniczenia, wygenerowanie i wykonanie niebezpiecznego kodu może narazić system na atak.
Zwrot odpowiedzi w postaci JSON – ToolCallingAgent
ToolCallingAgent działa inaczej. Zamiast generować i wykonywać kod, agent używa narzędzi poprzez tworzenie żądań w formacie JSON.
Przykład:
from smolagents import ToolCallingAgent, DuckDuckGoSearchTool, LiteLLMModel
model = LiteLLMModel(model_id="gpt-4o")
agent = ToolCallingAgent(tools=[DuckDuckGoSearchTool()], model=model)
agent.run("Jem sobie właśnie drożdzówkę, nie wiem zjadłem mozę z 3 takie większy gryzy. Ile to będzie mialo kalorii?")

Cechy szczególne:
- Bezpieczeństwo – Żadne kodowanie i wykonywanie kodu nie odbywa się w środowisku lokalnym. Zamiast tego, agent generuje „żądanie” w formacie JSON opisujące zadanie, które narzędzie powinno wykonać.
- Przejrzystość – Agent działa na podstawie zdefiniowanych narzędzi, których API określa: nazwę, opis, typy wejściowe i wyjściowe. Dzięki temu łatwo kontrolować, jakie zadania agent może wykonać.
- Mniejsza elastyczność – W porównaniu z CodeAgent, ToolCallingAgent jest mniej elastyczny, ale za to znacznie bardziej przewidywalny.