Tutorial Phidata (Agno): Framework AI Agent yang Simpel dan Powerful

# Tutorial Phidata (Agno): Framework AI Agent yang Simpel dan Powerful Membangun AI agent yang cerdas dan otonom kini semakin mudah dengan hadirnya **Phidata** (sekarang dikenal sebagai **Agno**). Fr...

By Ruby Abdullah · · tutorial
PhidataAI AgentLLMAutonomous AgentPython

Tutorial Phidata (Agno): Framework AI Agent yang Simpel dan Powerful

Membangun AI agent yang cerdas dan otonom kini semakin mudah dengan hadirnya Phidata (sekarang dikenal sebagai Agno). Framework ini menawarkan pendekatan yang lebih sederhana dibandingkan CrewAI atau LangGraph, namun tetap powerful untuk berbagai use case mulai dari chatbot sederhana hingga multi-agent system yang kompleks.

Dalam tutorial ini, kita akan mempelajari cara membangun AI agent menggunakan Phidata/Agno dari nol hingga membuat research agent yang dapat mencari informasi di web dan menulis laporan secara otomatis.

Apa itu Phidata/Agno?

Phidata adalah framework open-source untuk membangun AI agent dengan Python. Framework ini dirancang dengan filosofi simplicity-first, di mana Anda bisa membuat agent yang functional hanya dengan beberapa baris kode. Phidata baru-baru ini melakukan rebranding menjadi Agno, namun konsep dan API-nya tetap konsisten.

Keunggulan utama Phidata/Agno:

  • Mudah dipelajari: API yang intuitif dan dokumentasi yang lengkap
  • Built-in tools: Web search, file operations, SQL, dan banyak lagi
  • Knowledge bases: Integrasi dengan vector database untuk RAG
  • Memory dan storage: Agent yang bisa mengingat konteks percakapan
  • Multi-agent teams: Orkestrasi beberapa agent sekaligus
  • Structured outputs: Output terstruktur dengan Pydantic models
  • Streaming: Dukungan streaming response secara real-time

Instalasi dan Setup

Instalasi Package

# Instalasi Phidata/Agno

pip install agno

Atau jika menggunakan nama lama

pip install phidata

Dependensi tambahan untuk tools

pip install openai duckduckgo-search sqlalchemy pgvector

Konfigurasi API Key

# Set environment variable untuk OpenAI

export OPENAIAPIKEY="sk-your-api-key-here"

Atau gunakan file .env

echo 'OPENAIAPIKEY=sk-your-api-key-here' > .env

# Atau set langsung di Python

import os

os.environ["OPENAIAPIKEY"] = "sk-your-api-key-here"

Membuat Agent Pertama

Agent Sederhana

from agno.agent import Agent

from agno.models.openai import OpenAIChat

Buat agent sederhana

agent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

description="Kamu adalah asisten yang helpful dan ramah.",

instructions=[

"Jawab dalam bahasa Indonesia",

"Berikan jawaban yang jelas dan terstruktur"

],

markdown=True

)

Jalankan agent

agent.printresponse("Jelaskan apa itu machine learning dalam 3 paragraf")

Agent dengan System Prompt yang Lebih Detail

agent = Agent(

model=OpenAIChat(id="gpt-4o"),

description="Kamu adalah data scientist senior dengan 10 tahun pengalaman.",

instructions=[

"Berikan jawaban yang teknis namun mudah dipahami",

"Sertakan contoh kode Python jika relevan",

"Gunakan analogi untuk menjelaskan konsep kompleks",

"Selalu rekomendasikan best practices"

],

markdown=True,

showtoolcalls=True

)

response = agent.run("Bagaimana cara menangani imbalanced dataset?")

print(response.content)

Menggunakan Tools

Tools adalah fitur paling powerful di Phidata/Agno. Agent dapat menggunakan tools untuk berinteraksi dengan dunia luar seperti mencari di web, membaca file, atau query database.

Web Search Tool

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools.duckduckgo import DuckDuckGoTools

Agent dengan kemampuan web search

webagent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

tools=[DuckDuckGoTools()],

description="Kamu adalah research assistant yang bisa mencari informasi di internet.",

instructions=[

"Selalu cari informasi terbaru sebelum menjawab",

"Sertakan sumber informasi",

"Berikan ringkasan yang terstruktur"

],

showtoolcalls=True,

markdown=True

)

webagent.printresponse("Apa perkembangan terbaru AI di Indonesia tahun 2026?")

File Operations Tool

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools.file import FileTools

Agent yang bisa membaca dan menulis file

fileagent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

tools=[FileTools(basedir="./output")],

description="Kamu adalah asisten yang bisa mengelola file.",

instructions=[

"Baca file yang diminta dan berikan ringkasannya",

"Tulis hasil analisis ke file baru jika diminta"

],

showtoolcalls=True

)

fileagent.printresponse("Buat file report.txt berisi ringkasan tentang tren AI 2026")

SQL Tool

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools.sql import SQLTools

Agent yang bisa query database

sqlagent = Agent(

model=OpenAIChat(id="gpt-4o"),

tools=[SQLTools(

dburl="postgresql://user:password@localhost:5432/mydb"

)],

description="Kamu adalah database analyst.",

instructions=[

"Analisis pertanyaan user dan buat SQL query yang tepat",

"Jelaskan hasil query dalam bahasa yang mudah dipahami",

"Jangan pernah menjalankan DELETE atau DROP tanpa konfirmasi"

],

showtoolcalls=True,

markdown=True

)

sqlagent.printresponse("Berapa total penjualan bulan lalu per kategori produk?")

Custom Tools

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools import tool

Definisikan custom tool

@tool

def calculatebmi(weightkg: float, heightm: float) -> str:

"""Menghitung Body Mass Index (BMI) berdasarkan berat dan tinggi badan.

Args:

weightkg: Berat badan dalam kilogram

heightm: Tinggi badan dalam meter

Returns:

Hasil perhitungan BMI dan kategorinya

"""

bmi = weightkg / (heightm * 2)

if bmi < 18.5:

category = "Underweight"

elif bmi < 25:

category = "Normal"

elif bmi < 30:

category = "Overweight"

else:

category = "Obese"

return f"BMI: {bmi:.1f} - Kategori: {category}"

@tool

def getweather(city: str) -> str:

"""Mendapatkan informasi cuaca untuk kota tertentu.

Args:

city: Nama kota

Returns:

Informasi cuaca

"""

# Simulasi data cuaca

return f"Cuaca di {city}: Cerah, 28°C, Kelembaban 65%"

Agent dengan custom tools

healthagent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

tools=[calculatebmi, getweather],

description="Kamu adalah asisten kesehatan.",

showtoolcalls=True

)

healthagent.printresponse("Hitung BMI saya: berat 70kg, tinggi 1.75m")

Knowledge Bases

Knowledge base memungkinkan agent mengakses data spesifik menggunakan teknik RAG (Retrieval Augmented Generation).

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.knowledge.pdf import PDFKnowledgeBase

from agno.vectordb.pgvector import PgVector

Buat knowledge base dari PDF

knowledgebase = PDFKnowledgeBase(

path="./documents",

vectordb=PgVector(

tablename="pdfdocuments",

dburl="postgresql+psycopg://user:pass@localhost:5432/ai"

)

)

Load documents ke vector database (jalankan sekali)

knowledgebase.load()

Agent dengan knowledge base

docagent = Agent(

model=OpenAIChat(id="gpt-4o"),

knowledge=knowledgebase,

description="Kamu adalah asisten yang menjawab berdasarkan dokumen perusahaan.",

instructions=[

"Jawab HANYA berdasarkan informasi dari knowledge base",

"Jika informasi tidak ditemukan, katakan dengan jujur",

"Sertakan referensi dokumen sumber"

],

searchknowledge=True,

markdown=True

)

docagent.printresponse("Apa kebijakan cuti karyawan?")

Knowledge Base dari Website

from agno.knowledge.website import WebsiteKnowledgeBase

from agno.vectordb.pgvector import PgVector

webkb = WebsiteKnowledgeBase(

urls=["https://docs.python.org/3/tutorial/"],

maxdepth=2,

vectordb=PgVector(

tablename="pythondocs",

dburl="postgresql+psycopg://user:pass@localhost:5432/ai"

)

)

webkb.load()

Memory dan Storage

Agent bisa menyimpan konteks percakapan dan mengingat interaksi sebelumnya.

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.memory.db.postgres import PgMemory

from agno.storage.postgres import PostgresStorage

Agent dengan memory dan storage

persistentagent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

# Memory untuk mengingat percakapan

memory=PgMemory(

tablename="agentmemory",

dburl="postgresql+psycopg://user:pass@localhost:5432/ai"

),

# Storage untuk menyimpan session

storage=PostgresStorage(

tablename="agentsessions",

dburl="postgresql+psycopg://user:pass@localhost:5432/ai"

),

description="Kamu adalah asisten personal yang mengingat percakapan sebelumnya.",

instructions=[

"Ingat preferensi dan konteks user dari percakapan sebelumnya",

"Personalisasi jawaban berdasarkan riwayat interaksi"

],

# Aktifkan fitur memory

addhistorytomessages=True,

numhistoryresponses=5,

createusermemories=True,

markdown=True

)

Session 1

persistentagent.printresponse(

"Nama saya Budi, saya seorang data engineer di Jakarta",

sessionid="user-budi-001"

)

Session 2 - agent akan ingat konteks sebelumnya

persistentagent.printresponse(

"Rekomendasikan buku untuk profesi saya",

sessionid="user-budi-001"

)

Multi-Agent Teams

Phidata/Agno memungkinkan Anda membuat tim agent yang bekerja sama untuk menyelesaikan tugas kompleks.

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools.duckduckgo import DuckDuckGoTools

from agno.tools.file import FileTools

Agent Researcher

researcher = Agent(

name="Researcher",

model=OpenAIChat(id="gpt-4o"),

tools=[DuckDuckGoTools()],

description="Kamu adalah peneliti yang ahli mencari dan menganalisis informasi.",

instructions=[

"Cari informasi yang relevan dan terkini",

"Verifikasi fakta dari multiple sources",

"Berikan data dan statistik yang akurat"

]

)

Agent Writer

writer = Agent(

name="Writer",

model=OpenAIChat(id="gpt-4o"),

tools=[FileTools(basedir="./output")],

description="Kamu adalah penulis konten profesional.",

instructions=[

"Tulis konten yang engaging dan informatif",

"Gunakan struktur yang jelas dengan heading dan bullet points",

"Sesuaikan gaya penulisan dengan target audience"

]

)

Team Leader yang mengkoordinasi

teamleader = Agent(

name="Team Leader",

model=OpenAIChat(id="gpt-4o"),

team=[researcher, writer],

description="Kamu adalah project manager yang mengkoordinasi tim research dan writing.",

instructions=[

"Delegasikan tugas research ke Researcher",

"Delegasikan tugas penulisan ke Writer",

"Pastikan output akhir berkualitas tinggi",

"Review dan gabungkan hasil dari semua agent"

],

showtoolcalls=True,

markdown=True

)

teamleader.printresponse(

"Buat artikel tentang perkembangan AI generatif di Asia Tenggara 2026"

)

Structured Outputs

Phidata/Agno mendukung structured output menggunakan Pydantic models untuk mendapatkan response yang terstruktur dan type-safe.

from pydantic import BaseModel, Field

from typing import List, Optional

from agno.agent import Agent

from agno.models.openai import OpenAIChat

Definisikan output schema

class MovieReview(BaseModel):

title: str = Field(description="Judul film")

genre: List[str] = Field(description="Genre film")

rating: float = Field(description="Rating 1-10")

summary: str = Field(description="Ringkasan review")

pros: List[str] = Field(description="Kelebihan film")

cons: List[str] = Field(description="Kekurangan film")

recommendation: bool = Field(description="Apakah direkomendasikan")

Agent dengan structured output

reviewagent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

description="Kamu adalah kritikus film profesional.",

responsemodel=MovieReview

)

Response akan berupa MovieReview object

response = reviewagent.run("Review film The Matrix")

review = response.content

print(f"Film: {review.title}")

print(f"Rating: {review.rating}/10")

print(f"Direkomendasikan: {'Ya' if review.recommendation else 'Tidak'}")

Structured Output untuk Data Extraction

class CompanyInfo(BaseModel):

name: str

industry: str

foundedyear: Optional[int]

headquarters: Optional[str]

products: List[str]

employeecount: Optional[str]

extractagent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

description="Kamu mengekstrak informasi perusahaan dari teks.",

responsemodel=CompanyInfo

)

text = """

Gojek adalah perusahaan teknologi asal Indonesia yang didirikan tahun 2010

di Jakarta. Perusahaan ini menyediakan layanan ride-hailing, food delivery

(GoFood), pembayaran digital (GoPay), dan logistik. Gojek memiliki lebih

dari 5000 karyawan.

"""

response = extractagent.run(f"Ekstrak informasi perusahaan: {text}")

info = response.content

print(f"Perusahaan: {info.name}")

print(f"Produk: {', '.join(info.products)}")

Streaming Responses

Streaming memungkinkan Anda mendapatkan response secara real-time, cocok untuk aplikasi chatbot.

from agno.agent import Agent

from agno.models.openai import OpenAIChat

agent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

description="Kamu adalah storyteller yang kreatif.",

markdown=True

)

Streaming response

for chunk in agent.run("Ceritakan kisah tentang robot yang belajar memasak", stream=True):

print(chunk.content, end="", flush=True)

Streaming dengan Tools

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools.duckduckgo import DuckDuckGoTools

agent = Agent(

model=OpenAIChat(id="gpt-4o-mini"),

tools=[DuckDuckGoTools()],

showtoolcalls=True,

markdown=True

)

Stream response termasuk tool calls

responsestream = agent.run(

"Cari berita terbaru tentang startup AI di Indonesia",

stream=True

)

for chunk in responsestream:

if chunk.content:

print(chunk.content, end="", flush=True)

if chunk.toolcalls:

for toolcall in chunk.toolcalls:

print(f"\n[Calling tool: {toolcall.function.name}]")

Proyek Praktis: Research Agent

Mari kita bangun research agent yang lengkap - agent yang bisa mencari informasi di web, menganalisisnya, dan menulis laporan terstruktur.

from agno.agent import Agent

from agno.models.openai import OpenAIChat

from agno.tools.duckduckgo import DuckDuckGoTools

from agno.tools.file import FileTools

from pydantic import BaseModel, Field

from typing import List

from datetime import datetime

Schema untuk laporan penelitian

class ResearchSection(BaseModel):

heading: str = Field(description="Judul seksi")

content: str = Field(description="Isi konten seksi")

sources: List[str] = Field(description="Sumber referensi")

class ResearchReport(BaseModel):

title: str = Field(description="Judul laporan")

executivesummary: str = Field(description="Ringkasan eksekutif")

sections: List[ResearchSection] = Field(description="Seksi-seksi laporan")

conclusion: str = Field(description="Kesimpulan")

recommendations: List[str] = Field(description="Rekomendasi")

Agent untuk research

researchagent = Agent(

name="WebResearcher",

model=OpenAIChat(id="gpt-4o"),

tools=[DuckDuckGoTools()],

description="Kamu adalah peneliti yang ahli dalam mencari dan mengumpulkan informasi.",

instructions=[

"Cari informasi dari berbagai sumber",

"Fokus pada data terbaru dan terpercaya",

"Catat semua sumber referensi",

"Berikan fakta dan statistik yang relevan"

],

showtoolcalls=True

)

Agent untuk menulis laporan

writeragent = Agent(

name="ReportWriter",

model=OpenAIChat(id="gpt-4o"),

tools=[FileTools(basedir="./reports")],

description="Kamu adalah penulis laporan profesional.",

instructions=[

"Tulis laporan yang terstruktur dan komprehensif",

"Gunakan bahasa yang formal namun mudah dipahami",

"Sertakan data pendukung dan referensi",

"Buat rekomendasi yang actionable"

]

)

Koordinator tim

researchteam = Agent(

name="ResearchCoordinator",

model=OpenAIChat(id="gpt-4o"),

team=[researchagent, writeragent],

description="Kamu mengkoordinasi proses penelitian dan penulisan laporan.",

instructions=[

"1. Minta WebResearcher mencari informasi tentang topik",

"2. Analisis dan sintesis hasil pencarian",

"3. Minta ReportWriter menulis laporan lengkap",

"4. Review dan pastikan kualitas laporan"

],

responsemodel=ResearchReport,

showtoolcalls=True,

markdown=True

)

Jalankan research

topic = "Implementasi AI dalam sektor perbankan di Indonesia 2026"

response = researchteam.run(f"Buat laporan penelitian tentang: {topic}")

report = response.content

print(f"\n{'='60}")

print(f"LAPORAN: {report.title}")

print(f"{'='*60}")

print(f"\nRingkasan Eksekutif:\n{report.executivesummary}")

for section in report.sections:

print(f"\n## {section.heading}")

print(section.content)

print(f"Sumber: {', '.join(section.sources)}")

print(f"\nKesimpulan:\n{report.conclusion}")

print(f"\nRekomendasi:")

for i, rec in enumerate(report.recommendations, 1):

print(f" {i}. {rec}")

Menjalankan Proyek

# Buat direktori proyek

mkdir research-agent && cd research-agent

Setup virtual environment

python -m venv venv

source venv/bin/activate

Install dependencies

pip install agno openai duckduckgo-search

Set API key

export OPENAIAPIKEY="your-key-here"

Jalankan

python researchagent.py

Tips dan Best Practices

  • Pilih model yang tepat: Gunakan gpt-4o-mini untuk tugas sederhana dan gpt-4o untuk tugas kompleks. Ini menghemat biaya tanpa mengorbankan kualitas.
  • Tulis instructions yang spesifik: Semakin spesifik instruksi Anda, semakin baik output agent. Hindari instruksi yang ambigu.
  • Gunakan structured output: Untuk aplikasi production, selalu gunakan Pydantic models untuk memastikan output yang konsisten.
  • Batasi tool access: Berikan hanya tools yang dibutuhkan agent. Terlalu banyak tools bisa membuat agent bingung.
  • Monitor token usage: Gunakan debug_mode=True untuk melihat jumlah token yang digunakan setiap request.
  • Handle errors: Selalu wrap agent calls dalam try-except untuk menangani API errors.
  • try:
    

    response = agent.run("query here")

    except Exception as e:

    print(f"Error: {e}")

    # Implement retry logic atau fallback

    Kesimpulan

    Phidata/Agno adalah framework yang sangat cocok untuk membangun AI agent dengan cepat dan efisien. Dibandingkan dengan framework lain seperti CrewAI atau LangGraph, Phidata menawarkan learning curve yang lebih rendah tanpa mengorbankan fleksibilitas. Dengan fitur-fitur seperti built-in tools, knowledge bases, memory, dan multi-agent teams, Anda bisa membangun sistem AI yang kompleks dengan kode yang bersih dan mudah dipelihara.

    Mulailah dengan agent sederhana, tambahkan tools sesuai kebutuhan, dan secara bertahap tingkatkan kompleksitas sistem Anda. Selamat mencoba!

    Artikel Terkait

    Tutorial Browser-Use: Automasi Browser dengan AI Agent

    Tutorial Browser-Use: Automasi Browser dengan AI Agent Pendahuluan Browser-Use adalah library Python open-source yang me...

    Tutorial CrewAI: Membangun Multi-Agent AI Framework

    CrewAI - Framework AI Multi-Agen Daftar Isi Pendahuluan Prasyarat Instalasi dan Pengaturan Konsep Dasar 5...

    Tutorial MergeKit: Menggabungkan Model LLM untuk Membuat Model AI Kustom

    Tutorial MergeKit: Menggabungkan Model LLM untuk Membuat Model AI Kustom Model bahasa besar (LLM) open-source terus berk...

    Tutorial Semantic Router: Routing Cerdas untuk Aplikasi LLM

    Tutorial Semantic Router: Routing Cerdas untuk Aplikasi LLM Semantic Router adalah library Python yang memungkinkan Anda...