Галоўная / Артыкулы / Практычныя прытамулкі: Qwen3.8–27B як новы выбраны кодавальны агент з SGLang/vLLM.

Практычныя прытамулкі: Qwen3.8–27B як новы выбраны кодавальны агент з SGLang/vLLM.

Практычныя прыказкі: Qwen3.8–27B як новы выбраны кодавальны агент з SGLang/vLLM, а таксама контракты, перакрыццяі та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.

1233 слоў

У гэтым карыце парадоксу перадстаўляецца шлях ад сыр'ёў да рабочай системы для: Qwen3.8–27B як новага выбранага агента для кодавання з SGLang/vLLM і Claude. Акцэнт ставіцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый без неабяснення меты. У стадзіі агульнага відгледу неабходна практычна апісацыя вхідных дадзеных, адпаведальнага за крок і крэатарыяў выходу пры перамены коду. Аператары должны магчымае паўтарна запускаць крок з вядомага пункта контролю, не спрабоўваючы з'ясаваць схованы стан. Конфігурацыю трэба зберагчы за межамі коду прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцияў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь граф.

mkdir -p ~/.config/qwen38
cp "$(find ~/.cache/huggingface/hub/models--RadixArk--Qwen3.8-27B-NVFP4 -name chat_template.jinja | head -1)" ~/.config/qwen38/chat-template-sglang.jinja
Before:

    {%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}
    {%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}
        {{- raise_exception('Unexpected reasoning effort ' ~ reasoning_effort ~ '. Supported types are xhigh (default), medium, and low.') }}
    {%- endif %}

After:

{%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}
{%- if resolved_reasoning_effort in ('max', 'high') %}
    {%- set resolved_reasoning_effort = 'xhigh' %}
{%- endif %}
{%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}
    {{- raise_exception('Unexpected reasoning effort ' + resolved_reasoning_effort + '. Supported types are xhigh (default), medium, and low.') }}
{%- endif %}
Before:
        {%- if not loop.first %}
            {{- raise_exception('System message must be at the beginning.') }}
        {%- endif %}
After:
        {%- if not loop.first %}
            {{- '<|im_start|>user\n<system-reminder>\n' + content + '\n</system-reminder><|im_end|>' + '\n' }}
        {%- endif %}
#!/bin/bash

docker run --gpus all \
  --shm-size 32g \
  --rm \
  -p 8000:8000 \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  -v ~/.config/qwen38:/config \
  --ipc=host \
  lmsysorg/sglang:qwen38-27b \
  sglang serve \
    --trust-remote-code \
    --model-path RadixArk/Qwen3.8-27B-NVFP4 \
    --mem-fraction-static 0.5 \
    --attention-backend flashinfer \
    --chunked-prefill-size 8192 \
    --disable-prefill-cuda-graph \
    --reasoning-parser qwen3 \
    --tool-call-parser qwen3_coder \
    --speculative-algorithm DSPARK \
    --speculative-draft-model-path RadixArk/Qwen3.8-27B-DSpark \
    --chat-template /config/chat-template-sglang.jinja \
    --served-model-name local-spark-model \
    --mamba-full-memory-ratio 8.26 \
    --max-running-requests 8 \
    --language-only \
    --sleep-on-idle \
    --host 0.0.0.0 \
    --port 8000
hf download Inferact/Qwen3.8-27B-NVFP4
docker pull vllm/vllm-openai:v0.27.1
#!/bin/bash

docker run --gpus all \
      -v ~/.cache/huggingface:/root/.cache/huggingface \
      -v ~/.config/qwen38:/config \
      --env "HF_TOKEN=$HF_TOKEN" \
      -p 8000:8000 \
      --ipc=host \
      vllm/vllm-openai:v0.27.1 \
      --model Inferact/Qwen3.8-27B-NVFP4 \
      --tensor-parallel-size 1 \
      --enable-auto-tool-choice \
      --gpu-memory-utilization 0.8 \
      --max-model-len 262144 \
      --max-num-batched-tokens 8192 \
      --max-num-seqs 8 \
      --attention-backend flash_attn \
      --chat-template /config/chat-template-sglang.jinja \
      --tool-call-parser qwen3_coder \
      --reasoning-parser qwen3 \
      --load-format fastsafetensors \
      --enable-prefix-caching \
      --enable-chunked-prefill \
      --served-model-name 'local-spark-model' \
      --speculative-config '{"method":"mtp","num_speculative_tokens":3}' \
      --language-model-only
curl -fsSL https://claude.ai/install.sh | bash
export ANTHROPIC_BASE_URL=http://spark:8000
export ANTHROPIC_AUTH_TOKEN=dummy
export ANTHROPIC_MODEL=local-spark-model
From:
    --served-model-name local-spark-model \

To:
    --served-model-name claude \
From:
    --served-model-name local-spark-model \

To:
    --served-model-name local-spark-model claude \
ssh -N -L 8000:127.0.0.1:8000 spark

Практычны чэк-ліст

Этап перагляду канцэлекту праблемы працюе наяўней, калі яго спрыяваць як мерыемую величыну. Запісайце адна ідеальная версія, адзін прыклад неудачы і запіс пра атрыбуцыю назад, перш чым расширваць масштабы.

Запісвайце часы выканання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівае відображэння костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмовай среды ў спяльнаныя сераўры.

Задайце бюджет токеноў на адну партію і на адну сесію. Інструменты-агенты актыўна расширваюць контэкст; строгія ліміты не дазволяюць дэмам ператварыцца на неспакойныя рахункі.

Забезпечыце людзкую атрыбуцыю ў тых моментах, калі відбываецца выдатак грошэй або зміняюцыся даныя у працэйной среде. Працэс кампілявання не ўзроўнаважваеся з повнасцю бізнес-процэсаў.

Напісце кароткі посібнік: як зменяць клучы, як спрачыслаць чергу, як атрыбуцыяваць назад пасляльніе дадзеныя.

Лепшыя маленькія, тэставаныя елементы, чым велікія скрыпты. Калі якісь крок не выйшае, адказчыкам трэба быць чыстаючы, а не заплутанай лініяй обработкі.

Перш чым пераходзіць да наступнага крока, заморозьце версіі, зафіксавайце ідеальны транскрыпт для критычнага маршруту і паказвайце способы вярнення да пачатковага стану. У спільных средах неабходны ліміты частоты запуска, перакананні ў належнасці і чыстае адначасовае кераванне секретнымі даннымі. Лепшая надзеяна надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.

Прыметка для f809a9c5f39a: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенаў на кожную сесію і зберагачыце транскрыпты рядом з фіксатрамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порупачнымі.

Для стадіі 0 пры практыцы змецчэння неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес.

Дзеянне змецчэння 0/876: вымерыць час выканання, класію адказаў і колькасць выкарыстоўваных токенав для гэтай прыметкі, а пасля вырашыць, чы робіцца змяна на адной пазухе фіксаванага набора пытанняў, а не на адной лічбе прыкладаў.

Калі працуеце над першым этапам зміцнення, спачатку запісайте умовы кантракту: неабяцковыя даны, сігнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список дапамагае заліцварваць будучыя змены коду. Празначайце час выканання задачі, а таксама вартасць токена чыя запиту празмаўляючы з рэзультатамі функцыйнасці. Відразувыя даны пра вартасць запобегаюць неспакоўным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя среды.

Дзеянне зміцнення 1/876: замерайце час выканання, класыя ошибакі і вартасць викорыстоўвання токена для гэтага пункту, а потым выберайце, чы робіць змену на адной пазначанай базе пытанняў, а не на адной толькі прыватнай інформацыі.

Этап зміцнення 2 працюе лепей, калі яго спрыягчваць як меравальную плошчу. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Дакументавайце як успішны, так і вярнэльны шляхы. Перапрыбуткі, людзкія контралі і обработка неканальных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.

Дзеянне паўжасткі 2/876: звярніце увагу на час выканання, класы паказчыкаў і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшацься застаўляць змяну.

Для 3-й стадзіі паўжасткі неабходна перад змянай коду чытко апісаць вхідныя даны, адпаведальнага за выкананне крока і критэрыяы завершэння. Аперацыйныя працавнікі должны магчыма было перазапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Штую стадзію трэба спрыятаць як кантрактом межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвіце всі неабходныя элементы, апісаце критэрыяы успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння.

Дзеянне паўжасткі 3/876: звярніце увагу на час выканання, класы паказчыкаў і колькасць токенаў, якія былі выкарыстаны для гэтага зазначэння, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшацься застаўляць змяну.

Калі працюеце над 4-й стадзіяю практыкы забезпечэння безпекі, спачатку запісайце умовы кантракту: неабяжлівыя данні, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список контроля дапамагае заліцварыць пазнейшыя змены ў кодзе. Зберагаюце канфігурацыю пазнаўсільва ад коду прыемліка. Файлы сераўнавання, хранальнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры.

Дзялённе 4/876 практыкы забезпечэння безпекі: вымерайце час выканання, класыя ошибакі і колькасць викорыстоўваных токенаў для гэтай стадзіяй, а пасля выберайце, чы хацеце застаўіць змену, адпаведна фіксаванаму набору пытанняў, а не толькі індывідуальным спостарожэнням.