Tổng quan kiến trúc
Cái gì chạy ở đâu, và đường đi của một yêu cầu — từ trình duyệt của một người, qua đăng nhập và agent, đến mô hình rồi quay lại.
Mỗi khách hàng có bản triển khai riêng, dựng từ cùng một mã nguồn và cùng bộ mẫu hạ tầng, chạy ngay trong tài khoản AWS của chính họ. Một bản triển khai phục vụ một tổ chứcTổ chứcOrganisationKhông gian của công ty bạn trong portal. Mỗi bản triển khai chạy một tổ chức, trong chính tài khoản AWS của bạn.Mở trong Thuật ngữ, không dùng chung gì với khách hàng khác, và mọi lần gọi mô hình đều đi qua một gateway duy nhất.
Quy tắc chính
- CloudFront là lối vào công khai duy nhất. Mọi thứ khác nằm phía sau nó.
- Mọi lần gọi mô hình đều đi qua LiteLLM. Không gì gọi thẳng Bedrock.
- Danh tính và chính sách đi cùng mỗi yêu cầu, và agent không thể nới rộng chúng.
- Một host agent chạy mọi agent. Tạo agent không triển khai thêm gì.
- Quản trị viên chỉ làm việc trong portal. Console của LiteLLM và Keycloak dành cho ECV break-glass.
Toàn cảnh hệ thống
Di chuột hoặc chọn một ô để xem vai trò của nó.
Trình duyệt vào portal qua CloudFront. Web app tĩnh được lấy từ một bucket riêng tư; yêu cầu dưới /api đi tới API của portal, còn yêu cầu dưới /idp đi tới Keycloak. Từ API của portal, một tin nhắn chat đi tới môi trường chạy agent, nơi gọi mô hình qua LiteLLMLiteLLM (cổng mô hình)LiteLLM (model gateway)Cổng mà mọi lệnh gọi mô hình đi qua. Nó định tuyến tới Bedrock, áp khoá và ngân sách của từng phòng ban, và ghi chi phí từng lệnh gọi.Mở trong Thuật ngữ, và LiteLLM gọi BedrockAmazon BedrockAmazon BedrockDịch vụ mô hình của AWS, chạy trong region của tài khoản bạn. Mô hình và embedding của portal đến từ đây, luôn qua LiteLLM.Mở trong Thuật ngữ.
Các dịch vụ hỗ trợ nằm dọc theo đường đi đó:
| Thành phần | Làm gì |
|---|---|
| LiteLLM | Đồng thời là MCP gateway cho ứng dụng (ứng dụng kết nối) |
| Redis | Phiên của API portal, bộ đệm luồng chat, cache |
| Secrets Manager và KMS | Thông tin xác thực và mã hoá |
| CloudWatch và S3 | Số liệu và cảnh báo |
| S3 | Tệp, kể cả bucket riêng tư chứa web app |
Hạ tầng được mô tả trong kho Terragrunt riêng của tài khoản khách hàng và do chủ tài khoản đó áp dụng; kho mã của portal không tự cấp phát gì. Một khách hàng mới là một bản triển khai đáp ứng yêu cầu triển khai, cộng với cấu hình khởi tạo — nhà cung cấp danh tính, thương hiệu, danh mục mô hình và ngân sách — không cần sửa mã.
Các lớp
| # | Lớp | Làm gì | Xây bằng |
|---|---|---|---|
| 1 | Web app | Chat, workspace và Admin console | React, Vite, TypeScript |
| 2 | API của portal | Kiểm tra quyền, dữ liệu, lớp quản trị, chuyển sự kiện tới trình duyệt | NestJS, theo mô hình backend-for-frontend (BFF) |
| 3 | Agent | Vòng lặp suy luận, điều phối tool, bộ nhớ | Strands Agents TypeScript SDK, trong môi trường chạy agent trên host không trạng thái dùng chung |
| 4 | Gateway mô hình | Định tuyến, virtual key, hạn mức, phân bổ chi phí | LiteLLM đứng trước Bedrock |
| 5 | Gateway tool | Khám phá ứng dụng, ranh giới xác thực, chính sách gọi | LiteLLM làm MCP gateway, sau một adapter của portal |
| 6 | Bộ nhớ và tri thức | Nạp dữ liệu, tìm kiếm kết hợp trên bộ nhớ và tri thức, trích dẫn | pgvector trong Postgres của portal, tạo embedding qua LiteLLM |
| 7 | Danh tính | Đăng nhập một lần, cấp tài khoản qua SCIM, claim tổ chức | Keycloak làm trung gian cho Entra ID; portal là máy chủ SCIM |
| 8 | Quản trị | Quyền dùng mô hình, ngân sách, kiểm tra | Chính sách LiteLLM, nhật ký kiểm tra nằm trong Postgres của portal |
| 9 | Hạ tầng | Tính toán, mạng, mã hoá, sao lưu | CloudFront, một host không trạng thái, một host dữ liệu, S3, kho bí mật của tài khoản |
Quản trị viên phía khách hàng chỉ dùng portal. Portal thay họ gọi API quản trị của LiteLLM và Keycloak; console của hai dịch vụ này được giữ cho ECV break-glass.
Đường đi của một tin nhắn
-
Đăng nhập
Keycloak đăng nhập cho người dùng, làm trung gian cho đăng nhập một lần và MFA qua Entra ID của bạn. API của portal hoàn tất bước trao đổi mã OIDC.
-
Giữ phiên
API của portal giữ token; trình duyệt chỉ giữ cookie phiên. Token mang tài khoản và các realm role của nó.
-
Kiểm tra ai và được gì
API của portal đọc chỗ ngồi của người đó trong cơ sở dữ liệu portal — phòng ban, nhóm, vai trò tùy chỉnh và quyền hạn — đọc mới ở mỗi yêu cầu.
-
Chạy agent
API của portal gọi môi trường chạy agent với cấu hình của agent, cùng danh tính và chính sách đã xác định của người dùng. Khi agent gọi ngược lại để lấy bộ nhớ, tri thức, web hay artifact, mỗi lần gọi ngược mang một bí mật dùng chung.
-
Gọi mô hình
Mỗi lần gọi mô hình đi tới LiteLLM bằng virtual keyKhoá ảoVirtual keyKhoá cổng cấp cho từng phòng ban, để mỗi lệnh gọi mô hình được giới hạn và tính phí đúng phòng ban. Người dùng không bao giờ phải dùng tới khoá này.Mở trong Thuật ngữ của phòng ban, rồi tới Bedrock. Một lượt có thể gọi nhiều lần.
-
Truyền ngược về
Tiến trình và câu trả lời được truyền về qua API của portal dưới dạng server-sent events, phát lại từ bộ đệm Redis Streams để trang được tải lại tiếp tục đúng chỗ đã dừng. Xem Vòng đời của một lượt.
-
Ghi nhận
Mỗi lần gọi mô hình để lại một dòng nhật ký kiểm tra, với chi phí tính cho phòng ban.
Bất biến
| Bất biến | Tác dụng |
|---|---|
| Mọi lần gọi mô hình đều đi qua LiteLLM; không lần nào tới thẳng Bedrock | Hạn mức, phân bổ chi phí và quyền dùng mô hình được áp dụng ở một nơi |
| Danh tính đã xác minh và chính sách đã xác định của người dùng được truyền vào agent, và agent không thể nới rộng chúng | Thành viên phòng ban là dữ liệu người dùng trực tiếp trong cơ sở dữ liệu portal, được đọc ở mỗi yêu cầu, nên việc chuyển phòng ban có hiệu lực ngay ở yêu cầu kế tiếp |
Những gì đi ra khỏi tài khoản của bạn
Phần lớn lưu lượng ở lại trong tài khoản AWS của bạn. Đây là các ngoại lệ:
| Lưu lượng | Khi nào |
|---|---|
| Đăng nhập | Keycloak trao đổi với tenant Entra ID của bạn |
| Đồng bộ SharePoint | Portal đọc các thư mục SharePoint bạn kết nối vào kho tri thức, qua Microsoft Graph |
| Ứng dụng kết nối | Một ứng dụng chạy bên ngoài tài khoản của bạn nhận các lần gọi mà người dùng cho phép |
| Tìm kiếm và nghiên cứu web | Chỉ khi tổ chức của bạn bật các tool này |
| Khóa nhà cung cấp tự dán | Chỉ khi một phòng ban hay một người thêm khóa cho nhà cung cấp ngoài Bedrock |
Vì sao hoạt động như vậy
Vì sao mỗi khách hàng một bản triển khai?
Dữ liệu, khóa và nhật ký kiểm tra của bạn nằm trong một tài khoản bạn kiểm soát, theo chính sách AWS của chính bạn. Mọi bản triển khai đều cùng mã nguồn và cùng bộ mẫu hạ tầng, nên khách hàng mới chỉ là cấu hình — nhà cung cấp danh tính, thương hiệu, mô hình, ngân sách — không phải sửa mã.
Vì sao mọi lần gọi mô hình phải qua LiteLLM?
Đó là nơi duy nhất áp dụng ngân sách, giới hạn tốc độ, quyền dùng mô hình và phân bổ chi phí. Mỗi lần gọi mang khóa của phòng ban, nên không gì — kể cả ứng dụng hay agent — tới được Bedrock mà không bị đếm và giới hạn.
Vì sao một host agent dùng chung thay vì mỗi agent một host?
Agent là cấu hình — chỉ dẫn, tool, tri thức và một mô hình — lưu trong portal và được nạp mỗi lần chạy. Một host nghĩa là tạo hay sửa agent không bao giờ phải triển khai gì, và mọi agent nhận cùng các kiểm tra bảo mật và bản cập nhật cùng lúc.
Bên dưới
Môi trường phát triển cục bộ
Môi trường phát triển cục bộ chạy Postgres, Redis, RustFS (thay cho S3), Keycloak và LiteLLM bằng Docker Compose.