![]()
Sampai titik ini dalam kursus, Anda telah membangun agen yang berjalan di laptop Anda, di dalam notebook, dijalankan dengan az login dan sejumlah variabel lingkungan. Itu adalah cara yang tepat untuk belajar. Itu bukan cara yang tepat untuk menjalankan agen yang diandalkan ribuan pelanggan pada pukul 3 pagi.
Pelajaran ini membahas kesenjangan antara “berfungsi di mesin saya” dan “berfungsi, dengan andal dan terjangkau, di produksi.” Kita menutup kesenjangan itu menggunakan Microsoft Foundry dan Microsoft Foundry Agent Service, dan kita melakukannya dengan membangun agen dukungan pelanggan nyata yang memiliki alat, pengambilan, memori, evaluasi, dan pemantauan.
Pelajaran ini akan membahas:
Setelah menyelesaikan pelajaran ini, Anda akan tahu cara:
Pelajaran ini mengasumsikan Anda sudah menyelesaikan pelajaran-pelajaran sebelumnya dan nyaman dengan:
Anda juga akan membutuhkan:
az login).requirements.txt.Agen prototipe dan agen produksi berbagi loop inti yang sama — berpikir, memanggil alat, merespons. Yang berubah adalah segala sesuatu yang membungkus loop itu. Model mungkin hanya 20% dari agen produksi; 80% lainnya adalah kerangka operasionalnya.
| Perhatian | Prototipe | Produksi |
|---|---|---|
| Hosting | Berjalan di notebook Anda | Berjalan sebagai layanan yang di-host, versi, dan diluncurkan |
| Identitas | Token az login Anda |
Identitas terkelola dengan RBAC yang dibatasi |
| Status | Dalam memori, hilang saat restart | Disimpan secara eksternal (penyimpanan thread, layanan memori) |
| Gagal | Anda melihat traceback | Coba ulang, fallback, dead-letter, peringatan |
| Biaya | “Hanya beberapa sen” | Dilacak per permintaan, diarahkan, di-cache, dianggarkan |
| Kualitas | Anda memeriksa hasil | Dievaluasi secara otomatis sebelum setiap rilis |
| Kepercayaan | Anda menyetujui setiap tindakan | Kebijakan + manusia dalam lingkaran untuk tindakan berisiko |
Ingat tabel ini. Setiap bagian di bawah ini terkait dengan salah satu baris ini.
Ada tiga pola yang akan Anda gunakan, sering kali secara kombinasi.
Objek agen hidup di dalam proses aplikasi Anda. Kode Anda memanggil penyedia model secara langsung; loop penalaran berjalan di layanan Anda. Inilah yang dilakukan setiap pelajaran sebelumnya.
Agen didaftrkan sebagai sumber daya di Microsoft Foundry. Foundry meng-host loop penalaran, menyimpan thread, menegakkan keamanan konten dan RBAC, serta membuat agen terlihat di portal Foundry. Aplikasi Anda menjadi klien tipis yang membuat thread dan membaca respons.
Beberapa agen (dan alat) disusun menjadi grafik dengan alur kontrol eksplisit — langkah berurutan, cabang, node persetujuan manusia, dan titik pemeriksaan tahan lama yang dapat berhenti dan dilanjutkan. Ini adalah kemampuan Workflows Microsoft Agent Framework yang diterapkan dalam skala penerapan.
flowchart TB
subgraph P1[Berbasis Klien]
A1[Proses Aplikasi Anda] --> M1[Penyedia Model]
end
subgraph P2[Agen Yang Di-host]
A2[Klien Tipis] --> F2[Layanan Agen Foundry]
F2 --> M2[Model + Alat + Penyimpanan Thread]
end
subgraph P3[Alur Kerja Agen]
A3[Pengatur Orkestra] --> S1[Agen Triage]
S1 --> S2[Agen Penyelesai]
S2 --> H[Node Persetujuan Manusia]
H --> S3[Agen Aksi]
end
Menerapkan agen bukanlah push sekali waktu. Itu adalah sebuah loop, dan sangat mirip dengan siklus rilis perangkat lunak karena memang itu yang terjadi.
flowchart LR
Create[Buat / Penulis] --> Version[Versi]
Version --> Evaluate[Evaluasi offline]
Evaluate -->|melewati gate| Deploy[Terapkan yang dihosting]
Evaluate -->|gagal gate| Create
Deploy --> Observe[Amati online]
Observe --> Improve[Kumpulkan kegagalan]
Improve --> Create
Deploy --> Retire[Pensiunkan versi lama]
Ide utama, diambil dari Pelajaran 10: evaluasi offline adalah gerbang, bukan pemikiran setelahnya. Versi agen baru tidak dikirim kecuali melewati ambang evaluasi Anda. Observabilitas online selanjutnya mengirimkan kegagalan dunia nyata kembali ke set tes offline Anda. Itulah seluruh loop-nya.
Menskala agen berbeda dengan menskala API web tanpa status, karena setiap permintaan dapat memicu banyak panggilan model dan alat yang mahal. Empat teknik memikul sebagian besar beban.
Penanganan permintaan tanpa status. Jangan simpan status per pengguna dalam memori proses Anda. Simpan thread percakapan di penyimpanan thread Foundry atau layanan memori agar instance mana pun dapat menangani permintaan apa pun. Ini memungkinkan penskalaan horizontal — tambah instance, tanpa sesi yang melekat.
Perutean model. Tidak setiap permintaan membutuhkan model paling mumpuni (dan paling mahal) Anda. Rute permintaan sederhana — klasifikasi maksud, jawaban fakta singkat — ke model kecil yang cepat, dan simpan model besar untuk penalaran sejati. Model Router Foundry bisa melakukan ini untuk Anda, atau Anda bisa membuat klasifikator ringan sendiri. Anda akan membangun versi DIY di lab.
Caching respons. Banyak pertanyaan dukungan hampir duplikat (“bagaimana saya mereset kata sandi?”). Cache jawaban untuk pertanyaan umum dan sajikan tanpa harus memanggil model. Bahkan tingkat cache hit yang sederhana secara signifikan mengurangi biaya dan latensi.
Konkurensi dan tekanan balik. Penyedia model memiliki batas kecepatan. Batasi konkurensi Anda, gunakan coba ulang dengan jeda eksponensial, dan gagal dengan anggun (respons antrean “kami sedang mengatasinya” lebih baik daripada 500).
flowchart LR
Q[Kueri pengguna] --> C{Apakah cache terpakai?}
C -->|ya| R[Kembalikan jawaban yang di-cache]
C -->|tidak| Router{Kompleksitas?}
Router -->|sederhana| SLM[Model kecil]
Router -->|kompleks| LLM[Model besar]
SLM --> Out[Respon]
LLM --> Out
Out --> Store[Cache + jejak]
Anda tidak dapat mengoperasikan sesuatu yang tidak bisa Anda lihat. Seperti dibahas di Pelajaran 10, Microsoft Agent Framework mengeluarkan jejak OpenTelemetry secara native — setiap panggilan model, pemanggilan alat, dan langkah orkestrasi menjadi span. Di produksi Anda mengekspor span ini ke Microsoft Foundry (atau backend kompatibel OTel mana pun) sehingga Anda dapat:
from agent_framework.observability import get_tracer
tracer = get_tracer()
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("customer.tier", "enterprise")
span.set_attribute("routed.model", "gpt-5-nano")
# eksekusi agen dilacak secara otomatis di dalam rentang ini
Atribut seperti customer.tier dan routed.model adalah apa yang mengubah tumpukan jejak menjadi pertanyaan yang bisa dijawab (“apakah pelanggan perusahaan terlalu sering diarahkan ke model kecil?”).
Biaya dalam agen produksi didominasi oleh token. Tiga tuas, berdasarkan dampak:
Gerbang evaluasi dan kontrol biaya adalah disiplin yang sama dilihat dari dua sudut: evaluasi memberi tahu Anda lantai kualitas, perutean dan caching menjaga Anda sedekat mungkin dengan biaya lantai itu.
Tata kelola. Hosted Agents mewarisi RBAC, keamanan konten, dan pencatatan audit Foundry. Berikan setiap agen identitas terkelola dengan hak paling sedikit yang dibutuhkan — akses hanya baca ke basis pengetahuan, akses terbatas ke API tiket, tidak lebih.
Manusia dalam lingkaran. Beberapa tindakan terlalu penting untuk diotomatisasi langsung — mengeluarkan pengembalian dana, menghapus akun, meningkat ke tim hukum. Microsoft Agent Framework mendukung alat dengan persetujuan diperlukan: agen mengusulkan tindakan, eksekusi berhenti, manusia menyetujui atau menolak, dan alur kerja dilanjutkan. Anda sudah melihat primitif ini di Pelajaran 6; di sini Anda menerapkannya.
MCP di produksi. MCP memungkinkan agen Anda menggunakan alat eksternal melalui antarmuka standar. Di produksi, anggap setiap server MCP sebagai batas yang tidak dipercaya: tetapkan versi server, jalankan dengan identitas terbatas, validasi hasilnya, dan jangan pernah mengekspos rahasia kepadanya. Server MCP adalah ketergantungan, dan ketergantungan diperbaiki, diaudit, dan dibatasi.
flowchart TB
subgraph Dev[Arsitektur Pengembangan]
D1[Buku Catatan] --> D2[Kerangka Agen]
D2 --> D3[Penyedia Model]
D2 --> D4[Alat lokal]
end
subgraph Deploy[Arsitektur Penyebaran]
E1[Jalur CI] --> E2[Gerbang evaluasi]
E2 -->|lulus| E3[Layanan Agen Foundry]
E3 --> E4[Agen yang dihosting versi]
end
subgraph Run[Arsitektur Runtime]
F1[Aplikasi klien] --> F2[Agen yang dihosting]
F2 --> F3[Router Model]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Layanan memori]
F2 --> F6[Alat MCP]
F2 --> F7[OTel -> Pelacakan Foundry]
F2 --> F8[Persetujuan manusia]
end
Ketiga diagram itu — pengembangan, penerapan, runtime — adalah agen yang sama pada tiga tahap kehidupannya. Lab berikutnya akan membimbing Anda membangunnya.
Buka code_samples/16-python-agent-framework.ipynb dan kerjakan hingga selesai. Anda akan merakit agen dukungan pelanggan Contoso dengan setiap perhatian produksi yang terintegrasi:
Notebook diatur agar setiap perhatian produksi adalah bagian yang mandiri dan dapat dijalankan. Inti dari itu adalah penangan permintaan routing-plus-caching:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Layani dari cache ketika kita bisa.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Rute berdasarkan kompleksitas untuk mengontrol biaya.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Jalankan agen di dalam span jejak untuk observabilitas.
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("routed.model", model)
span.set_attribute("customer.id", customer_id)
response = await support_agent.run(query, model=model)
# 4. Cache dan kembalikan.
response_cache.set(normalize(query), response.text)
return response.text
Gerbang evaluasi yang menjaga rilis tampak seperti ini:
async def evaluation_gate(agent, test_cases, threshold: float = 0.8) -> bool:
passed = 0
for case in test_cases:
result = await agent.run(case["input"])
if score_response(result.text, case["expected"]) >= 0.8:
passed += 1
pass_rate = passed / len(test_cases)
print(f"Evaluation pass rate: {pass_rate:.0%} (gate: {threshold:.0%})")
return pass_rate >= threshold # hanya deploy jika gerbang lulus
Baca setiap baris — notebook sengaja menjaga primitif kecil agar tidak ada yang tersembunyi di balik panggilan framework.
Gerbang evaluasi di atas berjalan offline terhadap objek agen Anda. Setelah agen diterapkan sebagai Hosted Agent, Anda memerlukan cek lain yang lebih murah: apakah endpoint yang diterapkan benar-benar menjawab?
Menerapkan “dengan sukses” hanya membuktikan control plane menerima definisi — itu tidak membuktikan agen merespons. Ketergantungan yang hilang, perutean model yang buruk, atau koneksi yang kedaluwarsa bisa meninggalkan penerapan hijau yang tidak mengembalikan apa pun. Smoke test menangkap itu dalam hitungan detik, pada setiap penerapan, tanpa biaya evaluasi penuh.
Repositori ini menyediakan pipeline smoke-test siap pakai yang dibangun dengan GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json berisi prompt dan asersi untuk agen dukungan Contoso (jawaban kebijakan berbasis sumber, pencarian pesanan, tetap pada topik, dan kontinuitas thread multi-putaran). Katalog untuk agen pelajaran lain ada berdampingan — lihat tests/README.md..github/workflows/smoke-test.yml login dengan Azure OIDC dan mengirim setiap prompt ke endpoint Responses agen, gagal jika ada asersi yang tidak terpenuhi.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Jalankan dari tab Actions setelah agen Anda dikerahkan, dengan memberikan endpoint proyek Foundry Anda dan nama agen. Identitas federasi membutuhkan peran Azure AI User pada ruang lingkup proyek Foundry. Pikirkan lapisan-lapisan seperti sebuah piramida: tes asap (dapat dijangkau dan merespons?) dijalankan pada setiap penyebaran, evaluasi offline (cukup baik untuk dikirim?) dijalankan sebelum promosi, dan evaluasi online (bagaimana kinerjanya di lapangan?) dijalankan secara terus menerus.
Uji pemahaman Anda sebelum melanjutkan ke tugas.
1. Sekitar berapa banyak dari agen produksi yang merupakan “model,” dan apa sisanya?
2. Kapan Anda memilih Hosted Agent dibandingkan agen yang dihosting oleh klien?
3. Mengapa agen yang dapat diskalakan harus bersifat stateless dalam memori prosesnya sendiri?
4. Masalah apa yang diselesaikan oleh model routing, dan bagaimana kaitannya dengan evaluasi?
5. Apa itu “evaluation gate” dan di mana posisinya dalam siklus hidup?
6. Mengapa server MCP harus diperlakukan sebagai batas yang tidak terpercaya dalam produksi?
7. Perubahan tunggal apa yang biasanya memiliki dampak terbesar pada biaya agen produksi, dan mengapa?
8. Peran apa yang dimainkan atribut span seperti customer.tier dan routed.model dalam observabilitas?
Ambil agen dukungan pelanggan dari lab dan perkuat untuk skenario tertentu: agen dukungan tagihan berlangganan untuk perusahaan SaaS.
Kiriman Anda harus:
get_subscription_status, get_invoice, dan issue_credit (kredit di atas $50 memerlukan persetujuan manusia).Tulis paragraf singkat (dalam sel markdown) yang menjelaskan aturan model-routing mana yang Anda pilih dan bagaimana Anda akan memvalidasinya dengan lalu lintas nyata. Tidak ada jawaban tunggal yang benar — Anda dinilai berdasarkan apakah perhatian produksi dirangkai secara koheren.
Dalam pelajaran ini Anda memindahkan agen dari prototipe ke produksi dengan Microsoft Foundry:
Pelajaran berikutnya mengambil perjalanan sebaliknya: alih-alih menskalakan agen ke cloud, Anda akan membawanya turun ke satu mesin pengembang dan menjalankannya sepenuhnya secara lokal.
Membangun Agent Penggunaan Komputer (CUA)
Penafian: Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berupaya untuk mencapai akurasi, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan terjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.