![]()
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 sổ tay, đượ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 học đúng. 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 ta sẽ thu hẹp 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 ta 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 thụ 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à quen thuộc với:
Bạn cũng cần:
az login).requirements.txt.Một tác nhân nguyên mẫu và một tác nhân sản xuất chia sẻ cùng một vòng lặp cốt lõi — lý luận, gọi công cụ, phản hồi. Điều thay đổi là tất cả những gì bao quanh vòng lặp đó. Mô hình có thể chỉ chiếm 20% một tác nhân sản xuất; còn lại 80% 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 sổ tay của bạn | Chạy như một dịch vụ lưu trữ, có phiên bản và được triển khai dần |
| Danh tính | 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 | Ngoại vi hóa (cửa hàng chuỗi, dịch vụ bộ nhớ) |
| Lỗi | Bạn nhìn thấy truy vết ngược | Thử lại, dự phòng, thư chết, cảnh báo |
| Chi phí | “Chỉ vài xu” | Theo dõi trên mỗi yêu cầu, định tuyến, lưu trữ đệm, ngân sách |
| Chất lượng | Bạn quan sát đầu ra | Được đánh giá tự động trước mỗi lần phát hành |
| Niềm tin | Bạn phê duyệt mọi hành động | Chính sách + người trong vòng lặp cho các hành động rủi ro |
Ghi nhớ bảng này. Mỗi phần bên dưới tương ứng với một trong các hà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 quy trình ứng dụng của bạn. Mã của bạn gọi trực tiếp nhà cung cấp mô hình; vòng lặp lý luận chạy trong dịch vụ của bạn. Đây là cách các bài học trước đã làm.
Tác nhân được đăng ký như một tài nguyên trong Microsoft Foundry. Foundry lưu trữ vòng lặp lý luận, lưu trữ các chuỗi, 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 hàng nhẹ tạo chuỗi và đọc phản hồi.
Nhiều tác nhân (và công cụ) được kết hợ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 con người và các điểm kiểm tra bền bỉ có thể tạm dừng và tiếp tục. Đây là khả năng Workflows của Microsoft Agent Framework được áp dụng ở quy mô triển khai.
flowchart TB
subgraph P1[Khách hàng lưu trữ]
A1[Quy trình Ứng dụng của Bạn] --> M1[Nhà cung cấp Mô hình]
end
subgraph P2[Đại lý lưu trữ]
A2[Khách hàng mỏng] --> F2[Dịch vụ Đại lý Foundry]
F2 --> M2[Mô hình + Công cụ + Kho Chủ đề]
end
subgraph P3[Quy trình công việc Đại lý]
A3[Bộ điều phối] --> S1[Đại lý Đấu loại]
S1 --> S2[Đại lý Giải quyết]
S2 --> H[Nút Phê duyệt Con người]
H --> S3[Đại lý Hành động]
end
Việc triển khai một tác nhân không phải là một đẩy một lần. Nó là một vòng lặp, và nó trông rất giống chu trình phát hành phần mềm vì thực chất nó là như vậy.
flowchart LR
Create[Tạo / Tác giả] --> Version[Phiên bản]
Version --> Evaluate[Đánh giá ngoại tuyến]
Evaluate -->|vượt cổng| Deploy[Triển khai lưu trữ]
Evaluate -->|không vượt cổng| Create
Deploy --> Observe[Quan sát trực tuyến]
Observe --> Improve[Thu thập lỗi]
Improve --> Create
Deploy --> Retire[Loại bỏ phiên bản cũ]
Ý tưởng chính, được chuyển từ Bài 10: đánh giá ngoại tuyến là một cổng, không phải là suy nghĩ sau cùng. Một phiên bản tác nhân mới sẽ không được phát hành trừ khi nó vượt qua các ngưỡng đánh giá của bạn. Khả năng quan sát trực tuyến sau đó đưa các lỗi thực tế vào bộ kiểm tra ngoại tuyến 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 một 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 tải.
Xử lý yêu cầu không trạng thái. Không giữ trạng thái theo người dùng trong bộ nhớ tiến trình của bạn. Lưu trữ các chuỗi hội thoại trong cửa hàng chuỗi Foundry hoặc dịch vụ bộ nhớ để mọi phiên bản đều 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 về sự kiện — sang mô hình nhỏ, nhanh và giữ mô hình lớn cho reasoning thực sự. Model Router của Foundry có thể làm việc này cho bạn, hoặc bạn có thể tự triển khai bộ phân loại nhẹ. Bạn sẽ xây dựng phiên bản DIY trong phòng lab.
Lưu bộ nhớ đệm phản hồi. Nhiều truy vấn hỗ trợ là gần giống nhau (“tôi làm thế nào để đặt lại mật khẩu?”). Lưu bộ nhớ đệm 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 mô hình. Ngay cả tỉ lệ trúng bộ nhớ đệm khiêm tốn cũng 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 độ. Hạn chế độ đồng thời của bạn, sử dụng thử lại với độ trễ tăng theo cấp số nhân, và thất bại nhẹ nhàng (phản hồi “chúng tôi đang xử lý” trong hàng đợi tốt hơn lỗi 500).
flowchart LR
Q[Truy vấn người dùng] --> C{Đã có trong cache?}
C -->|có| R[Trả lời đã lưu trong cache]
C -->|không| Router{Độ phức tạp?}
Router -->|đơn giản| SLM[Mô hình nhỏ]
Router -->|phức tạp| LLM[Mô hình lớn]
SLM --> Out[Phản hồi]
LLM --> Out
Out --> Store[Cache + dấu vết]
Bạn không thể vận hành những gì bạn không thể thấy. Như đã đề cập trong Bài 10, Microsoft Agent Framework phát ra dấu vết OpenTelemetry gốc — mọi cuộc gọi mô hình, gọi công cụ, và bước điều phối trở thành một span. Trong sản xuất, bạn xuất những spans đó ra Microsoft Foundry (hoặc máy chủ hỗ trợ 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")
# việc thực thi tác nhân được theo dõi tự động bên trong phạm vi này
Các thuộc tính như customer.tier và routed.model là thứ biến một bức tường các dấu vết thành các câu hỏi có thể trả lời (“các khách hàng doanh nghiệp có quá thường xuyên được định tuyến sang mô hình nhỏ 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ự ảnh hưởng:
Cổng đánh giá và kiểm soát chi phí là cùng một kỷ luật nhìn từ hai góc độ: đánh giá cho bạn sàn chất lượng, định tuyến và lưu đệm giúp bạn gần chi phí của sàn đó nhất có thể.
Quản trị. Tác nhân được 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. Cấp cho mỗi tác nhân một danh tính được quản lý với quyền tối thiểu cần thiết — truy cập chỉ đọc vào kho kiến thức, truy cập có phạm vi API bán vé, không hơn.
Con người trong vòng lặp. Một số hành động quá quan trọng để tự động hoàn toàn — cấp hoàn tiền, xóa tài khoản, chuyển lên nhóm pháp lý. Microsoft Agent Framework hỗ trợ các công cụ yêu cầu 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 tiếp tục. Bạn đã thấy nguyên thủy này trong Bài 6; đây bạn triển khai nó.
MCP trong sản xuất. MCP cho phép tác nhân sử dụng công cụ bên ngoài qua giao diện chuẩn. Trong sản xuất, xem mỗi máy chủ MCP là một biên an toàn không tin cậy: ghim phiên bản máy chủ, chạy với danh tính có phạm vi, xác thực đầu ra, và không bao giờ tiết lộ bí mật với nó. Máy chủ MCP là một phụ thuộc, và phụ thuộc được vá, kiểm toán và giới hạn tốc độ.
flowchart TB
subgraph Dev[Kiến trúc phát triển]
D1[Sổ ghi chép] --> D2[Khung tác nhân]
D2 --> D3[Nhà cung cấp mô hình]
D2 --> D4[Công cụ cục bộ]
end
subgraph Deploy[Kiến trúc triển khai]
E1[Chuỗi công việc CI] --> E2[Cửa đánh giá]
E2 -->|vượt qua| E3[Dịch vụ Tác nhân Foundry]
E3 --> E4[Tác nhân lưu trữ có phiên bản]
end
subgraph Run[Kiến trúc thời gian chạy]
F1[Ứng dụng khách] --> F2[Tác nhân được lưu trữ]
F2 --> F3[Bộ định tuyến mô hình]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Dịch vụ bộ nhớ]
F2 --> F6[Công cụ MCP]
F2 --> F7[OTel -> theo dõi Foundry]
F2 --> F8[Phê duyệt của con người]
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 của 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 đến cuối. Bạn sẽ lắp ráp một tác nhân hỗ trợ khách hàng Contoso có mọi mối quan tâm sản xuất được nối dây:
Sổ tay được tổ chức để mỗi mối quan tâm sản xuất là một phần có thể chạy độc lập. Trái tim của nó là bộ 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. Phục vụ từ bộ nhớ đệm khi có thể.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Định tuyến theo độ phức tạp để kiểm soát chi phí.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Chạy tác nhân bên trong khoảng theo dõi để quan sát.
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. Bộ nhớ đệm và trả về.
response_cache.set(normalize(query), response.text)
return response.text
Cổng đá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 # chỉ triển khai nếu cổng đạt yêu cầu
Đọc từng dòng — sổ tay giữ các nguyên thủy có chủ ý nhỏ để không có gì bị ẩn phía sau lời gọi framework.
Cổng đánh giá phía trên chạy ngoại tuyến trên đối tượng tác nhân của bạn. Khi tác nhân được triển khai như một Tác nhân được lưu trữ, bạn cần thêm một kiểm tra nữa, thậm chí 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 — nó không chứng minh tác nhân trả lời. Một phụ thuộc bị thiếu, đị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ì. Một bài 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, mà không tốn kém như đánh giá đầy đủ.
Kho lưu trữ này cung cấp một quy trình kiểm tra khói sẵn sàng sử dụng xây dựng trên GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json chứa lời nhắc và khẳng định cho tác nhân hỗ trợ Contoso (câu trả lời chính sách có căn cứ, tra cứu đơn hàng, giữ chủ đề, và duy trì chuỗi đa lượt). Các danh mục cho các tác nhân bài học khác tồn tại bên cạnh — xem tests/README.md..github/workflows/smoke-test.yml đăng nhập với Azure OIDC và gửi POST từng lời nhắc tới điểm cuối Responses của tác nhân, thất bại công việc nếu có bỏ lỡ khẳng định.- 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 đại lý của bạn đã được triển khai, cung cấp điểm cuối dự án Foundry và tên đại lý của bạn. Định danh liên kết cần vai trò Azure AI User trong phạm vi dự án Foundry. Hãy nghĩ về các lớp như một kim tự tháp: các kiểm tra khói (có thể tiếp cận 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 ngoài thực tế?) chạy liên tục.
Kiểm tra sự hiểu biết của bạn trước khi chuyển sang bài tập.
1. Đại khái thì “mô hình” chiếm bao nhiêu phần trong một đại lý sản xuất, và phần còn lại là gì?
2. Khi nào bạn chọn Đại lý Được Lưu trữ thay vì đại lý lưu trữ phía khách hàng?
3. Tại sao một đại lý có khả năng mở rộng phải không giữ trạng thái trong bộ nhớ tiến trình riêng?
4. Vấn đề nào mà định tuyến mô hình giải quyết, và nó liên quan thế nào đến đánh giá?
5. “Cổng đánh giá” là gì và nó nằm ở đâu trong vòng đời?
6. Tại sao máy chủ MCP nên được coi là một ranh giới không đáng tin cậy trong sản xuất?
7. Thay đổi duy nhất nào thường có tác động lớn nhất đến chi phí đại lý sản xuất, và tại sao?
8. Thuộc tính span như customer.tier và routed.model đóng vai trò gì trong quan sát?
Lấy đại lý hỗ trợ khách hàng từ bài lab và củng cố nó cho một kịch bản cụ thể: đại lý hỗ trợ thanh toán đăng ký cho công ty SaaS.
Nộp bài của bạn nên:
get_subscription_status, get_invoice, và issue_credit (phiếu tín dụng trên $50 cần phê duyệt con người).Viết một đoạn ngắn (trong ô markdown) giải thích quy tắc định tuyến mô hình bạn chọn và cách bạn sẽ xác thực nó với lưu lượng thực tế. Không có câu trả lời duy nhất đúng — bạn sẽ được đánh giá dựa trên việc liệu các mối quan tâm về sản xuất có được kết nối chặt chẽ và hợp lý.
Trong bài học này bạn đã chuyển một đại lý từ nguyên mẫu sang sản xuất với Microsoft Foundry:
Bài học tiếp theo đi theo hướng ngược lại: thay vì mở rộng đại lý lên đám mây, bạn sẽ đưa chúng xuống máy của một nhà phát triển duy nhất và chạy hoàn toàn cục bộ.
Xây dựng Đại lý 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.