Xây dựng với AI

Mở rộng quy mô API cho AI agent có trạng thái theo nguyên tắc microservices

Các AI agent tạo ra lưu lượng truy cập bùng nổ và có trạng thái, làm hỏng các API đơn khối (monolithic). Các kỹ sư có thể khắc phục điều này bằng cách tách biệt phần tính toán khỏi dữ liệu thông qua các vách ngăn (bulkheads) và cơ sở dữ liệu dùng chung.

Hình minh họa các khối server module kết nối bằng các sợi chỉ hội thoại phát sáng, biểu thị kiến trúc AI agent không trạng thái
Minh họa được tạo riêng cho bài viết này

Được dịch tự động từ bản gốc tiếng Anh.

Khi các AI agent chuyển từ prototype thử nghiệm sang hệ thống production, các kỹ sư phải đối mặt với thách thức mở rộng quy mô mà kiến trúc web truyền thống khó xử lý. Khác với người dùng là con người, các agent tạo ra những đợt request nhanh, có trạng thái và yêu cầu ngữ cảnh nhất quán trên nhiều bản sao server. Một phân tích kỹ thuật gần đây đã chứng minh cách áp dụng các mẫu microservices cổ điển—cụ thể là statelessness (không trạng thái), bulkheads (vách ngăn) và smart endpoints (endpoint thông minh)—có thể giải quyết những điểm nghẽn này mà không cần phát minh lại bánh xe.

Chuyện gì đã xảy ra

Hầu hết các ứng dụng AI hiện đại dựa vào các giao thức có cấu trúc, chẳng hạn như API tương thích OpenAI, để quản lý hội thoại đa lượt. Mặc dù các giao diện này hoạt động tốt trong môi trường một bản sao (single-replica), chúng thường thất bại khi được mở rộng ngang. Trong một benchmark proof-of-concept điển hình, một API monolithic chạy trên một máy chủ đã xử lý 800 lượt hội thoại mà không mất ngữ cảnh. Tuy nhiên, khi cùng hệ thống đó được phân tán trên ba máy chủ phía sau load balancer, nó đã mất ngữ cảnh trong 75% các tương tác. Mô hình vẫn tiếp tục phản hồi với mã trạng thái HTTP 200, nhưng câu trả lời thiếu lịch sử hội thoại cần thiết vì các request rơi vào những server không giữ trạng thái cục bộ.

Nguyên nhân gốc rễ nằm ở sự khác biệt cơ bản giữa lưu lượng của agent và lưu lượng web tiêu chuẩn. Vòng lặp của agent là có trạng thái (stateful), nhưng mỗi request HTTP lại độc lập. Nếu không có sticky sessions hoặc lưu trữ dùng chung bền vững, việc phân tán các request này trên nhiều bản sao sẽ phá vỡ mạch hội thoại. Hơn nữa, các agent hoạt động ở tốc độ máy móc, tạo ra các đợt bùng nổ công việc với rất ít thời gian suy nghĩ giữa các lượt. Chúng cũng retry mạnh mẽ khi gặp lỗi, điều này có thể khuếch đại áp lực lên các dependency hạ nguồn. Những đặc điểm này tạo ra một hình dạng tải trọng mà các thiết kế stateful truyền thống không thể hấp thụ hiệu quả.

Để giải quyết vấn đề này, bài phân tích đề xuất xây dựng lại các API thân thiện với agent bằng các nguyên tắc từ tài liệu microservices thập niên 2010. Bằng cách phân rã ứng dụng thành gateway, memory service và tools service, các nhà phát triển có thể cô lập các miền lỗi (failure domains). Gateway xử lý giao thức OpenAI mà không giữ trạng thái, trong khi memory service sở hữu lịch sử hội thoại và nhật ký kiểm toán (audit trails). Việc phân rã này cho phép mỗi thành phần mở rộng quy mô độc lập và áp dụng các biện pháp kiểm soát đồng thời cụ thể, đảm bảo rằng việc sử dụng tool nặng không chặn các chat completion tiêu chuẩn.

Cách thức hoạt động

Kiến trúc được đề xuất dựa trên ba cơ chế cốt lõi: statelessness, bulkheads và converged data storage (lưu trữ dữ liệu hội tụ). Statelessness đảm bảo rằng trạng thái hội thoại được di chuyển ra khỏi tiến trình ứng dụng và vào một kho lưu trữ dùng chung. Điều này cho phép bất kỳ bản sao nào phục vụ bất kỳ lượt nào của bất kỳ cuộc hội thoại nào, loại bỏ nhu cầu về session stickiness. Bulkheads cô lập các phần khác nhau của hệ thống để ngăn ngừa lỗi dây chuyền. Ví dụ, các slot đồng thời riêng biệt được gán cho các request chat thuần túy và các request có kèm tool. Nếu một vector search chậm hoặc một lệnh gọi API bên ngoài chặn đường dẫn tool, đường dẫn chat tiêu chuẩn vẫn khả dụng cho những người dùng khác.

Sự hội tụ dữ liệu đạt được bằng cách sử dụng một engine cơ sở dữ liệu hợp nhất thay vì chia nhỏ dữ liệu vào nhiều store chuyên biệt. Trong nhiều kiến trúc AI, các nhà phát triển có thể dùng Postgres cho dữ liệu quan hệ, Redis cho caching và một vector database riêng cho embeddings. Cách tiếp cận này gây ra những thách thức phức tạp về tính nhất quán, đặc biệt khi một lượt agent duy nhất yêu cầu ghi trạng thái hội thoại, bản ghi tool, sự kiện bộ nhớ và các mục idempotency cùng lúc. Bằng cách sử dụng một cơ sở dữ liệu như Oracle AI Database Free, hỗ trợ dữ liệu quan hệ, JSON và vector trong một engine, các thao tác ghi này có thể được xử lý trong một transaction duy nhất. Điều này đảm bảo tính nguyên tử (atomicity) và đơn giản hóa việc quản lý backup và credential.

Hệ thống sử dụng semaphore để thực thi giới hạn đồng thời ở cấp độ service. Ví dụ, gateway có thể cấp phát 24 slot cho chat và 8 slot cho tools. Khi một request đến, nó phải giành được một slot trước khi tiếp tục. Điều này ngăn chặn tình trạng lũ lụt lệnh gọi tool làm cạn kiệt tất cả tài nguyên khả dụng. Ngoài ra, các tính năng cấp độ cơ sở dữ liệu như SELECT ... FOR UPDATE với các cột version giúp tuần tự hóa các cập nhật xung đột từ các bản sao khác nhau, đảm bảo rằng các lượt đồng thời trong cùng một cuộc hội thoại không ghi đè trạng thái của nhau.

Chi tiết chính

  • Mất ngữ cảnh trong monolith: Mở rộng quy mô một API monolithic stateful từ một lên ba bản sao dẫn đến tỷ lệ mất ngữ cảnh 75% trong các benchmark, mặc dù các phản hồi HTTP đều thành công.
  • Bốn thuộc tính lưu lượng của agent: Hội thoại dài nhưng request thì stateless; lệnh gọi tool lan tỏa không thể đoán trước; agent retry mạnh mẽ; và tải trọng bùng nổ theo nhịp máy móc.
  • Cô lập bằng Bulkhead: Tách biệt các pool đồng thời cho chat và tools ngăn chặn việc thực thi tool chậm làm阻塞 các request chat tiêu chuẩn, cải thiện khả năng chống chịu tổng thể của hệ thống.
  • Lưu trữ dữ liệu hội tụ: Sử dụng một cơ sở dữ liệu duy nhất cho dữ liệu quan hệ, JSON và vector tránh được chi phí overhead về tính nhất quán khi quản lý nhiều datastore chuyên biệt cho một lượt agent.
  • Smart endpoints, dumb pipes: Giao thức chat-completions của OpenAI đóng vai trò là lớp vận chuyển ổn định, trong khi trí tuệ như routing và engineering bộ nhớ được triển khai trong logic ứng dụng.
  • An toàn transaction: Các transaction cơ sở dữ liệu đảm bảo rằng trạng thái hội thoại, audit tool và embeddings bộ nhớ được ghi nguyên tử, ngăn chặn các cập nhật một phần trong quá trình retry.

Tại sao điều này quan trọng

Đối với các kỹ sư phần mềm xây dựng sản phẩm AI, việc hiểu những thay đổi kiến trúc này là cực kỳ quan trọng đối với độ tin cậy. Các lỗi im lặng (silent failures), nơi hệ thống trông có vẻ khỏe mạnh nhưng cung cấp câu trả lời sai do thiếu ngữ cảnh, rất khó debug và làm xói mòn niềm tin của người dùng. Bằng cách áp dụng các thiết kế stateless và lưu trữ dùng chung, các nhóm có thể mở rộng ứng dụng theo chiều ngang mà không hy sinh tính liên tục của hội thoại. Cách tiếp cận này cũng đơn giản hóa vận hành, vì nó loại bỏ nhu cầu cấu hình session affinity phức tạp trong load balancer.

Hơn nữa, việc sử dụng bulkheads và dữ liệu hội tụ giảm bớt sự phức tạp trong vận hành và cải thiện hiệu suất dưới tải. Cô lập các tác vụ tốn tài nguyên như vector search đảm bảo chức năng chat cốt lõi vẫn phản hồi nhanh. Hợp nhất các loại dữ liệu vào một engine cơ sở dữ liệu duy nhất loại bỏ nhu cầu phối hợp ở cấp độ ứng dụng giữa nhiều hệ thống, giảm độ trễ và rủi ro mất nhất quán dữ liệu. Các mẫu này cho phép các nhà phát triển xây dựng hệ thống agent robust, có khả năng mở rộng bằng các nguyên tắc kỹ thuật đã được thiết lập thay vì phụ thuộc vào các giải pháp tùy chỉnh mong manh.

Bạn có thể làm gì

  • Tách biệt trạng thái khỏi tính toán: Di chuyển lịch sử hội thoại và bộ nhớ agent ra khỏi bộ nhớ ứng dụng và vào một hệ thống lưu trữ dùng chung, bền vững mà tất cả các bản sao có thể truy cập.
  • Triển khai Bulkheads: Sử dụng semaphore hoặc các biện pháp kiểm soát đồng thời tương tự để tách biệt các pool tài nguyên cho các loại request khác nhau, chẳng hạn như chat completions và thực thi tool.
  • Hội tụ tầng dữ liệu: Đánh giá các cơ sở dữ liệu hỗ trợ dữ liệu quan hệ, JSON và vector trong một engine duy nhất để đơn giản hóa quản lý transaction và giảm rủi ro nhất quán.
  • Áp dụng giao thức chuẩn: Sử dụng API tương thích OpenAI làm lớp vận chuyển để tận dụng các SDK và công cụ hiện có, giữ cho giao thức đơn giản và ổn định.
  • Kiểm tra mất ngữ cảnh: Chạy các benchmark phân tán request trên nhiều bản sao để xác định và sửa các vấn đề mất ngữ cảnh im lặng trước khi triển khai production.
  • Sử dụng optimistic concurrency: Triển khai các cột version và khóa cấp độ cơ sở dữ liệu để xử lý an toàn các cập nhật đồng thời lên cùng một trạng thái hội thoại.

Công cụ từ cửa hàng Bytechap

$89

DocBento

Hệ thống quản lý tài liệu tự host, có khả năng đọc mọi bản quét và trả lời kèm trích dẫn trang cụ thể.

Demo trực tiếp

Đọc tiếp

Tất cả bài viết