Llama-server Responses API báo cáo sai các kết quả bị cắt ngắn là đã hoàn tất
Một lỗi trong bản build b11753 của llama.cpp khiến endpoint /v1/responses đánh dấu các phản hồi bị cắt và các lệnh gọi công cụ không hợp lệ là đã hoàn tất, gây rủi ro hỏng dữ liệu cho các tác nhân AI tự host.
Bài được dịch tự động từ bản gốc tiếng Anh.
Một lỗi tương thích nghiêm trọng đã được xác định trong endpoint /v1/responses tương thích OpenAI của llama-server, ảnh hưởng đến các triển khai mô hình ngôn ngữ lớn tự host. Tính đến ngày 20 tháng 10 năm 2026, vấn đề này vẫn tồn tại trong bản build llama.cpp b11753, nơi máy chủ báo cáo sai các phản hồi bị cắt ngắn và các lệnh gọi công cụ chưa hoàn chỉnh là đã hoàn tất thành công. Sự khác biệt này đặt ra rủi ro cho các nhà phát triển xây dựng các tác nhân tự động phụ thuộc vào tín hiệu trạng thái chính xác để thực hiện các tác vụ tiếp theo.
Chuyện gì đã xảy ra
Vấn đề cốt lõi nằm ở cách llama-server chuyển đổi các trạng thái tạo sinh nội bộ sang định dạng Responses API. Khi một yêu cầu đạt đến giới hạn token được xác định bởi max_output_tokens, engine chat completion cơ sở nhận diện đúng lý do dừng là "length" (độ dài). Tuy nhiên, khi kết quả này được chuyển đổi thành đối tượng Responses API, máy chủ hard-code trường status thành "completed" (đã hoàn tất) bất kể đầu ra có kết thúc hay bị cắt ngang. Hành vi này ảnh hưởng đến cả kịch bản tạo văn bản tiêu chuẩn và kịch bản gọi hàm.
Trong quá trình kiểm thử với các mô hình như Gemma-3-1b-it và Qwen3-0.6B, các yêu cầu bị giới hạn ở tám token trả về trạng thái "completed" với chi tiết chưa hoàn chỉnh là null, mặc dù văn bản kết thúc giữa câu. Nghiêm trọng hơn, các lệnh gọi công cụ bị cắt ngắn bởi giới hạn token trả về các đối số JSON không hợp lệ—chẳng hạn như {"path": "/—nhưng vẫn được đánh dấu là các mục đã hoàn tất. Các client tin tưởng vào cờ trạng thái này có thể cố gắng phân tích cú pháp JSON hỏng hoặc thực thi các lệnh một phần, dẫn đến các lỗi im lặng hoặc lỗi không mong muốn trong môi trường production.
Chi tiết chính
- Lỗi ảnh hưởng đến bản build llama.cpp b11753 và cụ thể tác động đến endpoint
/v1/responses, trong khi/v1/chat/completionsbáo cáo đúngfinish_reason: "length". - Các đối số lệnh gọi công cụ bị cắt ngắn được trả về dưới dạng các mục
function_callhợp lệ với trạng thái "completed", mặc dù chứa JSON sai định dạng không thể phân tích cú pháp. - Các phản hồi streaming cũng không phát ra sự kiện
response.incomplete, thay vào đó kết thúc bằngresponse.completedvà bỏ qua tín hiệufunction_call_arguments.donedự kiến. - Chỉ số đáng tin cậy duy nhất để phát hiện việc cắt ngắn trong Responses API là kiểm tra xem
usage.output_tokenscó bằng vớimax_output_tokensđược yêu cầu hay không, mặc dù đây chỉ là heuristic chứ không phải trạng thái xác định. - Mã nguồn trong
tools/server/server-task.cppchứa bảy trường hợp mà status được hard-code thành "completed", không có logic để đọc lý do dừng cơ sở hoặc đặt status thành "incomplete". - Không có bản vá upstream hay pull request nào được merge cho issue ggml-org/llama.cpp#30773 tính đến ngày 20 tháng 10 năm 2026.
Bối cảnh
Responses API là một đặc tả mới hơn được thiết kế cho các tương tác giống tác nhân, cho phép các mô hình trả về đầu ra có cấu trúc bao gồm các bước suy luận và lệnh gọi công cụ. Llama-server triển khai điều này bằng cách chuyển đổi các yêu cầu Responses đầu vào thành các yêu cầu Chat Completions tiêu chuẩn bên trong. Mặc dù quy trình tạo sinh hoạt động đúng, lớp chuyển đổi thất bại trong việc ánh xạ finish_reason của chat completion trở lại các trường status và incomplete_details của Responses API. Việc chuyển đổi một chiều này làm mất đi các tín hiệu lỗi quan trọng, khiến các client không biết rằng mô hình đã không hoàn thành suy nghĩ hoặc lệnh của mình.
Đối với các nhà phát triển, điều này nhấn mạnh một cạm bẫy phổ biến trong các lớp tương thích: đảm bảo rằng các trạng thái lỗi và điều kiện biên được giữ nguyên qua các lần dịch API. Một trường status chỉ hữu ích nếu nó có thể phản ánh chính xác các kết quả tiêu cực. Trong trường hợp này, máy chủ ưu tiên trả về nội dung hơn là truyền thông mức độ hoàn chỉnh, giả định rằng hầu hết các phản hồi sẽ nằm trong giới hạn. Giả định này sụp đổ đối với các tác vụ phức tạp đòi hỏi ngữ cảnh dài hoặc thực thi công cụ chính xác.
Tại sao điều này quan trọng
Đối với các đội ngũ chạy các tác nhân AI tự host, lỗi này giới thiệu một khoảng trống độ tin cậy tinh vi nhưng nguy hiểm. Các hệ thống tự động thường dựa vào trường status để quyết định có tiến hành tác vụ hay không. Nếu một tác nhân nhận được trạng thái "completed" cho một đường dẫn file hoặc đoạn mã bị cắt ngắn, nó có thể cố gắng thực thi một lệnh một phần. Điều này có thể dẫn đến hỏng dữ liệu, triển khai thất bại hoặc lỗ hổng bảo mật nếu đầu vào một phần bị hiểu sai bởi các hệ thống tiếp theo. Rủi ro cao nhất đối với các mô hình nhỏ hoặc prompt phức tạp nơi giới hạn token thường xuyên bị chạm tới.
Hơn nữa, vấn đề này làm phức tạp hóa việc debug. Bởi vì máy chủ không báo cáo lỗi, nhật ký có thể hiển thị các hoàn tất thành công ngay cả khi đầu ra không sử dụng được. Các nhà phát triển có thể nhầm lẫn quy trách nhiệm cho khả năng suy luận của mô hình hoặc kỹ năng định dạng JSON, thay vì xác định việc cắt ngắn ở cấp độ hạ tầng. Sự hướng dẫn sai lệch này lãng phí thời gian kỹ thuật và có thể dẫn đến việc chuyển đổi mô hình không cần thiết hoặc các điều chỉnh prompt engineering không giải quyết được nguyên nhân gốc rễ.
Bạn có thể làm gì
- Triển khai xác thực phía client để coi bất kỳ phản hồi nào mà
usage.output_tokensbằngmax_output_tokenslà có khả năng bị cắt ngắn và xác minh tính toàn vẹn của đầu ra trước khi sử dụng. - Xác thực nghiêm ngặt tất cả các đối số lệnh gọi công cụ dưới dạng JSON trước khi thực thi; từ chối bất kỳ mục
function_callnào không phân tích cú pháp được, bất kể trạng thái được báo cáo. - Ưu tiên sử dụng endpoint
/v1/chat/completionscho các tác vụ quan trọng nếu kiến trúc ứng dụng của bạn cho phép, vì nó báo cáo đúngfinish_reason: "length"cho các đầu ra bị cắt ngắn. - Tăng giới hạn
max_output_tokenscho các workflow tác nhân để giảm tần suất cắt ngắn, đảm bảo mô hình có đủ không gian để hoàn thành suy luận phức tạp hoặc định nghĩa công cụ. - Chạy các script chẩn đoán như
check-llama-responses-status.shtrên triển khai của bạn để xác nhận xem phiên bản và cấu hình cụ thể của bạn có bị ảnh hưởng bởi hành vi status hard-code này hay không. - Theo dõi các repository upstream để tìm bản vá cho llama.cpp issue #30773, và cân nhắc đóng góp một bản vá ánh xạ lý do dừng của chat completion sang trường status của Responses API nếu bạn có khả năng.



