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",
system
prompt="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())