Strands Agents SDK
Strands mengambil pendekatan model-driven: kamu mendefinisikan tool dan membiarkan model yang mengorkestrasi. Untuk agent kustom di AWS, ini titik awal yang paling ringkas.
Intisari
pip install strands-agents; paketstrands-agents-toolsberisi tool siap pakai.- Dekorator
@toolmengubah fungsi Python jadi tool — docstring-nya jadi deskripsi tool. - Default-nya memakai penyedia model Amazon Bedrock.
- Mendukung tool MCP, keluaran terstruktur lewat Pydantic, streaming, dan pola multi-agent.
- Disebut di exam guide AIP-C01 sebagai jalur orkestrasi native AWS, bersama AgentCore.
Agent pertama
uv add strands-agents strands-agents-tools
from strands import Agent, tool
from strands_tools import calculator, current_time
@tool
def hitung_sisa_cuti(nip: str, tahun: int) -> int:
"""Hitung sisa cuti tahunan seorang karyawan.
Args:
nip: Nomor induk pegawai
tahun: Tahun yang ditanyakan
Returns:
Jumlah hari cuti yang tersisa
"""
return ambil_dari_dynamodb(nip, tahun)
agent = Agent(tools=[calculator, current_time, hitung_sisa_cuti])
print(agent("Berapa sisa cuti NIP 12345 tahun ini?"))
Docstring bukan hiasan. Strands menurunkan deskripsi tool dan skema argumennya dari docstring dan
type hint. Docstring yang malas menghasilkan tool yang salah dipakai — persis seperti masalah deskripsi tool
di materi Converse. Kalau kamu sudah menulis docstring rapi sejak learn-python, kamu sudah
setengah jalan.
Yang dikerjakan Strands untukmu
| Bagian | Loop manual (materi tool use) | Strands |
|---|---|---|
| Definisi skema tool | JSON Schema tulis tangan | Dari type hint dan docstring |
| Loop giliran | Kamu tulis | Bawaan |
Pengiriman toolResult | Kamu urus toolUseId | Bawaan |
| Penanganan error tool | Kamu bungkus sendiri | Bawaan |
| Riwayat percakapan | List yang kamu kelola | Objek agent |
Materi tool use manual tetap penting: saat agent berperilaku aneh, kamu perlu tahu apa yang sedang terjadi di dalam loop itu. Strands menghemat pengetikan, bukan pemahaman.
Memakai tool MCP
from strands import Agent
from strands.tools.mcp import MCPClient
klien = MCPClient(url=GATEWAY_MCP_URL, headers={"Authorization": f"Bearer {token}"})
with klien:
agent = Agent(tools=klien.list_tools_sync())
print(agent("Ringkas kebijakan cuti dan buatkan tiket kalau ada yang tidak jelas."))
Keluaran terstruktur
from pydantic import BaseModel
class Ringkasan(BaseModel):
judul: str
poin: list[str]
perlu_tindakan: bool
hasil = agent.structured_output(Ringkasan, "Ringkas dokumen kebijakan cuti.")
print(hasil.poin) # objek Pydantic, sudah tervalidasi
Ini sambungan langsung dari Pydantic di learn-python: alih-alih memparsing teks dan berharap,
kamu mendeklarasikan bentuk yang diinginkan dan mendapat objek yang sudah divalidasi.
Debugging
import logging
logging.getLogger("strands").setLevel(logging.DEBUG)
logging.basicConfig(format="%(levelname)s | %(name)s | %(message)s")
agent = Agent(tools=[hitung_sisa_cuti])
agent("Berapa sisa cutiku?") # cetak seluruh prompt, permintaan tool, dan hasilnya
Nyalakan ini saat pertama kali membangun agent. Melihat prompt yang sebenarnya terkirim — beserta deskripsi tool hasil generate — menjelaskan sebagian besar perilaku yang tampak misterius.
Menaikkannya ke produksi
| Kebutuhan | Jawaban |
|---|---|
| Tempat menjalankan | AgentCore Runtime, atau Lambda/Fargate biasa |
| Memori lintas sesi | AgentCore Memory |
| Tool bersama antar agent | AgentCore Gateway |
| Penyaringan input/output | Bedrock Guardrails (Fase 6) |
| Telemetri | AgentCore Observability + CloudWatch (Fase 7) |
Latihan: tulis ulang agent dari materi tool use memakai Strands, dengan tool yang sama persis.
Nyalakan log DEBUG dan bandingkan prompt yang dikirim Strands dengan toolConfig yang kamu susun
manual sebelumnya. Catat apa yang ditambahkan Strands yang tidak kamu pikirkan.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.