SmolAgents: Jak Tworzyć i Wykorzystywać Agentów AI?

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:

  1. Prostota – Logika agentów mieści się w ~1000 liniach kodu, co pozwala skupić się wyłącznie na najważniejszych elementach.
  2. Wsparcie dla dowolnego LLM – Agenci mogą być napędzani przez modele Hugging Face, OpenAI, Anthropic i inne.
  3. Code Agents – Obsługa agentów, które generują kod w Pythonie w trakcie wykonywania zadań.
  4. 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:

  1. 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.
  2. 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.
Scroll to Top