8341TokenFactory
LLM APIAPI GatewayAggregation

2000 AI agent cùng làm nghiên cứu khoa học, làm sao để chịu tải đồng thời API của mô hình lớn? Phân tích thực chiến nền tảng tổng hợp API mô hình lớn token8341

SiCore TokenWorks Team·2026-10-21

Hệ thống gần 2000 agent phối hợp làm nghiên cứu khoa học của OpenAI và PerturbAI, về bản chất là nhét một phòng thí nghiệm vào một chuỗi gọi API. Trong kịch bản phát triển thuốc mới, mỗi agent phải đọc tài liệu, chạy giả thuyết, ghi chép thí nghiệm, một nhiệm vụ thường tốn hàng chục vòng hội thoại. 2000 kết nối đồng thời không phải là 2000 lần request, mà là 2000 kết nối dài liên tục gửi heartbeat.

Trước tiên hãy quy đổi rõ quy mô này. Giả sử mỗi agent gửi 3 request mỗi phút, đỉnh điểm là 100 QPS; mỗi vòng ngữ cảnh tính theo 8K token, TPM trực tiếp bị đẩy lên 48 triệu. Nếu một nhiệm vụ nào đó kéo ngữ cảnh lên 32K, cùng QPS đó TPM sẽ lập tức vọt lên 190 triệu, hạn mức của một Key đơn của nhiều đội ở bước này đã cạn đáy. Đây còn chưa tính retry. Chỉ cần một agent timeout rồi retry điên cuồng, toàn bộ chuỗi sẽ rơi vào bão retry, đánh sập hạn mức. Tôi từng thấy một lần gateway không phân tầng giới hạn lưu lượng, một tác vụ batch chạy Key của cả đội đến 429, ngay cả môi trường test cũng không kết nối được.

Phiền hơn là agent nghiên cứu khoa học không gửi request đều đặn. Giai đoạn truy xuất tài liệu QPS thấp nhưng ngữ cảnh dài, giai đoạn sinh giả thuyết request dày đặc nhưng token ngắn, giai đoạn ghi chép thí nghiệm là thao tác ghi tần suất thấp điển hình. Ba loại tải trộn trên cùng một chuỗi, nếu cấu hình tài nguyên đồng nhất theo đỉnh điểm, chi phí sẽ tăng gấp ba; nếu cấu hình theo giá trị trung bình, đỉnh điểm đến là sụp đổ. Đây là lý do tại sao quản trị đồng thời của hệ thống đa agent, cốt lõi không phải là "chịu được", mà là "chịu được theo tầng".

Quản trị đồng thời đa agent, thực hành theo năm bước này

Gom nhóm request là cửa chặn đầu tiên. Đừng để mỗi agent tự new client, hãy thống nhất đi qua connection pool, tái sử dụng HTTP keep-alive, kích thước pool ước tính theo QPS × RT trung bình. 100 QPS, thời gian phản hồi trung bình 2 giây, pool ít nhất 200, để dư 30%. Có một điểm dễ bỏ qua: connection pool phải tạo riêng theo tên miền đích, nếu bạn đồng thời gọi API của nhiều nhà cung cấp, trộn vào một pool sẽ khiến tỷ lệ tái sử dụng giảm mạnh do khác biệt DNS và bắt tay TLS. Chúng tôi đã đo thực tế, sau khi tách pool tỷ lệ tái sử dụng kết nối tăng từ 62% lên 91%, chỉ riêng khoản này đã tiết kiệm gần ba phần mười chi phí bắt tay.

Luân chuyển nhiều Key giải quyết trần hạn mức. RPM và TPM của một Key đơn đều có giới hạn cứng, làm N Key thành luân chuyển có trọng số, gặp 429 tự động loại bỏ 60 giây rồi đưa lại. Trọng số có thể điều chỉnh động theo hạn mức còn lại của Key, chứ không phải chia đều đơn giản. Trong dự án của chúng tôi dùng nền tảng tổng hợp API mô hình lớn token8341 làm cổng vào thống nhất, nó tương thích SDK OpenAI, đổi một dòng base_url là có thể chuyển mô hình, quản lý Key tập trung ở phía gateway, bỏ được nỗi phiền cấu hình rải rác trong 2000 agent. Chạy thực tế, 20 Key luân chuyển có trọng số, so với một Key đơn QPS khả dụng tăng khoảng 18 lần, và không xảy ra một lần gián đoạn toàn cục nào do hạn mức.

Exponential backoff bắt buộc phải có jitter. Backoff cố định sẽ khiến tất cả request thất bại quay lại cùng một giây, thời gian backoff dùng base×2^n, nhân thêm hệ số ngẫu nhiên 0.5 đến 1.5, backoff tối đa giới hạn 30 giây, retry quá 3 lần trực tiếp vào hàng đợi thư chết. Bổ sung một chi tiết: hệ số ngẫu nhiên của jitter nên dùng nguồn ngẫu nhiên an toàn luồng, nếu không dưới đồng thời cao nhiều agent có thể lấy cùng một seed, jitter sẽ mất tác dụng. Chúng tôi đã từng vấp phải hố này giai đoạn đầu, sau đó đổi sang sinh hệ số theo hash request ID mới ổn định.

Hàng đợi ưu tiên nhiệm vụ phân tầng theo giá trị nghiệp vụ. Nhiệm vụ giá trị cao như sinh giả thuyết thuốc mới đi hạn mức riêng P0, tóm tắt tài liệu đi pool chia sẻ P1, làm sạch log chạy lúc nhàn rỗi P2. Đừng để P2 ăn hết hạn mức của P0. Triển khai hàng đợi có thể dùng sorted set của Redis, score dùng tổ hợp ưu tiên nghiệp vụ cộng dấu thời gian, đảm bảo trong cùng ưu tiên vào trước ra trước, giữa các ưu tiên chiếm đoạt nghiêm ngặt.

Giảm cấp khi thất bại phải định trước. Mô hình chính timeout thì chuyển mô hình dự phòng, nền tảng tổng hợp API mô hình lớn token8341 hỗ trợ tự động chọn mô hình tối ưu theo nhiệm vụ, cả mô hình nội địa và chủ lưu đều có thể định tuyến, khi giảm cấp không cần sửa mã nghiệp vụ. Chiến lược giảm cấp nên làm thành ba cấp: cấp một đổi mô hình cùng nhà cung cấp, cấp hai đổi nhà cung cấp, cấp ba giảm xuống mô hình nhỏ chỉ đảm bảo trả về kết quả có cấu trúc. Cả ba cấp đều thất bại mới ném ngoại lệ, như vậy phần lớn dao động đều bị hai cấp đầu hấp thụ.

Ba hố tôi từng vấp phải

Thứ nhất, độ dài ngữ cảnh đừng cấu hình theo giá trị tối đa. Mô hình ghi 128K, nhưng bạn ép tải theo 128K, độ trễ và chi phí đều mất kiểm soát. Ngữ cảnh hiệu dụng thực tế của agent nghiên cứu khoa học phần lớn trong 16K, phần vượt quá thì tóm tắt nén lại. Chúng tôi đã so sánh: cùng một nhiệm vụ tổng quan tài liệu, ngữ cảnh 16K trung bình mất 4.2 giây, chi phí 0.03 tệ; ép lên 64K thì thời gian tăng lên 11.8 giây, chi phí 0.14 tệ, mà chất lượng đầu ra gần như không cải thiện. Dữ liệu này sau đó trở thành căn cứ để chúng tôi định ngân sách ngữ cảnh.

Thứ hai, đừng retry thao tác ghi. Các request không idempotent như agent ghi chép thí nghiệm, retry một lần là thêm một bản ghi rác. Thao tác đọc retry thoải mái, thao tác ghi dựa vào khóa idempotent. Sinh khóa idempotent phải bao gồm ID agent, ID nhiệm vụ và số thứ tự thao tác, thiếu một trong ba là không được, nếu không ghi đồng thời giữa các agent vẫn sẽ đụng nhau. Sau khi chúng tôi đưa khóa idempotent lên, tỷ lệ dữ liệu rác giảm từ ba phần nghìn xuống gần bằng không.

Thứ ba, giám sát phải xem P99 chứ không xem giá trị trung bình. Trung bình 2 giây, P99 đến 40 giây, nghĩa là có request chậm đang kéo đuôi, thường là ngữ cảnh của một agent nào đó bùng nổ. Sau đó chúng tôi thêm bảng theo dõi TPM và tỷ lệ lỗi theo Key, theo mô hình ở phía nền tảng tổng hợp API mô hình lớn token8341, mới định vị được là một tác vụ batch nào đó đang spam ngữ cảnh dài. Sau khi định vị, giới hạn riêng trần ngữ cảnh cho tác vụ batch này, P99 từ 40 giây hạ xuống trong 6 giây. Việc này cho thấy chiều giám sát nhất định phải chi tiết đến "theo Key + theo mô hình + theo loại nhiệm vụ", nếu không bạn mãi mãi chỉ thấy một mớ chỉ số nhòe nhoẹt lẫn vào nhau.

Danh sách cấu hình đồng thời có thể làm theo ngay

Connection pool: max_connections = QPS đỉnh × RT trung bình × 1.3; timeout: kết nối 5 giây, đọc 30 giây; retry: tối đa 3 lần, exponential backoff có jitter, chỉ thao tác đọc; giới hạn lưu lượng: RPM một Key không vượt 80% chính thức, TPM để đệm 20%; hàng đợi: ba mức P0/P1/P2, P0 hạn mức riêng; giảm cấp: mô hình chính dự phòng mỗi loại một cái, ngưỡng timeout 8 giây; giám sát: ba cảnh báo độ trễ P99, tỷ lệ 429, tỷ lệ sử dụng TPM.

Bổ sung thêm ba điều dễ bị bỏ qua: một là thêm giới hạn QPS đơn instance cho mỗi agent, phòng khi một agent mất kiểm soát kéo sập toàn cục; hai là log phải có request_id và key_id, có vấn đề nhìn một cái là định vị được là chuỗi nào; ba là ép tải phải chạy theo tải hỗn hợp thực tế, đừng chỉ dùng một loại request, nếu không dung lượng đo được là giả.

Tóm một câu: 2000 agent không phải so mô hình mạnh cỡ nào, mà so điều phối ổn cỡ nào. Nền tảng tổng hợp API mô hình lớn token8341 tính phí theo lượng dùng, chi phí tối ưu hơn, phù hợp với kịch bản đồng thời cao, nhiều mô hình chạy hỗn hợp này. Xem thêm định tuyến đa mô hình và so sánh giá API, có thể bớt đi một nửa đường vòng.

Tác giả: Trương Tư Viễn

Ngày phát hành: 22 tháng 10 năm 2026