Tutorial PydanticAI: Framework Agent LLM yang Type-Safe

# Membangun Agen LLM yang Type-Safe dengan PydanticAI PydanticAI adalah framework agen dari tim di balik Pydantic, dirancang untuk membawa pengalaman pengembang yang sama seperti yang dibawa FastAPI...

By Ruby Abdullah · · tutorial
PydanticAILLMAI AgentsPydanticStructured OutputPython

Membangun Agen LLM yang Type-Safe dengan PydanticAI

PydanticAI adalah framework agen dari tim di balik Pydantic, dirancang untuk membawa pengalaman pengembang yang sama seperti yang dibawa FastAPI ke dunia web API ke dalam ranah AI generatif. Tutorial ini membahas konsep intinya: agen yang type-safe, output terstruktur, dependency injection, dan tools, diakhiri dengan agen customer-support lengkap yang bisa Anda sesuaikan untuk proyek Anda sendiri.

Apa Itu PydanticAI dan Mengapa Dibuat

Tim Pydantic membangun PydanticAI karena sebagian besar ekosistem AI Python entah menemukan ulang validasi dengan buruk atau membungkus panggilan LLM dalam dictionary yang minim tipe. PydanticAI mengambil sikap berbeda: bersandar pada sistem tipe, memvalidasi segalanya, dan menjaga API tetap cukup ringkas untuk dipahami.

Beberapa prinsip desain membentuk framework ini:

  • Type-safe secara bawaan. Agen mendeklarasikan tipe dependensi dan tipe output sebagai parameter generik. Pemeriksa statis seperti mypy dan Pyright memahaminya, dan editor Anda memberikan autocomplete yang sesuai.
  • Model-agnostic. OpenAI, Anthropic, Google (Gemini), Groq, Mistral, Ollama, dan lainnya didukung di balik satu antarmuka Agent. Berpindah model biasanya cukup perubahan satu baris.
  • Ergonomi ala FastAPI. Dependency injection, dekorator untuk tools dan validator, serta pemisahan yang rapi antara mendefinisikan agen dan menjalankannya akan terasa akrab jika Anda pernah memakai FastAPI.
  • Dibangun di atas Pydantic. Output terstruktur adalah model Pydantic biasa, sehingga Anda mendapatkan validasi, pembuatan JSON schema, dan serialisasi secara gratis.
  • Observability untuk produksi. Integrasi kelas satu dengan Logfire memberi Anda tracing dan debugging tanpa perlu memasang framework terpisah.

PydanticAI sengaja bukan platform orkestrasi serba bisa. Ia fokus pada loop agen, sehingga Anda bebas mengomposisikan agen dengan kode aplikasi Anda sendiri.

Instalasi

PydanticAI membutuhkan Python 3.9 atau lebih baru. Instal dengan pip:

pip install pydantic-ai

Paket dasar menyertakan dukungan untuk penyedia model utama. Jika menginginkan instalasi yang lebih ramping, Anda bisa memilih hanya penyedia yang Anda butuhkan:

pip install "pydantic-ai-slim[openai]"

pip install "pydantic-ai-slim[anthropic]"

pip install "pydantic-ai-slim[google]"

Jika Anda berencana memakai observability, instal juga ekstra Logfire:

pip install "pydantic-ai[logfire]"

Sebagian besar penyedia membaca API key-nya dari variabel lingkungan:

export OPENAIAPIKEY="sk-..."

export ANTHROPICAPIKEY="sk-ant-..."

export GEMINIAPIKEY="..."

Agen Pertama Anda

Agent adalah objek pusat. Anda memberinya pengenal model dan system prompt opsional, lalu menjalankannya.
from pydanticai import Agent

agent = Agent(

"openai:gpt-4o",

systemprompt="Anda asisten yang ringkas. Jawab dalam satu atau dua kalimat.",

)

result = agent.runsync("Apa ibu kota Indonesia?")

print(result.output)

Jakarta adalah ibu kota Indonesia.

String model mengikuti pola penyedia:nama-model. Berpindah penyedia cukup perubahan satu baris:

agent = Agent("anthropic:claude-3-5-sonnet-latest")

agent = Agent("google-gla:gemini-1.5-flash")

Anda juga bisa mengoper instance model secara langsung jika butuh konfigurasi khusus seperti base URL atau timeout. Bentuk string praktis untuk kasus umum.

Tiga Cara Menjalankan Agen

PydanticAI menyediakan tiga metode jalan tergantung konteks eksekusi Anda:

import asyncio

Sinkron - praktis di skrip dan notebook

result = agent.runsync("Halo")

print(result.output)

Asinkron - untuk aplikasi async dan konkurensi

async def main():

result = await agent.run("Halo")

print(result.output)

asyncio.run(main())

Streaming - menerima output bertahap saat dihasilkan

async def streamexample():

async with agent.runstream("Ceritakan kisah pendek") as response:

async for chunk in response.streamtext(delta=True):

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

asyncio.run(streamexample())

Artikel Terkait

Instructor: Mendapatkan Structured Output dari LLM dengan Python

Instructor: Mendapatkan Structured Output dari LLM dengan Python Salah satu tantangan terbesar saat bekerja dengan Large...

Tutorial Lengkap LangGraph: Membangun AI Agents yang Kompleks

Tutorial Lengkap LangGraph: Membangun AI Agents yang Kompleks LangGraph adalah library dari LangChain untuk membangun st...

Tutorial TRL: Post-Training LLM dengan SFT, DPO, dan Reward Modeling

Post-Training LLM dengan TRL: SFT, Reward Modeling, dan DPO Setelah sebuah base language model selesai dipretraining, mo...

Tutorial Axolotl: Fine-Tuning LLM Berbasis Konfigurasi YAML

Fine-Tuning LLM Berbasis Konfigurasi dengan Axolotl Kebanyakan proyek fine-tuning dimulai dengan cara yang sama: seseora...