LLM Inference APIHướng dẫn
Khắc phục các lỗi phổ biến khi dùng API chat AI
Việc tích hợp API chat AI thường thất bại do cấu hình header sai, hiểu nhầm về giới hạn token hoặc xử lý truyền phát không đúng. Hướng dẫn này giải quyết các lỗi triển khai phổ biến nhất mà lập trình viên gặp phải khi tích hợp các endpoint tương thích OpenAI, đảm bảo mã của bạn chạy ổn định trong môi trường sản xuất.
Cập nhật:
Các điểm chính
- Luôn tính mức sử dụng token dựa trên tokenizer của mô hình cụ thể, không chỉ dựa trên đếm ký tự, để tránh tràn cửa sổ ngữ cảnh.
- Xử lý các lỗi truyền phát bằng cách kiểm tra mã trạng thái HTTP trước khi phân tích luồng JSON, vì ngắt mạng có thể khiến luồng ở trạng thái không nhất quán.
- Đảm bảo các tiêu đề yêu cầu của bạn khớp chính xác với thông số kỹ thuật API, đặc biệt là các trường Content-Type và Authorization, để ngăn các lỗi 400 hoặc 401 âm thầm.
- Triển khai các chiến lược backoff giới hạn tốc độ ngay lập tức, vì việc vượt quá 300 yêu cầu mỗi phút sẽ dẫn đến lỗi 429 làm dừng ứng dụng của bạn.
Hiểu về cửa sổ ngữ cảnh
Một trong những lý do phổ biến nhất gây ra lỗi API là vượt quá cửa sổ ngữ cảnh. Cửa sổ ngữ cảnh xác định tổng số token được phép trong một yêu cầu duy nhất, bao gồm cả prompt đầu vào và phần hoàn thành được tạo ra. Khi đạt đến giới hạn này, API sẽ từ chối yêu cầu với một lỗi, thường cho biết chuỗi quá dài.
Lập trình viên thường nhầm lẫn số ký tự với số token. Một từ đơn có thể đại diện cho nhiều token tùy thuộc vào bộ tokenizer. Ví dụ: cửa sổ ngữ cảnh 100.000 token, như của API suy luận của chúng tôi, cho phép lưu trữ lịch sử hội thoại dài hoặc xử lý tài liệu lớn, nhưng không phải là vô hạn.
- Theo dõi việc sử dụng token: Sử dụng bộ tokenizer chính thức cho mô hình của bạn để đếm chính xác token trước khi gửi yêu cầu.
- Cắt xén thông minh: Nếu vượt quá giới hạn, hãy loại bỏ các tin nhắn cũ nhất khỏi lịch sử hội thoại thay vì các tin nhắn mới nhất.
- Tính đến phần chi phí: Dành trước một số token cho phản hồi của mô hình. Nếu prompt của bạn sử dụng 63.000 token, bạn chỉ còn 1.000 token cho phần kết thúc.
Việc không quản lý giới hạn này dẫn đến ngắt kết nối hoặc phản hồi không đầy đủ. Luôn xác minh số lượng token của bạn dựa trên tài liệu mô hình trước khi triển khai trong môi trường sản xuất.
Xử lý lỗi truyền phát
Phản hồi truyền phát qua Sự kiện gửi qua máy chủ (SSE) rất quan trọng để có trải nghiệm người dùng tốt, nhưng chúng cũng đưa ra độ phức tạp trong việc xử lý lỗi. Không giống như các phản hồi JSON tiêu chuẩn, luồng có thể bị ngắt giữa chừng. Nếu xảy ra lỗi mạng, máy khách của bạn có thể nhận được dữ liệu một phần, khiến luồng ở trạng thái không xác định.
Khi triển khai trình tiêu thụ luồng, bạn phải xử lý vòng đời của luồng một cách cẩn thận. Hãy kiểm tra mã trạng thái HTTP trước khi cố gắng phân tích luồng. Nếu kết nối bị ngắt, bạn nên ghi lỗi và quyết định xem có nên thử lại hay hiển thị thông báo cho người dùng hay không.
Ngoài ra, hãy đảm bảo máy khách của bạn xử lý đúng dấu hiệu kết thúc luồng. Một số thư viện mong đợi một sự kiện đóng cụ thể, trong khi những thư viện khác dựa vào việc đóng kết nối. Hiểu nhầm điều này có thể dẫn đến các tiến trình bị treo hoặc rò rỉ bộ nhớ.
Luôn triển khai thời gian chờ cho các yêu cầu luồng của bạn. Nếu API không gửi phản hồi trong một khoảng thời gian hợp lý, hãy hủy yêu cầu để giải phóng tài nguyên. Điều này rất quan trọng để duy trì sự ổn định trong các môi trường có độ đồng thời cao.
Đếm token và giới hạn
Đếm token không chỉ là việc nằm trong cửa sổ ngữ cảnh; nó còn là quản lý chi phí. Mỗi token có một giá cụ thể và việc tính toán sai mức sử dụng có thể dẫn đến hóa đơn không mong muốn. Mặc dù mức giá của chúng tôi minh bạch, với tỷ lệ trên mỗi token cho đầu vào và đầu ra, bạn vẫn cần theo dõi mức sử dụng một cách chính xác.
Hầu hết các nhà phát triển đều sử dụng thư viện để đếm token, nhưng điều quan trọng là phải sử dụng đúng tokenizer cho mô hình bạn đang sử dụng. Các mô hình khác nhau sử dụng các tokenizer khác nhau và việc sử dụng sai tokenizer có thể dẫn đến sự chênh lệch đáng kể về số token được đếm. Ví dụ: một tokenizer được huấn luyện trên văn bản tiếng Anh có thể xử lý dấu câu khác với một tokenizer được huấn luyện trên mã nguồn.
Hãy theo dõi giới hạn sử dụng của bạn. API của chúng tôi cho phép 300 yêu cầu mỗi phút trên mỗi khóa. Nếu vượt quá, bạn sẽ nhận được lỗi 429 Too Many Requests. Việc triển khai bộ đếm đơn giản trong ứng dụng của bạn có thể giúp bạn duy trì trong giới hạn này và tránh gián đoạn dịch vụ.
Cuối cùng, hãy nhớ rằng số lượng token có thể thay đổi nhẹ giữa các triển khai khác nhau của cùng một tokenizer. Luôn kiểm tra logic đếm token của bạn với một vài đầu vào đã biết để đảm bảo tính nhất quán.
Cạm bẫy cấu hình header
Header là lớp cấu hình của các yêu cầu API của bạn. Cấu hình sai chúng là nguồn gốc phổ biến của lỗi 400 Bad Request hoặc 401 Unauthorized. Hai header quan trọng nhất là Content-Type và Authorization.
Header Content-Type phải được đặt thành application/json. Nếu thiếu hoặc sai, API có thể không phân tích đúng thân yêu cầu của bạn. Header Authorization phải bao gồm khóa API của bạn theo định dạng Bearer YOUR_API_KEY. Một lỗi phổ biến là quên tiền tố Bearer, điều này dẫn đến lỗi xác thực.
- Kiểm tra lỗi chính tả: Đảm bảo khóa API của bạn được sao chép chính xác, bao gồm cả bất kỳ khoảng trắng hoặc ký tự xuống dòng nào ở cuối.
- Xác minh header: Hãy sử dụng công cụ như
curlhoặc Postman để kiểm tra các header đang được gửi. - Xử lý phân biệt chữ hoa chữ thường: Một số API phân biệt chữ hoa chữ thường đối với tên header, mặc dù hầu hết các API hiện đại hiện nay không yêu cầu điều đó.
Luôn xác minh header của bạn trước khi gửi yêu cầu. Một lỗi nhỏ trong header có thể khiến toàn bộ yêu cầu thất bại, dẫn đến sự nhầm lẫn và lãng phí thời gian gỡ lỗi.
Quản lý giới hạn tốc độ
Giới hạn tốc độ được đặt ra để đảm bảo sử dụng công bằng và ngăn chặn lạm dụng. API của chúng tôi cho phép 300 yêu cầu mỗi phút trên mỗi khóa. Nếu vượt quá giới hạn này, bạn sẽ nhận được lỗi 429 Too Many Requests. Lỗi này bao gồm header Retry-After, cho biết thời gian bạn nên chờ trước khi thực hiện yêu cầu khác.
Để quản lý giới hạn tốc độ hiệu quả, hãy triển khai chiến lược backoff. Thay vì thử lại ngay lập tức, hãy đợi một khoảng thời gian tăng theo cấp số nhân với mỗi lần thử lại. Điều này ngăn ứng dụng của bạn làm quá tải API trong các giờ cao điểm.
Theo dõi các chỉ số mức sử dụng của bạn. Hầu hết các API đều cung cấp bảng điều khiển hoặc endpoint API để theo dõi khối lượng yêu cầu của bạn. Hãy sử dụng dữ liệu này để tối ưu hóa mẫu yêu cầu của ứng dụng. Nếu bạn đang thực hiện quá nhiều yêu cầu nhỏ, hãy cân nhắc nhóm chúng lại với nhau.
Hãy nhớ rằng giới hạn tốc độ được tính trên mỗi khóa, không phải trên mỗi tài khoản. Nếu bạn có nhiều khóa, mỗi khóa đều có giới hạn riêng. Hãy lập kế hoạch phân phối khóa của bạn cho phù hợp để tránh chạm vào các giới hạn một cách bất ngờ.
Giải thích mã lỗi
Hiểu các mã lỗi rất quan trọng để gỡ lỗi. Các lỗi phổ biến nhất mà bạn sẽ gặp phải là 400 Bad Request, 401 Unauthorized, 429 Too Many Requests và 500 Internal Server Error.
- 400 Bad Request: Điều này thường cho biết có vấn đề với thân yêu cầu, chẳng hạn như thiếu trường hoặc JSON không hợp lệ. Hãy kiểm tra thông báo lỗi để biết chi tiết về trường nào bị sai.
- 401 Unauthorized: Điều này cho biết có vấn đề với khóa API của bạn. Hãy xác minh rằng khóa đó chính xác và chưa bị thu hồi.
- 429 Too Many Requests: Điều này cho biết bạn đã vượt quá giới hạn tốc độ. Hãy triển khai chiến lược backoff để xử lý tình huống này một cách khéo léo.
- 500 Internal Server Error: Điều này cho biết có vấn đề ở phía máy chủ. Hãy thử lại yêu cầu sau một khoảng thời gian chờ ngắn.
Luôn ghi lại thân phản hồi lỗi. Nó thường chứa thông tin có giá trị về những gì đã xảy ra, chẳng hạn như trường cụ thể gây ra lỗi. Điều này có thể giúp bạn tiết kiệm hàng giờ đồng hồ gỡ lỗi.
Tối ưu hóa thân yêu cầu
Thân yêu cầu là phần cốt lõi trong tương tác API của bạn. Tối ưu hóa nó có thể cải thiện hiệu suất và giảm chi phí. Một lỗi phổ biến là gửi quá nhiều dữ liệu trong một yêu cầu duy nhất. Nếu prompt của bạn quá lớn, bạn có thể vượt quá cửa sổ ngữ cảnh hoặc phát sinh chi phí cao hơn.
Hãy cấu trúc JSON của bạn cẩn thận. Đảm bảo tất cả các trường bắt buộc đều có mặt và các trường tùy chọn chỉ được bao gồm khi cần. Ví dụ: nếu bạn không cần truyền phát, hãy không bao gồm tham số stream. Điều này giúp giảm kích thước tải trọng và đơn giản hóa phản hồi.
Sử dụng các công cụ như curl hoặc Postman để kiểm tra thân yêu cầu của bạn. Điều này cho phép bạn xác minh rằng JSON hợp lệ và API đang phân tích nó chính xác. Nó cũng giúp bạn xác định bất kỳ dữ liệu không cần thiết nào đang được gửi.
Cuối cùng, hãy cân nhắc việc lưu trữ phản hồi cho các yêu cầu giống hệt nhau. Nếu bạn đang gửi cùng một prompt nhiều lần, bạn có thể lưu trữ phản hồi cục bộ và tránh thực hiện gọi API một lần nữa. Điều này có thể giảm đáng kể độ trễ và chi phí cho các nhiệm vụ lặp đi lặp lại.
Gỡ lỗi gọi hàm
Gọi hàm cho phép mô hình thực thi các chức năng dựa trên đầu vào của người dùng. Gỡ lỗi gọi hàm có thể khó khăn vì nó liên quan đến nhiều bước: gửi yêu cầu, nhận lệnh gọi hàm, thực thi hàm và gửi kết quả trở lại mô hình.
Đảm bảo rằng các định nghĩa hàm của bạn chính xác. Schema phải khớp với chữ ký hàm thực tế. Nếu schema không chính xác, mô hình có thể tạo ra các đối số không hợp lệ, dẫn đến lỗi khi bạn cố gắng thực thi hàm.
Ghi nhật ký các đối số gọi hàm và kết quả đầu ra của hàm. Điều này cho phép bạn xác minh rằng mô hình đang tạo ra các đối số chính xác và hàm của bạn đang thực thi như mong đợi. Nếu có lỗi, nhật ký sẽ giúp bạn xác định vấn đề.
Xử lý lỗi một cách tinh tế. Nếu việc thực thi hàm thất bại, hãy gửi thông báo lỗi trở lại mô hình để nó có thể điều chỉnh phản hồi của mình. Điều này cung cấp trải nghiệm người dùng tốt hơn và cho phép mô hình khôi phục từ các lỗi.
Hỏi đáp
Làm thế nào để tôi tính toán việc sử dụng token cho các yêu cầu API của mình?
Sử dụng thư viện tokenizer chính thức được cung cấp cho mô hình cụ thể của bạn. Đếm ký tự không phải là một chỉ số đáng tin cậy cho số lượng token, vì các ký tự khác nhau có thể đại diện cho các số lượng token khác nhau. Hầu hết các SDK đều cung cấp một hàm tiện ích để đếm token chính xác.
Điều gì xảy ra nếu tôi vượt quá giới hạn tốc độ?
Bạn sẽ nhận được lỗi 429 Too Many Requests. Phản hồi sẽ bao gồm tiêu đề <code>Retry-After</code> cho biết bạn nên chờ đợi bao lâu trước khi thử lại. Khuyến nghị triển khai chiến lược backoff theo cấp số nhân để xử lý tình huống này một cách tinh tế.
Tôi có thể sử dụng bất kỳ SDK tương thích với OpenAI nào với API này không?
Có, bất kỳ SDK nào hỗ trợ định dạng API OpenAI đều có thể được sử dụng bằng cách chỉ thay đổi các biến môi trường <code>base_url</code> và <code>API_KEY</code>. Điều này bao gồm Python, Node.js và các ngôn ngữ phổ biến khác.
Làm thế nào để tôi xử lý các lỗi truyền phát trong ứng dụng của mình?
Kiểm tra mã trạng thái HTTP trước khi phân tích luồng. Nếu kết nối bị ngắt, hãy ghi nhật ký lỗi và quyết định xem có nên thử lại hay hiển thị thông báo cho người dùng hay không. Hãy triển khai thời gian chờ để ngăn các quy trình bị treo.
Khóa của bạn chỉ cách một biểu mẫu
Tạo tài khoản, sao chép khóa, thay đổi URL cơ sở. Đó là toàn bộ quá trình thiết lập.
Lấy khóa API