![]()
Sampai titik ini dalam kursus Anda telah membangun agen yang berjalan di laptop Anda, di dalam notebook, yang dijalankan dengan az login dan beberapa variabel lingkungan. Itu adalah cara yang tepat untuk belajar. Namun itu bukan cara yang tepat untuk menjalankan agen yang ribuan pelanggan andalkan pukul 3 pagi.
Pelajaran ini membahas kesenjangan antara “berjalan di mesin saya” dan “berjalan, secara andal dan terjangkau, di produksi.” Kami menutup kesenjangan itu menggunakan Microsoft Foundry dan Microsoft Foundry Agent Service, serta membangun agen dukungan pelanggan nyata yang memiliki alat, pengambilan, memori, evaluasi, dan pemantauan.
Pelajaran ini akan membahas:
Setelah menyelesaikan pelajaran ini, Anda akan mengetahui cara untuk:
Pelajaran ini mengasumsikan Anda telah menyelesaikan pelajaran sebelumnya dan menguasai:
Anda juga membutuhkan:
az login).requirements.txt.Agen prototipe dan agen produksi berbagi loop inti yang sama — beralasan, memanggil alat, merespons. Yang berubah adalah segala sesuatu yang membungkus loop tersebut. Model mungkin hanya 20% dari agen produksi; sisanya 80% adalah kerangka operasional.
| Perhatian | Prototipe | Produksi |
|---|---|---|
| Hosting | Berjalan di notebook Anda | Berjalan sebagai layanan yang dipasang, versi, dan diluncurkan |
| Identitas | Token az login Anda |
Identitas yang dikelola dengan RBAC terbatas |
| Status | Dalam memori, hilang saat restart | Dieksternal-kan (penyimpanan thread, layanan memori) |
| Kegagalan | Anda melihat traceback | Coba ulang, fallback, dead-letter, notifikasi |
| Biaya | “Beberapa sen” | Dilacak per permintaan, diarahkan, di-cache, dianggarkan |
| Kualitas | Anda periksa output secara manual | Dievaluasi otomatis sebelum setiap rilis |
| Kepercayaan | Anda menyetujui setiap tindakan | Kebijakan + manusia dalam loop untuk tindakan berisiko |
Ingat tabel ini. Setiap bagian di bawah ini terkait dengan salah satu baris tersebut.
Ada tiga pola yang akan Anda gunakan, sering kali dalam kombinasi.
Objek agen berada di dalam proses aplikasi Anda. Kode Anda memanggil penyedia model secara langsung; loop penalaran berjalan di layanan Anda. Ini adalah apa yang telah dilakukan di pelajaran sebelumnya.
Agen didaftarkan sebagai sumber daya di Microsoft Foundry. Foundry menjalankan 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) dikomposisikan menjadi sebuah grafik dengan alur kontrol eksplisit — langkah berurutan, cabang, node persetujuan manusia, dan checkpoint tahan lama yang dapat berhenti dan dilanjutkan. Ini adalah kemampuan Workflow Microsoft Agent Framework yang diterapkan pada skala penyebaran.
flowchart TB
subgraph P1[Klien-Dihoskan]
A1[Proses Aplikasi Anda] --> M1[Penyedia Model]
end
subgraph P2[Agen Dihoskan]
A2[Klien Tipis] --> F2[Layanan Agen Foundry]
F2 --> M2[Model + Alat + Penyimpanan Thread]
end
subgraph P3[Alur Kerja Agen]
A3[Orkestrator] --> S1[Agen Triage]
S1 --> S2[Agen Penyelesai]
S2 --> H[Node Persetujuan Manusia]
H --> S3[Agen Aksi]
end
Menyebarkan agen bukanlah push satu kali. Ini adalah loop, dan terlihat mirip dengan siklus rilis perangkat lunak karena memang itu yang terjadi.
flowchart LR
Create[Buat / Penulis] --> Version[Versi]
Version --> Evaluate[Evaluasi offline]
Evaluate -->|lolos gerbang| Deploy[Terapkan host]
Evaluate -->|gagal gerbang| Create
Deploy --> Observe[Amati online]
Observe --> Improve[Kumpulkan kegagalan]
Improve --> Create
Deploy --> Retire[Pensiunkan versi lama]
Ide kunci, yang diambil dari Pelajaran 10: evaluasi offline adalah gerbang, bukan hal yang dianggap sepele. Versi agen baru tidak dikirim kecuali melewati ambang evaluasi Anda. Observabilitas online kemudian memberi umpan balik kegagalan dunia nyata ke dalam set uji offline Anda. Itulah keseluruhan loop.
Menskala agen berbeda dengan menskala API web tanpa status, karena setiap permintaan bisa memicu beberapa 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 sehingga setiap instance dapat menangani setiap permintaan. Ini memungkinkan Anda skala horizontal — menambah instance, tanpa sesi lengket.
Routing model. Tidak semua permintaan membutuhkan model paling canggih (dan paling mahal). Rute permintaan sederhana — klasifikasi niat, jawaban fakta pendek — ke model kecil dan cepat, dan sisakan model besar untuk penalaran kompleks. Model Router Foundry dapat melakukannya untuk Anda, atau Anda dapat membuat klasifikator ringan sendiri. Anda akan membangun versi DIY di lab.
Caching respons. Banyak pertanyaan dukungan hampir duplikat (“bagaimana saya reset kata sandi?”). Cache jawaban untuk pertanyaan umum dan layani tanpa memanggil model sama sekali. Bahkan tingkat hit cache yang sederhana secara signifikan mengurangi biaya dan latensi.
Konkurensi dan backpressure. Penyedia model memiliki batas laju. Batasi konkurensi Anda, gunakan percobaan ulang dengan eksponensial backoff, dan gagal dengan anggun (respons antrean “kami sedang mengerjakannya” lebih baik daripada 500).
flowchart LR
Q[Pertanyaan pengguna] --> C{Cache ketemu?}
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 apa yang tidak bisa Anda lihat. Seperti yang dibahas di Pelajaran 10, Microsoft Agent Framework secara native mengeluarkan OpenTelemetry trace — setiap panggilan model, pemanggilan alat, dan langkah orkestrasi menjadi sebuah span. Di produksi Anda mengekspor span tersebut ke Microsoft Foundry (atau backend kompatibel OTel) 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 dinding trace menjadi pertanyaan yang dapat dijawab (“apakah pelanggan enterprise terlalu sering diarahkan ke model kecil?”).
Biaya dalam agen produksi didominasi oleh token. Ada tiga tuas, menurut urutan dampak:
Gerbang evaluasi dan kontrol biaya adalah disiplin yang sama dari dua sudut pandang: evaluasi memberi Anda lantai kualitas, routing dan caching menjaga Anda sedekat mungkin dengan biaya lantai tersebut.
Tata kelola. Hosted Agents mewarisi RBAC, keamanan konten, dan logging audit Foundry. Beri setiap agen identitas yang dikelola dengan hak istimewa paling sedikit yang diperlukan — akses baca saja ke basis pengetahuan, akses terbatas ke API tiket, tidak lebih.
Manusia dalam loop. Beberapa tindakan terlalu penting untuk diotomatisasi langsung — mengeluarkan pengembalian dana, menghapus akun, eskalasi ke tim hukum. Microsoft Agent Framework mendukung alat yang memerlukan persetujuan: agen mengusulkan tindakan, eksekusi berhenti sebentar, manusia menyetujui atau menolak, dan workflow dilanjutkan. Anda melihat unsur primitif ini di Pelajaran 6; di sini Anda menyebarkannya.
MCP di produksi. MCP memungkinkan agen Anda mengonsumsi alat eksternal melalui antarmuka standar. Di produksi, anggap setiap server MCP sebagai batas yang tidak dipercaya: kunci versi server, jalankan dengan identitas terbatas, validasi output-nya, dan jangan pernah berikan rahasia. Server MCP adalah dependensi, dan dependensi perlu dipatch, diaudit, dan dibatasi laju.
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[Pipeline CI] --> E2[Gerbang evaluasi]
E2 -->|lulus| E3[Layanan Agen Foundry]
E3 --> E4[Agen yang dihosting dengan 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, penyebaran, runtime — adalah agen yang sama pada tiga tahap hidupnya. Lab berikutnya akan memandu Anda membangunnya.
Buka code_samples/16-python-agent-framework.ipynb dan kerjakan secara menyeluruh. Anda akan merakit agen dukungan pelanggan Contoso dengan setiap perhatian produksi dihubungkan:
Notebook diatur sehingga setiap perhatian produksi adalah bagian mandiri yang dapat dijalankan. Inti dari itu adalah handler permintaan routing-plus-caching:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Layani dari cache saat kami 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 jejak span 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 terlihat 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 gate lolos
Baca setiap baris — notebook menjaga unsur primitif dengan sengaja kecil agar tidak ada yang tersembunyi di balik panggilan framework.
Gerbang evaluasi di atas berjalan secara offline terhadap objek agen Anda. Setelah agen disebarkan sebagai Hosted Agent, Anda memerlukan satu pemeriksaan lagi yang lebih murah: apakah endpoint yang disebarkan benar-benar merespons?
Penyebaran yang “berhasil” hanya membuktikan kontrol plane menerima definisi — tidak membuktikan agen benar-benar merespons. Ketergantungan yang hilang, routing model yang buruk, atau koneksi yang kedaluwarsa dapat meninggalkan penyebaran hijau yang tidak mengembalikan apa-apa. Smoke test menangkap itu dalam hitungan detik, pada setiap penyebaran, tanpa biaya evaluasi penuh.
Repositori ini menyediakan pipeline smoke-test siap pakai yang dibangun di atas GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json berisi prompt dan asersi untuk agen dukungan Contoso (jawaban kebijakan yang berbasis fakta, pencarian pesanan, tetap fokus topik, dan kontinuitas thread multi-gilir). Katalog untuk agen pelajaran lain ada di sampingnya — lihat tests/README.md..github/workflows/smoke-test.yml login dengan Azure OIDC dan POST setiap prompt ke endpoint Responses agen, gagal pada pekerjaan jika ada asersi yang tidak lolos.- 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 diterapkan, dengan menyediakan endpoint proyek Foundry Anda dan nama agen. Identitas federasi membutuhkan peran Azure AI User pada lingkup proyek Foundry. Pikirkan lapisan-lapisan ini seperti piramida: tes asap (tersambung dan merespon?) dijalankan pada setiap penerapan, evaluasi offline (cukup baik untuk dikirim?) dijalankan sebelum promosi, dan evaluasi online (bagaimana performanya di lapangan?) dijalankan secara terus-menerus.
Uji pemahaman Anda sebelum melanjutkan ke tugas.
1. Kira-kira seberapa besar bagian “model” dalam agen produksi, dan apa sisanya?
2. Kapan Anda akan memilih Hosted Agent dibandingkan agen yang dihosting oleh klien?
3. Mengapa agen yang dapat diskalakan harus tidak memiliki status di memori proses sendiri?
4. Masalah apa yang dipecahkan oleh routing model, dan bagaimana hubungannya dengan evaluasi?
5. Apa itu “gerbang evaluasi” dan di mana letaknya dalam siklus hidup?
6. Mengapa server MCP harus diperlakukan sebagai batas tidak dipercaya di produksi?
7. Perubahan tunggal mana yang biasanya memiliki dampak terbesar pada biaya agen produksi, dan mengapa?
8. Peran apa atribut span seperti customer.tier dan routed.model dalam observabilitas?
Ambil agen dukungan pelanggan dari lab dan perkuat untuk skenario spesifik: agen dukungan penagihan langganan untuk perusahaan SaaS.
Kiriman Anda harus:
get_subscription_status, get_invoice, dan issue_credit (kredit di atas $50 memerlukan persetujuan manusia).Tulislah paragraf singkat (di sel markdown) yang menjelaskan aturan routing model yang Anda pilih dan bagaimana Anda akan memvalidasinya dengan lalu lintas nyata. Tidak ada jawaban tunggal yang benar — Anda akan dinilai berdasarkan apakah kekhawatiran produksi dihubungkan secara koheren.
Dalam pelajaran ini Anda memindahkan agen dari prototipe ke produksi dengan Microsoft Foundry:
Pelajaran berikutnya mengambil perjalanan sebaliknya: alih-alih meningkatkan agen ke awan, Anda akan membawanya ke bawah ke mesin pengembang tunggal dan menjalankannya sepenuhnya secara lokal.
Membangun Agen 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.