<!-- Canonical URL: https://ask.atlascloud.ai/vi/test-streaming-tool-call-compatibility-before-changing-llm-apis -->

# Làm thế nào để kiểm tra khả năng tương thích streaming và tool call trước khi đổi API LLM?

> Hãy kiểm tra việc đổi API LLM bằng fixture hợp đồng được ghi lại, không phải một bản demo chat. Xác minh streaming văn bản, tool bắt buộc, tham số phân mảnh, nhiều lời gọi, vòng trả kết quả, hủy, lỗi và usage.

Một bài test chat mười phút có thể bỏ sót lỗi quan trọng: lời gọi bị nhân đôi sau retry, JSON chạy trước event stream cuối, kết quả tool được trả sai role, hoặc thao tác ghi vẫn chạy sau khi hủy. Gate di chuyển hữu ích phải gửi request cố định qua parser và executor thật rồi đánh giá bất biến cấu trúc.

Giữ suite đầu tiên đủ nhỏ để chạy thường xuyên và đủ xác định để so sánh giữa các model. Mục tiêu không phải xếp hạng trí tuệ mà là chứng minh API mới có thể điều khiển vòng lặp agent an toàn.

## Xác định hợp đồng mà client phụ thuộc

Viết rõ hành vi client cần trước khi kiểm tra provider. Tránh nhãn mơ hồ như “tương thích OpenAI”.

| Khu vực hợp đồng | Bất biến bắt buộc | Bằng chứng cần lưu |
|---|---|---|
| Xác thực | Endpoint chấp nhận key | Status và request ID |
| Stream văn bản | Delta ghép thành một message cuối | Event thô theo thứ tự |
| Stream tool | Lời gọi hoàn tất trước khi chạy | Buffer lời gọi và event cuối |
| Tương quan | Kết quả gắn đúng lời gọi | Ánh xạ call ID |
| Retry | Mỗi lời gọi chạy tối đa một lần | Log idempotency |
| Usage | Counter có mặt hoặc ghi rõ không có | Metadata response cuối |

Hỗ trợ giao thức phụ thuộc từng model. Atlas Cloud cung cấp nhiều định dạng request, vì vậy hãy kiểm tra hướng dẫn [`supported_apis`](https://www.atlascloud.ai/docs/llm-protocols?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=test-streaming-tool-call-compatibility-before-changing-llm-apis) hiện tại trước khi chọn route kiểm thử.

## Tạo bốn công cụ xác định

Dùng fixture bộc lộ các kiểu lỗi khác nhau:

* `echo_json` trả lại nguyên tham số đã xác thực.
* `read_fixture` đọc một file đã biết trong sandbox.
* `delayed_value` hoàn tất sau độ trễ kiểm soát.
* `always_error` trả một lỗi có cấu trúc ổn định.

Mỗi tool cần schema nghiêm ngặt với `additionalProperties: false` và fixture ID duy nhất để nhìn thấy thực thi trùng lặp. Không phụ thuộc thời tiết, kết quả tìm kiếm hoặc repository thay đổi.

## Chạy ma trận tương thích theo giai đoạn

Kiểm tra không streaming trước streaming và một lời gọi trước nhiều lời gọi.

| Giai đoạn | Hành vi prompt | Điều kiện đạt |
|---|---|---|
| A | Trả văn bản thường | Văn bản cuối và trạng thái dừng xuất hiện |
| B | Buộc `echo_json` | Tên và tham số hợp lệ xuất hiện |
| C | Stream `echo_json` | Mảnh được ghép đúng một lần |
| D | Gọi hai tool đọc | Hai kết quả tương quan chính xác |
| E | Nhận một lỗi tool | Model sửa hoặc dừng sạch |
| F | Hủy giữa stream | Không có tool chạy muộn |

Dùng cùng schema và ý nghĩa request cho mọi ứng viên. Nếu giao thức native cần envelope khác, chỉ điều chỉnh biểu diễn wire.

## Thu event thô bên dưới SDK

Object SDK cấp cao tiện trong production nhưng có thể che lỗi di chuyển. Thêm debug transport ghi số thứ tự đơn điệu, response ID, output index, call ID, loại event và độ dài payload đã che dữ liệu nhạy cảm.

Tham số hàm trong stream tăng dần. Ghép chúng theo từng call và chờ event tham số cuối:

```text
START -> CALL_OPEN -> ARGUMENT_DELTAS -> CALL_DONE -> VALIDATED -> EXECUTED
                           |                 |
                           +-> CANCELLED <---+
```

Từ chối chuyển trạng thái ngược hoặc thực thi hai lần. Nếu kết nối mất sau `EXECUTED` nhưng trước khi model nhận kết quả, dùng idempotency key thay vì lặp thao tác ghi một cách mù quáng.

## Kiểm tra toàn bộ vòng đi-về của kết quả

Một tool call hợp lệ mới là nửa hợp đồng. Trả kết quả bằng đúng message hoặc item type của giao thức, sau đó yêu cầu model tạo câu trả lời cuối có dùng một field đã biết trong kết quả.

Kiểm tra kết quả lớn, rỗng, Unicode và lỗi có cấu trúc. Giới hạn kích thước trước khi đưa trở lại context. Việc di chuyển có thể trông thành công cho tới khi tool trả nội dung vượt giả định của adapter.

## So sánh bất biến thay vì câu chữ

Không đánh trượt suite vì hai model diễn đạt câu trả lời khác nhau. Hãy xác nhận:

* Đúng tên tool được chọn.
* Tham số vượt qua JSON Schema.
* Mỗi call ID là duy nhất và được tương quan.
* Mỗi tool chạy không hoặc một lần theo dự kiến.
* Vòng lặp dừng trong ngân sách lời gọi.
* Câu trả lời cuối sử dụng kết quả fixture.

Chỉ lưu snapshot riêng cho ứng viên để debug; giữ tiêu chí đạt trung lập với provider.

## Thêm trường hợp lỗi và hủy

Ngắt stream sau mảnh tham số đầu tiên, sau khi lời gọi hoàn tất và sau khi tool chạy. Chèn lỗi 429, timeout, JSON hỏng và tên tool không biết. Xác nhận client retry, tiếp tục an toàn hoặc dừng với lỗi hữu ích.

Lỗi nguy hiểm nhất là retry mơ hồ lặp lại một tool thay đổi trạng thái. Bắt buộc idempotency rõ ràng cho thao tác ghi.

## Biến suite thành release gate

Giữ smoke suite nhanh cho thay đổi cấu hình và ma trận đầy đủ cho nâng cấp SDK hoặc gateway. Lưu model, giao thức, base URL, hash schema, cờ streaming, phiên bản client và timestamp cùng kết quả.

Atlas Cloud hỗ trợ request LLM streaming và không streaming, đồng thời cho phép khám phá ứng viên trong một [danh mục model](https://www.atlascloud.ai/llm-models?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=test-streaming-tool-call-compatibility-before-changing-llm-apis). Chạy cùng gate cho từng model vì cùng điểm truy cập không đồng nghĩa cùng năng lực.

## Kết luận

Hãy kiểm tra việc đổi API LLM như một thay đổi giao thức có trạng thái. Bắt đầu bằng công cụ xác định, ghi event thô, chỉ ghép tham số khi hoàn tất, xác minh vòng trả kết quả và chèn retry cùng hủy. Chỉ đưa model mới vào dùng khi suite hợp đồng vượt qua, không phải khi một câu trả lời chat trông đúng.

## FAQ

### Bài kiểm tra tương thích đầu tiên nên bao gồm gì?

Bắt đầu với một request văn bản không streaming và một tool chỉ đọc bắt buộc để cô lập lỗi endpoint, xác thực, schema và cấu trúc response cơ bản.

### Tại sao phải ghi lại event streaming thô?

SDK helper có thể che giấu thứ tự event và khác biệt field. Event thô cho biết call ID, mảnh tham số, dấu hoàn tất, lỗi và usage thực sự đến như thế nào.

### Có thể so sánh provider bằng văn bản giống hệt nhau không?

Thường là không. Hãy so sánh các bất biến cấu trúc như lời gọi hợp lệ, field bắt buộc, số lần thực thi, trạng thái cuối và kết quả tác vụ.

### Nên kiểm tra tham số tool sai như thế nào?

Trả lỗi xác thực có cấu trúc và xác minh vòng lặp sửa hoặc dừng trong giới hạn lời gọi đã định mà không thực thi input không an toàn.

### Test suite có nên dùng tool ghi không?

Hãy bắt đầu với tool chỉ đọc xác định. Chỉ thêm fixture ghi trong sandbox sau khi ghép lời gọi, xác thực, khử trùng lặp và phục hồi lỗi đều vượt qua.

### Nên chạy kiểm tra tương thích bao lâu một lần?

Chạy smoke subset trước mỗi thay đổi model hoặc giao thức và chạy toàn bộ suite khi SDK, schema, gateway hoặc stream parser thay đổi.
