دقت tool call تو vLLM با constrained decoding به ۱۰۰٪ رسید
خلاصهٔ کاملتر
تیم Ubicloud تو این پست تعریف میکنه که وقتی Kimi K2.6 رو با vLLM نسخهٔ 0.28 سرو میکردن، فقط ۹۲ درصد tool callها با schema درست بیرون میومدن. یعنی از هر ۲۵ فراخوانی ابزار، دوتاش خراب بود. schema اینجا یعنی همون توضیح JSON که میگه یه ابزار چه پارامترهایی داره، از چه نوعی و کدومش اجباریه. وقتی فراخوانی با schema نخونه، ابزار اجرا نمیشه، پیام خطا context رو شلوغ میکنه و ایجنت مجبوره دوباره تلاش کنه که هم کیفیت رو پایین میاره هم هزینه رو بالا.
برای سنجیدن این موضوع، Moonshot AI بنچمارک K2VV ToolCall رو منتشر کرده که ۲۰۰۰ درخواست داره و دو چیز رو میسنجه: trigger similarity یعنی مدل کِی تصمیم میگیره ابزار صدا بزنه، و schema accuracy یعنی چند درصد فراخوانیها ساختار درست دارن. به گفتهٔ نویسندهها، دلیل خطا اینه که مدل فقط توکنها رو بر اساس احتمال انتخاب میکنه و type checker نداره. مثلاً ممکنه چون تو دادهٔ آموزشی دیده، بهجای web_search بنویسه search_web.
راهحل constrained decoding هست، یعنی موتور inference موقع تولید هر توکن، توکنهایی رو که به یه فراخوانی نامعتبر میرسن ماسک میکنه. vLLM این کارو با structural tagهای کتابخونهٔ XGrammar انجام میده. این تیکه از پیادهسازی XGrammar برای Kimi K2.6 نشون میده که بعد از اسم ابزار فقط یه عدد بهعنوان index قبوله و آرگومانها باید با JSON schema بخونن:
TagFormat(
begin=f"{TOOL_CALL_BEGIN_PREFIX}{name}{TOOL_CALL_SUFFIX}",
content=SequenceFormat(
elements=[
RegexFormat(pattern=r"\d+"),
ConstStringFormat(value=TOOL_CALL_ARGUMENT_BEGIN),
JSONSchemaFormat(json_schema=parameters, ...),
]
),
end=TOOL_CALL_END,
)با این کار درستی schema از «امیدواریم درست باشه» به یه تضمین زمان اجرا تبدیل میشه. مدل هنوز خودش توکن رو انتخاب میکنه، ولی فقط از بین گزینههای مجاز. نویسندهها میگن سربارش ناچیزه، چون XGrammar ماسکها رو از قبل حساب میکنه و روی GPU اعمالشون میکنه.
یه غافلگیری هم بود: بعد از اینکه vLLM تو نسخهٔ 0.25 این قابلیت رو اضافه کرد و Ubicloud از نسخهٔ اصلی استفاده کرد، دقت دوباره افتاد روی ۹۱ درصد. پیادهسازی مشکلی نداشت؛ vLLM رفتار پیشفرضش رو عوض کرده بود، چون روشن بودنش برای بعضی مدلها مشکل درست میکرد و با speculative decoding هم تداخل داشت. برای همین vLLM فلگ --tool-strict-level رو اضافه کرد که از نسخهٔ 0.31 در دسترسه.
Ubicloud چون فقط روی Kimi و DeepSeek تمرکز داره، این قابلیت رو روشن کرد و بعد از گرفتن ۱۰۰ درصد تو بنچمارک، بردش روی production. حرف آخر نویسندهها اینه که کیفیتی که از یه مدل میبینی فقط به خود مدل بستگی نداره؛ موتور inference و تنظیماتش هم به همون اندازه مهمه.
نکات کلیدی:
- Kimi K2.6 روی vLLM 0.28 فقط ۹۲ درصد tool callهای درست داشت.
- constrained decoding دقت schema رو تو بنچمارک K2VV ToolCall به ۱۰۰ درصد رسوند.
- vLLM این قابلیت رو پیشفرض خاموش کرده و با فلگ --tool-strict-level (نسخهٔ 0.31) روشن میشه.
- پیادهسازی با structural tagهای XGrammar انجام میشه و سربار خیلی کمی داره.
- برای مدلهایی مثل gpt-oss-20b، Qwen 3.6 و GLM 5.1 روشن کردنش مشکلساز گزارش شده.




