Bedrock Flows
Flows menyambungkan node prompt, model, knowledge base, dan layanan AWS lewat pembangun visual. Berguna untuk alur yang bentuknya sudah jelas dan tidak perlu penalaran bebas.
Intisari
- Alur dibangun dari node yang saling terhubung: prompt, knowledge base, Lambda, kondisi.
- Bisa dibangun lewat pembangun visual — cocok untuk kolaborasi dengan yang bukan engineer.
- Alur di-deploy sebagai versi yang tidak bisa diubah, jadi produksi tidak berubah diam-diam.
- Harganya mengikuti resource yang dipakai — memanggil node prompt berarti dibayar biaya model itu.
- Bedakan dari agent: flow punya jalur yang kamu tentukan; agent memutuskan sendiri langkahnya.
Flow, agent, atau Step Functions?
| Bedrock Flows | Agent | Step Functions | |
|---|---|---|---|
| Siapa menentukan urutan | Kamu, secara visual | Model | Kamu, dalam JSON |
| Bisa diprediksi | Tinggi | Rendah | Tinggi |
| Retry & error handling | Terbatas | Tergantung framework | Sangat lengkap |
| Cocok untuk | Alur GenAI yang bentuknya jelas | Tugas terbuka | Alur produksi berlangkah banyak |
| Kolaborasi non-engineer | Paling mudah | Sulit | Sulit |
Contoh alur
Contoh dari dokumentasi resminya, disederhanakan: mengirim undangan rapat.
Input ──▶ Node Prompt (susun isi email dari permintaan bebas)
──▶ Node Knowledge Base (cari alamat email anggota tim)
──▶ Node Lambda (kirim undangan)
──▶ Output
Perhatikan bahwa tidak ada keputusan bebas di sini. Urutannya tetap, dan itulah kekuatannya: alur seperti ini tidak perlu — dan tidak boleh — bergantung pada model untuk memutuskan langkah berikutnya.
Jenis node
| Node | Fungsinya |
|---|---|
| Prompt | Memanggil model dengan template; bisa memakai prompt dari Prompt Management |
| Knowledge base | Retrieval dari knowledge base Fase 4 |
| Lambda | Kode apa pun: pemanggilan API, transformasi, validasi |
| Condition | Percabangan berdasarkan nilai |
| Iterator / Collector | Memproses daftar item satu per satu |
| Input / Output | Titik masuk dan keluar alur |
Memanggil dari kode
agen = boto3.client("bedrock-agent-runtime")
resp = agen.invoke_flow(
flowIdentifier=FLOW_ID,
flowAliasIdentifier=FLOW_ALIAS, # alias menunjuk versi tertentu
inputs=[{
"nodeName": "FlowInputNode",
"nodeOutputName": "document",
"content": {"document": "Undang tim dokumentasi rapat Selasa jam 14.00"},
}],
)
for peristiwa in resp["responseStream"]:
if "flowOutputEvent" in peristiwa:
print(peristiwa["flowOutputEvent"]["content"]["document"])
Versi dan alias adalah fitur, bukan formalitas. Alur yang di-deploy bersifat tidak bisa diubah, dan aplikasimu menunjuk alias. Artinya kamu bisa menyiapkan versi baru, mengujinya, lalu memindahkan alias — dan mengembalikannya seketika kalau ada masalah. Ini pola rilis yang sama dengan alias Lambda.
Biaya
Flows tidak punya tarif tersendiri untuk orkestrasinya: kamu membayar resource yang dipakai. Node prompt yang memanggil model ditagih sebagai pemanggilan model itu, node Lambda ditagih sebagai Lambda, node knowledge base ditagih sebagai retrieval. Jadi mengoptimalkan alur berarti mengoptimalkan node-nya — terutama mana yang memanggil model besar padahal model kecil cukup.
Kapan memilih Flows
| Situasi | Flows cocok? |
|---|---|
| Alur GenAI yang urutannya tetap | Ya |
| Perlu dilihat dan diubah oleh non-engineer | Ya |
| Butuh retry canggih, callback manusia, eksekusi berhari-hari | Tidak — Step Functions |
| Tugas terbuka yang langkahnya tidak bisa ditebak | Tidak — agent |
| Seluruh logikanya sudah ada di kode dan diuji | Tidak — biarkan di kode |
Latihan: bangun satu flow tiga node: input → knowledge base → prompt yang merangkum hasilnya dalam
bahasa Indonesia. Terbitkan sebagai versi 1, buat alias prod, panggil dari Python. Lalu ubah
prompt-nya, terbitkan versi 2, dan pindahkan alias — tanpa menyentuh kode pemanggil.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.