![]()
Cho đến thời điểm này trong khóa học, bạn đã xây dựng các tác nhân chạy trên laptop của bạn, bên trong một notebook, được điều khiển bởi az login và một vài biến môi trường. Đó chính xác là cách đúng để học. Nhưng đó không phải là cách đúng để chạy một tác nhân mà hàng nghìn khách hàng phụ thuộc vào lúc 3 giờ sáng.
Bài học này nói về khoảng cách giữa “nó hoạt động trên máy tôi” và “nó hoạt động, đáng tin cậy và tiết kiệm, trong môi trường sản xuất.” Chúng tôi đóng khoảng cách đó bằng cách sử dụng Microsoft Foundry và Dịch vụ Tác nhân Microsoft Foundry, và chúng tôi làm điều đó bằng cách xây dựng một tác nhân hỗ trợ khách hàng thực sự có các công cụ, truy xuất, bộ nhớ, đánh giá và giám sát.
Bài học này sẽ bao gồm:
Sau khi hoàn thành bài học này, bạn sẽ biết cách:
Bài học này giả định bạn đã hoàn thành các bài học trước và thành thạo:
Bạn cũng cần:
az login).requirements.txt.Một tác nhân nguyên mẫu và tác nhân sản xuất chia sẻ cùng vòng lặp chính — suy luận, gọi công cụ, phản hồi. Điều thay đổi là mọi thứ bao quanh vòng lặp đó. Mô hình chỉ chiếm khoảng 20% của tác nhân sản xuất; 80% còn lại là bộ khung vận hành.
| Mối Quan Tâm | Nguyên Mẫu | Sản Xuất |
|---|---|---|
| Lưu trữ | Chạy trong notebook của bạn | Chạy như một dịch vụ lưu trữ, có phiên bản và triển khai dần dần |
| Danh tính | Mã token az login của bạn |
Danh tính được quản lý với RBAC có phạm vi |
| Trạng thái | Trong bộ nhớ, mất khi khởi động lại | Bên ngoài (cửa hàng luồng, dịch vụ bộ nhớ) |
| Thất bại | Bạn thấy lại traceback | Thử lại, dự phòng, thư chết, cảnh báo |
| Chi phí | “Chỉ vài xu” | Theo dõi trên từng yêu cầu, định tuyến, bộ nhớ đệm, ngân sách |
| Chất lượng | Bạn xem xét đầu ra | Đánh giá tự động trước mỗi lần phát hành |
| Tin cậy | Bạn phê duyệt mọi hành động | Chính sách + con người tham gia trong các hành động rủi ro |
Hãy ghi nhớ bảng này. Mỗi phần dưới đây tương ứng với một trong những dòng này.
Có ba mẫu bạn sẽ sử dụng, thường kết hợp với nhau.
Đối tượng tác nhân sống bên trong quá trình ứng dụng của bạn. Mã của bạn gọi nhà cung cấp mô hình trực tiếp; vòng suy luận chạy trong dịch vụ của bạn. Đây là những gì mọi bài học trước đã thực hiện.
Tác nhân được đăng ký như một tài nguyên trong Microsoft Foundry. Foundry lưu trữ vòng suy luận, lưu trữ các luồng, thực thi an toàn nội dung và RBAC, và làm cho tác nhân hiển thị trong cổng Foundry. Ứng dụng của bạn trở thành một khách mỏng chỉ tạo luồng và đọc phản hồi.
Nhiều tác nhân (và công cụ) được ghép thành một đồ thị với luồng điều khiển rõ ràng — các bước tuần tự, phân nhánh, nút phê duyệt của con người, và các điểm kiểm tra bền vững có thể tạm dừng và tiếp tục. Đây là khả năng Quy Trình làm việc của Microsoft Agent Framework áp dụng ở quy mô triển khai.
flowchart TB
subgraph P1[Client-Hosted]
A1[Your App Process] --> M1[Model Provider]
end
subgraph P2[Hosted Agent]
A2[Thin Client] --> F2[Foundry Agent Service]
F2 --> M2[Model + Tools + Thread Store]
end
subgraph P3[Agent Workflow]
A3[Orchestrator] --> S1[Triage Agent]
S1 --> S2[Resolver Agent]
S2 --> H[Human Approval Node]
H --> S3[Action Agent]
end
Triển khai một tác nhân không phải là một thao tác push một lần. Đó là một vòng lặp, và nó rất giống chu trình phát hành phần mềm bởi vì đúng là như vậy.
flowchart LR
Create[Create / Author] --> Version[Version]
Version --> Evaluate[Evaluate offline]
Evaluate -->|passes gate| Deploy[Deploy hosted]
Evaluate -->|fails gate| Create
Deploy --> Observe[Observe online]
Observe --> Improve[Collect failures]
Improve --> Create
Deploy --> Retire[Retire old version]
Ý tưởng chính, tiếp nối từ Bài học 10: đánh giá offline là một cửa kiểm, không phải là điều được nghĩ đến sau cùng. Phiên bản tác nhân mới không được phát hành trừ khi vượt qua các ngưỡng đánh giá của bạn. Khả năng quan sát online sau đó đưa các lỗi thực tế trở lại bộ kiểm tra offline của bạn. Đó là toàn bộ vòng lặp.
Mở rộng một tác nhân khác với mở rộng API web không trạng thái, vì mỗi yêu cầu có thể kích hoạt nhiều lần gọi mô hình và công cụ tốn kém. Bốn kỹ thuật chịu phần lớn lượng tải.
Xử lý yêu cầu không trạng thái. Không giữ trạng thái người dùng riêng trong bộ nhớ quá trình của bạn. Lưu các luồng hội thoại trong cửa hàng luồng Foundry hoặc dịch vụ bộ nhớ để bất kỳ phiên bản nào cũng có thể xử lý bất kỳ yêu cầu nào. Đây là điều cho phép bạn mở rộng theo chiều ngang — thêm phiên bản, không cần phiên làm việc cố định.
Định tuyến mô hình. Không phải mọi yêu cầu đều cần mô hình có khả năng cao nhất (và đắt nhất) của bạn. Định tuyến các yêu cầu đơn giản — phân loại ý định, trả lời ngắn gọn các câu hỏi thực tế — đến một mô hình nhỏ, nhanh và dành mô hình lớn cho suy luận thực sự. Bộ định tuyến Mô hình của Foundry có thể làm điều này cho bạn, hoặc bạn có thể tự triển khai một bộ phân loại nhẹ. Bạn sẽ xây dựng phiên bản DIY trong phòng lab.
Bộ nhớ đệm phản hồi. Nhiều truy vấn hỗ trợ gần như trùng lặp (“làm thế nào để tôi đặt lại mật khẩu?”). Lưu câu trả lời cho các câu hỏi phổ biến và phục vụ mà không cần gọi đến mô hình. Ngay cả tỷ lệ trúng bộ nhớ đệm khiêm tốn cũng giúp cắt giảm đáng kể chi phí và độ trễ.
Đồng thời và áp lực ngược. Nhà cung cấp mô hình có giới hạn tốc độ. Giới hạn đồng thời, sử dụng thử lại với lùi lại số mũ, và xử lý thất bại một cách nhẹ nhàng (phản hồi “chúng tôi đang xử lý” trong hàng đợi tốt hơn mã lỗi 500).
flowchart LR
Q[User query] --> C{Cache hit?}
C -->|yes| R[Return cached answer]
C -->|no| Router{Complexity?}
Router -->|simple| SLM[Small model]
Router -->|complex| LLM[Large model]
SLM --> Out[Response]
LLM --> Out
Out --> Store[Cache + trace]
Bạn không thể vận hành thứ bạn không thể quan sát. Như đã đề cập trong Bài học 10, Microsoft Agent Framework tạo ra các dấu vết OpenTelemetry bản địa — mọi lần gọi mô hình, khởi chạy công cụ, và bước phối hợp trở thành một khoảng thời gian theo dõi. Trong môi trường sản xuất, bạn xuất các khoảng thời gian đó đến Microsoft Foundry (hoặc bất kỳ backend tương thích OTel nào) để bạn có thể:
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")
# agent execution is traced automatically inside this span
Các thuộc tính như customer.tier và routed.model giúp biến một lượng lớn dấu vết thành các câu hỏi có thể trả lời được (“khách hàng doanh nghiệp có bị định tuyến sang mô hình nhỏ quá thường xuyên không?”).
Chi phí trong tác nhân sản xuất bị chi phối bởi token. Ba cần gạt, theo thứ tự tác động:
Các cửa kiểm đánh giá và kiểm soát chi phí là cùng một kỹ thuật nhìn từ hai góc độ: đánh giá cho bạn mức chất lượng tối thiểu, định tuyến và lưu bộ nhớ đệm giữ bạn càng gần chi phí của mức đó càng tốt.
Quản trị. Tác nhân lưu trữ kế thừa RBAC, an toàn nội dung và ghi nhật ký kiểm toán của Foundry. Cung cấp cho từng tác nhân một danh tính được quản lý với đặc quyền tối thiểu cần thiết — quyền truy cập chỉ đọc vào cơ sở tri thức, quyền truy cập có phạm vi vào API vé hỗ trợ, không hơn.
Con người tham gia vào vòng lặp. Một số hành động có hậu quả quá lớn để tự động hoàn toàn — hoàn tiền, xóa tài khoản, chuyển tiếp đến đội pháp lý. Microsoft Agent Framework hỗ trợ các công cụ cần phê duyệt: tác nhân đề xuất hành động, thực thi tạm dừng, con người phê duyệt hoặc từ chối, rồi quy trình làm việc tiếp tục. Bạn đã thấy nguyên thủy này trong Bài học 6; bây giờ bạn triển khai nó.
MCP trong sản xuất. MCP cho phép tác nhân của bạn sử dụng công cụ bên ngoài qua một giao diện chuẩn. Trong sản xuất, coi mỗi máy chủ MCP là một ranh giới không tin cậy: cố định phiên bản máy chủ, chạy nó với danh tính có phạm vi, kiểm tra đầu ra, và không bao giờ tiết lộ bí mật cho nó. Máy chủ MCP là một phụ thuộc, và phụ thuộc được vá lỗi, kiểm toán và giới hạn tốc độ.
flowchart TB
subgraph Dev[Development Architecture]
D1[Notebook] --> D2[Agent Framework]
D2 --> D3[Model Provider]
D2 --> D4[Local tools]
end
subgraph Deploy[Deployment Architecture]
E1[CI pipeline] --> E2[Evaluation gate]
E2 -->|pass| E3[Foundry Agent Service]
E3 --> E4[Versioned hosted agent]
end
subgraph Run[Runtime Architecture]
F1[Client app] --> F2[Hosted agent]
F2 --> F3[Model Router]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Memory service]
F2 --> F6[MCP tools]
F2 --> F7[OTel -> Foundry tracing]
F2 --> F8[Human approval]
end
Ba sơ đồ đó — phát triển, triển khai, thời gian chạy — là cùng một tác nhân ở ba giai đoạn cuộc đời nó. Phòng lab tiếp theo sẽ hướng dẫn bạn xây dựng nó.
Mở code_samples/16-python-agent-framework.ipynb và làm theo từng bước. Bạn sẽ lắp ráp một tác nhân hỗ trợ khách hàng Contoso với mọi mối quan tâm về sản xuất được tích hợp:
Notebook được tổ chức sao cho mỗi mối quan tâm sản xuất là một phần riêng biệt, có thể chạy độc lập. Trọng tâm là trình xử lý yêu cầu kết hợp định tuyến và lưu bộ nhớ đệm:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Serve from cache when we can.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Route by complexity to control cost.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Run the agent inside a trace span for observability.
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 and return.
response_cache.set(normalize(query), response.text)
return response.text
Cửa kiểm đánh giá bảo vệ một lần phát hành trông như thế này:
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 # only deploy if the gate passes
Đọc từng dòng — notebook giữ các nguyên mẫu nhỏ một cách có chủ đích để không có gì bị ẩn sau một lời gọi framework.
Cửa kiểm đánh giá ở trên chạy offline chống lại đối tượng tác nhân của bạn. Khi tác nhân được triển khai dưới dạng Tác nhân được lưu trữ, bạn cần một kiểm tra nữa, rẻ hơn: điểm cuối triển khai có thực sự trả lời không?
Triển khai “thành công” chỉ chứng minh mặt điều khiển chấp nhận định nghĩa — không chứng minh tác nhân trả lời. Thiếu phụ thuộc, định tuyến mô hình sai, hoặc kết nối hết hạn có thể để lại triển khai xanh nhưng không trả về gì. Kiểm tra khói phát hiện điều đó trong vài giây, trên mỗi lần triển khai, không tốn kém như đánh giá toàn diện.
Kho lưu trữ này cung cấp đường ống kiểm tra khói sẵn dùng xây trên GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json chứa các lời nhắc và khẳng định cho tác nhân hỗ trợ Contoso (câu trả lời chính xác dựa trên chính sách, tra cứu đơn hàng, giữ đúng chủ đề, và tính liên tục hội thoại đa lượt). Các danh mục cho các tác nhân bài học khác nằm bên cạnh nó — xem tests/README.md..github/workflows/smoke-test.yml đăng nhập với Azure OIDC và gửi POST mỗi lời nhắc đến điểm cuối Responses của tác nhân, thất bại công việc nếu có bất kỳ khẳng định nào không đúng.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Chạy nó từ tab Actions khi tác nhân của bạn đã được triển khai, cung cấp điểm cuối dự án Foundry và tên tác nhân. Danh tính liên kết cần có vai trò Azure AI User ở phạm vi dự án Foundry. Hãy nghĩ về các lớp như một hình chóp: kiểm tra sơ bộ (có thể truy cập và phản hồi?) chạy trên mỗi lần triển khai, đánh giá ngoại tuyến (đủ tốt để phát hành?) chạy trước khi thăng cấp, và đánh giá trực tuyến (nó hoạt động thế nào trong thực tế?) chạy liên tục.
Kiểm tra hiểu biết của bạn trước khi chuyển sang bài tập.
1. Đại khái “mô hình” chiếm bao nhiêu phần trong một tác nhân sản xuất, và phần còn lại là gì?
2. Khi nào bạn chọn Tác nhân Hosted thay vì tác nhân do khách hàng lưu trữ?
3. Tại sao một tác nhân có thể mở rộng phải không lưu trạng thái trong bộ nhớ tiến trình riêng của nó?
4. Vấn đề mà định tuyến mô hình giải quyết là gì, và nó liên quan thế nào đến đánh giá?
5. Một “cổng đánh giá” là gì và nó nằm ở đâu trong vòng đời?
6. Tại sao một máy chủ MCP nên được xem là biên giới không tin cậy trong sản xuất?
7. Thay đổi đơn lẻ nào thường ảnh hưởng lớn nhất đến chi phí tác nhân sản xuất, và tại sao?
8. Thuộc tính span như customer.tier và routed.model có vai trò gì trong khả năng quan sát?
Lấy tác nhân hỗ trợ khách hàng từ phòng thí nghiệm và tăng cường nó cho một kịch bản cụ thể: tác nhân hỗ trợ thanh toán đăng ký cho một công ty SaaS.
Bản nộp của bạn nên:
get_subscription_status, get_invoice, và issue_credit (tín dụng trên $50 cần sự phê duyệt của con người).Viết một đoạn ngắn (trong ô markdown) giải thích bạn chọn quy tắc định tuyến mô hình nào và cách bạn sẽ xác thực nó với lưu lượng thực. Không có câu trả lời đúng duy nhất — bạn sẽ được đánh giá dựa trên việc liệu các quan ngại về sản xuất có được kết nối một cách mạch lạc hay không.
Trong bài học này bạn đã chuyển một tác nhân từ nguyên mẫu sang sản xuất với Microsoft Foundry:
Bài học tiếp theo sẽ đi theo hướng ngược lại: thay vì mở rộng các tác nhân lên đám mây, bạn sẽ đưa chúng xuống một máy phát triển đơn lẻ và chạy hoàn toàn cục bộ.
Xây dựng Tác nhân Sử dụng Máy tính (CUA)
Tuyên bố miễn trừ trách nhiệm: Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng bản dịch tự động có thể chứa lỗi hoặc sai sót. Tài liệu gốc bằng ngôn ngữ gốc nên được coi là nguồn tin chính thức. Đối với thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm về bất kỳ hiểu lầm hoặc giải thích sai nào phát sinh từ việc sử dụng bản dịch này.