Lewati ke konten utama

Smolagents dari Hugging Face: Panduan dengan Contoh

Pelajari cara menyederhanakan pembuatan agen AI dengan pustaka Python baru dari Hugging Face, smolagents, dan ikuti proyek demo untuk melihatnya beraksi.
· 8 mnt Baca

Jelajahi bersama AI

smolagents dari Hugging Face adalah pustaka Python yang menyederhanakan pembuatan agen AI sehingga lebih mudah diakses oleh para pengembang.

Dalam blog ini, saya akan memperkenalkan pustaka smolagents, menjelaskan mengapa pustaka ini bermanfaat, dan memandu Anda melalui proyek demo untuk menunjukkan kemampuannya.

Apa Itu Smolagents dari Hugging Face?

Seperti yang dijelaskan dalam blog pengumuman Hugging Face, smolagents adalah “pustaka yang sangat sederhana yang membuka kapabilitas agentic untuk model bahasa.” Namun mengapa kita memerlukan pustaka untuk membangun agen?

Pada dasarnya, agen didukung oleh LLM untuk secara dinamis menyelesaikan suatu tugas dengan mengamati lingkungannya, membuat rencana, dan mengeksekusi rencana tersebut menggunakan seperangkat alat yang dimilikinya. Membangun agen-agen ini, meskipun bukan tidak mungkin, mengharuskan Anda menulis banyak komponen dari nol. Komponen-komponen ini memastikan agen berfungsi dengan baik tanpa menguras kredit API dan waktu eksekusi Anda. Kerangka agentic mempermudah hal ini sehingga Anda tidak perlu menemukan kembali roda.

Kerangka agen AI sering dikritik karena dua hal:

  1. Mereka membangun terlalu banyak lapisan abstraksi, membuatnya kaku dan sulit di-debug.
  2. Mereka berfokus pada “alur kerja” alih-alih membangun agen yang dapat berkolaborasi secara dinamis secara mandiri.

Di sisi lain, smolagents memiliki kualitas yang membuatnya sangat menjanjikan untuk aplikasi agentic ini:

  • Abstraksi kerangka kerjanya dijaga seminimal mungkin.
  • Sementara sebagian besar kerangka membuat agen mendefinisikan aksinya dalam format JSON/teks, pendekatan utama smolagents adalah Code Agents di mana aksi ditulis sebagai potongan kode Python (berbeda dari agen yang menulis kode).
  • Sebagai kerangka kerja dari Hugging Face, smolagents terintegrasi baik dengan Hub dan pustaka Transformers. Anda dapat menggunakan banyak model dari hub (beberapa hanya dapat digunakan sebagai pengguna Pro), dan Anda juga dapat bekerja dengan model proprietari dari OpenAI, Anthropic, dan lainnya.
  • Anda dapat dengan mudah memanfaatkan alat yang sudah tersedia, atau mendefinisikan alat kustom Anda dengan upaya minimum, hampir sesederhana menulis fungsi Python.

Kualitas-kualitas inilah yang, di atas kertas, membuat smolagents dapat dipasang dan digunakan untuk agen AI dengan sedikit usaha, jadi mari kita lihat apakah itu terbukti dalam praktik.

Membangun Proyek Demo dengan Smolagents

Pada bagian ini, kita akan membangun demo sederhana dengan smolagents. Aplikasi kita akan membuat agen mengambil makalah dengan suara terbanyak di halaman Daily Papers Hugging Face. Kita membangun alat kustom untuk agen dan melihatnya bekerja secara langsung.

Daily Papers dari Hugging Face, sumber yang baik untuk mengikuti makalah riset harian teratas.

Daily Papers, sumber yang baik untuk mengikuti makalah riset harian teratas.

Menyiapkan smolagents

Untuk menggunakan smolagents, Anda hanya perlu memasang pustakanya dan menyediakan token Hugging Face. Kemudahan penyiapan kerangka kerja ini merupakan nilai tambah.

Untuk memasang paketnya, jalankan:

pip install smolagents

Membangun alat kustom

Meskipun kerangka kerja menyediakan alat bawaan yang bisa langsung digunakan (mis. DuckDuckGoSearchTool), membangun alat kustom Anda sendiri sama sederhananya. Untuk tujuan kita, kita membangun empat alat, masing-masing untuk tujuan tertentu:

  • Mengambil judul makalah harian teratas.
  • Mengambil ID makalah menggunakan judulnya.
  • Mengunduh makalah dari arXiv dengan ID tersebut.
  • Membaca berkas PDF yang diunduh.

Salah satu penyebab umum kesalahan agen adalah penggunaan alat. Untuk mengoptimalkan alat bagi tujuan agentic, penting memastikan agen memahami dengan jelas alat mana yang digunakan dan bagaimana menggunakannya. Untuk mencapainya, jadilah sedetail mungkin saat mendefinisikan alat-alat ini:

  • Pilih nama fungsi yang informatif.
  • Input dan output fungsi harus memiliki petunjuk tipe (type hints).
  • Deskripsi tujuan alat harus disertakan. Ini berfungsi sebagai panduan bagi agen.

Sekarang mari kita bangun alat kustom pertama kita untuk mengurai halaman daily papers dan mengambil judul makalah teratas:

from smolagents import tool 
# import packages that are used in our tools
import requests
from bs4 import BeautifulSoup
import json

@tool
def get_hugging_face_top_daily_paper() -> str:
    """
    This is a tool that returns the most upvoted paper on Hugging Face daily papers.
    It returns the title of the paper
    """
    try:
      url = "<https://huggingface.co/papers>"
      response = requests.get(url)
      response.raise_for_status()  # Raise an exception for bad status codes (4xx or 5xx)
      soup = BeautifulSoup(response.content, "html.parser")

      # Extract the title element from the JSON-like data in the "data-props" attribute
      containers = soup.find_all('div', class_='SVELTE_HYDRATER contents')
      top_paper = ""

      for container in containers:
          data_props = container.get('data-props', '')
          if data_props:
              try:
                  # Parse the JSON-like string
                  json_data = json.loads(data_props.replace('&quot;', '"'))
                  if 'dailyPapers' in json_data:
                      top_paper = json_data['dailyPapers'][0]['title']
              except json.JSONDecodeError:
                  continue

      return top_paper
    except requests.exceptions.RequestException as e:
      print(f"Error occurred while fetching the HTML: {e}")
      return None

Perhatikan dekorator @tool, penamaan alat yang jelas, petunjuk tipe, dan docstring. Dengan cara yang sama, kita mendefinisikan alat get_paper_id_by_title untuk mendapatkan ID makalah berdasarkan judulnya, sehingga kita bisa mengunduhnya dari arXiv. Untuk alat ini, kita memanfaatkan API Hugging Face.

from huggingface_hub import HfApi

@tool
def get_paper_id_by_title(title: str) -> str:
    """
    This is a tool that returns the arxiv paper id by its title.
    It returns the title of the paper

    Args:
        title: The paper title for which to get the id.
    """
    api = HfApi()
    papers = api.list_papers(query=title)
    if papers:
        paper = next(iter(papers))
        return paper.id
    else:
        return None

Mengunduh makalah menggunakan ID-nya dapat dilakukan dengan paket Python arxiv. Kita menyimpan makalah secara lokal dengan nama tertentu, yang kemudian kita gunakan untuk membacanya:

import arxiv

@tool
def download_paper_by_id(paper_id: str) -> None:
    """
    This tool gets the id of a paper and downloads it from arxiv. It saves the paper locally 
    in the current directory as "paper.pdf".

    Args:
        paper_id: The id of the paper to download.
    """
    paper = next(arxiv.Client().results(arxiv.Search(id_list=[paper_id])))
    paper.download_pdf(filename="paper.pdf")
    return None

Untuk membaca berkas PDF, Anda dapat menggunakan paket pypdf. Kita hanya akan membaca tiga halaman pertama makalah untuk menghemat penggunaan token.

from pypdf import PdfReader

@tool
def read_pdf_file(file_path: str) -> str:
    """
    This function reads the first three pages of a PDF file and returns its content as a string.
    Args:
        file_path: The path to the PDF file.
    Returns:
        A string containing the content of the PDF file.
    """
    content = ""
    reader = PdfReader('paper.pdf')
    print(len(reader.pages))
    pages = reader.pages[:3]
    for page in pages:
        content += page.extract_text()
    return content

Jika Anda mendefinisikan alat kustom dan agen kesulitan menggunakannya dengan benar atau mengoper argumen yang tepat, pertimbangkan untuk memperjelas dan mempertegas nama fungsi serta variabel, juga deskripsi alatnya.

Menjalankan Agen

Dengan alat kita yang sudah siap, kini kita dapat menginisialisasi dan menjalankan agen. Kita menggunakan model Qwen2.5-Coder-32B-Instruct, yang dapat digunakan secara gratis. Alat yang dibutuhkan agen dapat diteruskan saat mendefinisikan agen. Anda dapat melihat bahwa proses mendefinisikan dan menjalankan agen memerlukan kode yang minimal:

from smolagents import CodeAgent, HfApiModel

model_id = "Qwen/Qwen2.5-Coder-32B-Instruct"

model = HfApiModel(model_id=model_id, token=<YOUR-API>)
agent = CodeAgent(tools=[get_hugging_face_top_daily_paper,
                         get_paper_id_by_title,
                         download_paper_by_id,
                         read_pdf_file],
                  model=model,
                  add_base_tools=True)

agent.run(
    "Summarize today's top paper on Hugging Face daily papers by reading it.",
)

Saat agen berjalan, ia menampilkan prosesnya selangkah demi selangkah. Ini memungkinkan kita melihat bagaimana agen mendefinisikan aksinya dalam kode sambil memanfaatkan alat kustom yang kita sediakan:

Keluaran agen smolagent pada langkah 0

Keluaran agen pada langkah 0

Agen dapat menyelesaikan pembacaan makalah pada langkah pertama (Langkah 0). Pada langkah kedua, model membuat daftar poin-poin kunci makalah, lagi-lagi dalam sebuah daftar Python.

keluaran agen smolagent pada langkah 1.

Keluaran agen pada langkah 1

Pada langkah ketiga (Langkah 2), agen membuat ringkasan dari poin-poin kunci dan mencetaknya pada langkah akhir (Langkah 3).

keluaran agen smolagent pada langkah 2, 3.

Keluaran agen pada langkah 2, 3.

Agen mampu mengidentifikasi alat mana yang digunakan pada setiap langkah dan menyelesaikan tugas tanpa kesalahan. Perlu dicatat bahwa seluruh pipeline bisa dioptimalkan untuk menggunakan lebih sedikit alat, tetapi saya ingin melihat bagaimana agen memanfaatkan beberapa pemanggilan alat.

Untuk tugas yang lebih menantang, yang memerlukan penalaran atau penggunaan alat yang lebih kompleks, Anda juga dapat menggunakan model yang lebih andal sebagai tulang punggung agen Anda, seperti yang ditawarkan oleh OpenAI atau Claude.

Kesimpulan

Apa yang Anda cari dalam sebuah kerangka agentic? Jawaban Anda akan memudahkan memilih mana yang digunakan, tetapi jika Anda menginginkan kerangka sederhana yang tidak dipenuhi abstraksi, memberi Anda kendali, memiliki integrasi yang baik, dan menyediakan hal-hal dasar tanpa mengambil alih kemudi, maka smolagents adalah opsi yang layak dicoba.

Integrasi yang baik dengan ekosistem Hugging Face berarti lebih banyak model dan alat siap pakai, ditambah dukungan dari komunitas open-source. Kerangka ini bekerja dengan baik sesuai yang dijanjikan. Akan lebih baik jika ada lebih banyak alat bawaan, dan kita bisa berharap itu terwujud seiring pengembangannya.

Jika Anda ingin membaca lebih lanjut tentang agen AI dan smolagents, jangan lewatkan sumber berikut:

Hesam Sheikh Hassani

Penulis

Hesam Sheikh Hassani

Mahasiswa magister Kecerdasan Buatan dan penulis teknis AI. Saya berbagi wawasan tentang teknologi AI terbaru, membuat riset ML lebih mudah diakses, dan menyederhanakan topik AI yang kompleks agar Anda tetap terdepan.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

Tutorial Korelasi di R