Providers

vLLM

vLLM, açık kaynaklı (ve bazı özel) modelleri OpenAI uyumlu bir HTTP API üzerinden sunabilir. OpenClaw, openai-completions API'sini kullanarak vLLM'ye bağlanır.

OpenClaw, VLLM_API_KEY ile dahil olduğunuzda (sunucunuz kimlik doğrulamayı zorunlu tutmuyorsa herhangi bir değer çalışır) ve açık bir models.providers.vllm girdisi tanımlamadığınızda vLLM'deki kullanılabilir modelleri de otomatik keşfedebilir.

OpenClaw, vllm öğesini akışlı kullanım muhasebesini destekleyen yerel bir OpenAI uyumlu sağlayıcı olarak ele alır; böylece durum/bağlam token sayıları stream_options.include_usage yanıtlarından güncellenebilir.

Özellik Değer
Sağlayıcı kimliği vllm
API openai-completions (OpenAI uyumlu)
Kimlik doğrulama VLLM_API_KEY ortam değişkeni
Varsayılan temel URL http://127.0.0.1:8000/v1

Başlarken

  • OpenAI uyumlu bir sunucuyla vLLM'yi başlatın

    Temel URL'niz /v1 uç noktalarını sunmalıdır (ör. /v1/models, /v1/chat/completions). vLLM genellikle şurada çalışır:

    http://127.0.0.1:8000/v1
    
  • API anahtarı ortam değişkenini ayarlayın

    Sunucunuz kimlik doğrulamayı zorunlu tutmuyorsa herhangi bir değer çalışır:

    export VLLM_API_KEY="vllm-local"
    
  • Bir model seçin

    Kendi vLLM model kimliklerinizden biriyle değiştirin:

    {
      agents: {
        defaults: {
          model: { primary: "vllm/your-model-id" },
        },
      },
    }
    
  • Modelin kullanılabilir olduğunu doğrulayın

    openclaw models list --provider vllm
    
  • Model keşfi (örtük sağlayıcı)

    VLLM_API_KEY ayarlandığında (veya bir kimlik doğrulama profili mevcut olduğunda) ve models.providers.vllm tanımlamadığınızda, OpenClaw şunu sorgular:

    GET http://127.0.0.1:8000/v1/models
    

    ve döndürülen kimlikleri model girdilerine dönüştürür.

    Açık yapılandırma (elle modeller)

    Açık yapılandırmayı şu durumlarda kullanın:

    • vLLM farklı bir ana makine veya bağlantı noktasında çalışıyorsa
    • contextWindow veya maxTokens değerlerini sabitlemek istiyorsanız
    • Sunucunuz gerçek bir API anahtarı gerektiriyorsa (veya üstbilgileri kontrol etmek istiyorsanız)
    • Güvenilir bir loopback, LAN veya Tailscale vLLM uç noktasına bağlanıyorsanız
    {
      models: {
        providers: {
          vllm: {
            baseUrl: "http://127.0.0.1:8000/v1",
            apiKey: "${VLLM_API_KEY}",
            api: "openai-completions",
            request: { allowPrivateNetwork: true },
            timeoutSeconds: 300, // Optional: extend connect/header/body/request timeout for slow local models
            models: [
              {
                id: "your-model-id",
                name: "Local vLLM Model",
                reasoning: false,
                input: ["text"],
                cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
                contextWindow: 128000,
                maxTokens: 8192,
              },
            ],
          },
        },
      },
    }
    

    Gelişmiş yapılandırma

    Proxy tarzı davranış

    vLLM, yerel bir OpenAI uç noktası değil, proxy tarzı OpenAI uyumlu bir /v1 arka ucu olarak ele alınır. Bunun anlamı:

    Davranış Uygulandı mı?
    Yerel OpenAI istek şekillendirmesi Hayır
    service_tier Gönderilmez
    Responses store Gönderilmez
    İstem önbelleği ipuçları Gönderilmez
    OpenAI reasoning uyumluluğu yük şekillendirmesi Uygulanmaz
    Gizli OpenClaw atıf üstbilgileri Özel temel URL'lerde enjekte edilmez
    Qwen düşünme kontrolleri

    vLLM üzerinden sunulan Qwen modelleri için, sunucu Qwen chat-template kwargs bekliyorsa model girdisinde params.qwenThinkingFormat: "chat-template" ayarlayın. OpenClaw, /think off öğesini şuna eşler:

    {
      "chat_template_kwargs": {
        "enable_thinking": false,
        "preserve_thinking": true
      }
    }
    

    off olmayan düşünme seviyeleri enable_thinking: true gönderir. Uç noktanız bunun yerine DashScope tarzı üst düzey bayraklar bekliyorsa, istek kökünde enable_thinking göndermek için params.qwenThinkingFormat: "top-level" kullanın. Snake-case params.qwen_thinking_format da kabul edilir.

    Nemotron 3 düşünme kontrolleri

    vLLM/Nemotron 3, reasoning'in gizli reasoning olarak mı yoksa görünür yanıt metni olarak mı döndürüleceğini kontrol etmek için chat-template kwargs kullanabilir. Bir OpenClaw oturumu düşünme kapalıyken vllm/nemotron-3-* kullandığında, paketle gelen vLLM Plugin'i şunu gönderir:

    {
      "chat_template_kwargs": {
        "enable_thinking": false,
        "force_nonempty_content": true
      }
    }
    

    Bu değerleri özelleştirmek için model params altında chat_template_kwargs ayarlayın. Ayrıca params.extra_body.chat_template_kwargs ayarlarsanız, extra_body son istek gövdesi geçersiz kılması olduğu için son öncelik o değerde olur.

    {
      agents: {
        defaults: {
          models: {
            "vllm/nemotron-3-super": {
              params: {
                chat_template_kwargs: {
                  enable_thinking: false,
                  force_nonempty_content: true,
                },
              },
            },
          },
        },
      },
    }
    
    Qwen araç çağrıları metin olarak görünür

    Önce vLLM'nin model için doğru araç çağrısı ayrıştırıcısı ve chat template ile başlatıldığından emin olun. Örneğin vLLM, Qwen2.5 modelleri için hermes ve Qwen3-Coder modelleri için qwen3_xml belgeler.

    Belirtiler:

    • Skills veya araçlar hiç çalışmaz
    • asistan {"name":"read","arguments":...} gibi ham JSON/XML yazdırır
    • OpenClaw tool_choice: "auto" gönderdiğinde vLLM boş bir tool_calls dizisi döndürür

    Bazı Qwen/vLLM kombinasyonları, yapılandırılmış araç çağrılarını yalnızca istek tool_choice: "required" kullandığında döndürür. Bu model girdileri için OpenAI uyumlu istek alanını params.extra_body ile zorlayın:

    {
      agents: {
        defaults: {
          models: {
            "vllm/Qwen-Qwen2.5-Coder-32B-Instruct": {
              params: {
                extra_body: {
                  tool_choice: "required",
                },
              },
            },
          },
        },
      },
    }
    

    Qwen-Qwen2.5-Coder-32B-Instruct değerini şunun döndürdüğü tam kimlikle değiştirin:

    openclaw models list --provider vllm
    

    Aynı geçersiz kılmayı CLI'dan uygulayabilirsiniz:

    openclaw config set agents.defaults.models '{"vllm/Qwen-Qwen2.5-Coder-32B-Instruct":{"params":{"extra_body":{"tool_choice":"required"}}}}' --strict-json --merge
    

    Bu, isteğe bağlı bir uyumluluk geçici çözümüdür. Araçlar içeren her model dönüşünün bir araç çağrısı gerektirmesine neden olur; bu yüzden yalnızca bu davranışın kabul edilebilir olduğu özel bir yerel model girdisi için kullanın. Tüm vLLM modelleri için genel varsayılan olarak kullanmayın ve rastgele asistan metnini körlemesine çalıştırılabilir araç çağrılarına dönüştüren bir proxy kullanmayın.

    Özel temel URL

    vLLM sunucunuz varsayılan olmayan bir ana makine veya bağlantı noktasında çalışıyorsa, açık sağlayıcı yapılandırmasında baseUrl ayarlayın:

    {
      models: {
        providers: {
          vllm: {
            baseUrl: "http://192.168.1.50:9000/v1",
            apiKey: "${VLLM_API_KEY}",
            api: "openai-completions",
            request: { allowPrivateNetwork: true },
            timeoutSeconds: 300,
            models: [
              {
                id: "my-custom-model",
                name: "Remote vLLM Model",
                reasoning: false,
                input: ["text"],
                contextWindow: 64000,
                maxTokens: 4096,
              },
            ],
          },
        },
      },
    }
    

    Sorun giderme

    Yavaş ilk yanıt veya uzak sunucu zaman aşımı

    Büyük yerel modeller, uzak LAN ana makineleri veya tailnet bağlantıları için sağlayıcı kapsamlı bir istek zaman aşımı ayarlayın:

    {
      models: {
        providers: {
          vllm: {
            baseUrl: "http://192.168.1.50:8000/v1",
            apiKey: "${VLLM_API_KEY}",
            api: "openai-completions",
            request: { allowPrivateNetwork: true },
            timeoutSeconds: 300,
            models: [{ id: "your-model-id", name: "Local vLLM Model" }],
          },
        },
      },
    }
    

    timeoutSeconds, bağlantı kurulumu, yanıt üstbilgileri, gövde akışı ve toplam korumalı fetch iptali dahil olmak üzere yalnızca vLLM model HTTP isteklerine uygulanır. Tüm ajan çalışmasını kontrol eden agents.defaults.timeoutSeconds değerini artırmadan önce bunu tercih edin.

    Sunucuya ulaşılamıyor

    vLLM sunucusunun çalıştığını ve erişilebilir olduğunu kontrol edin:

    curl http://127.0.0.1:8000/v1/models
    

    Bir bağlantı hatası görürseniz ana makineyi, bağlantı noktasını ve vLLM'nin OpenAI uyumlu sunucu moduyla başlatıldığını doğrulayın. Açık loopback, LAN veya Tailscale uç noktaları için ayrıca models.providers.vllm.request.allowPrivateNetwork: true ayarlayın; sağlayıcı açıkça güvenilir olarak belirtilmedikçe sağlayıcı istekleri varsayılan olarak özel ağ URL'lerini engeller.

    İsteklerde kimlik doğrulama hataları

    İstekler kimlik doğrulama hatalarıyla başarısız olursa, sunucu yapılandırmanızla eşleşen gerçek bir VLLM_API_KEY ayarlayın veya sağlayıcıyı models.providers.vllm altında açıkça yapılandırın.

    Hiçbir model keşfedilmedi

    Otomatik keşif, VLLM_API_KEY değerinin ayarlanmış olmasını ve açık bir models.providers.vllm yapılandırma girdisi olmamasını gerektirir. Sağlayıcıyı elle tanımladıysanız OpenClaw keşfi atlar ve yalnızca bildirdiğiniz modelleri kullanır.

    Araçlar ham metin olarak işleniyor

    Bir Qwen modeli bir skill çalıştırmak yerine JSON/XML araç söz dizimini yazdırıyorsa, yukarıdaki Gelişmiş yapılandırma bölümündeki Qwen yönlendirmesini kontrol edin. Olağan çözüm şudur:

    • vLLM'yi o model için doğru ayrıştırıcı/şablonla başlatın
    • tam model kimliğini openclaw models list --provider vllm ile doğrulayın
    • yalnızca tool_choice: "auto" hâlâ boş veya yalnızca metin araç çağrıları döndürüyorsa özel bir model başına params.extra_body.tool_choice: "required" geçersiz kılması ekleyin

    İlgili