~/tools / Yerel LLM'i kendi sunucunuzda çalıştırın / Ollama OpenAI Converter

Ollama OpenAI Converter — Sohbet isteklerini ve yanıtlarını Ollama /api/chat ile /v1/chat/completions arasında dönüştürün

Bir sohbet isteğini Ollama'nın yerel /api/chat uç noktası ile OpenAI uyumlu /v1/chat/completions uç noktası arasında her iki yönde dönüştürün ve bir /api/chat yanıtını /v1/chat/completions'ın döndürdüğü yanıta çevirin. Dönüştürme Ollama'nın kendi kaynak kodunu izler ve araç, yeniden adlandırılan, düşürülen ya da karşılığı olmayan her alanı listeler. Hiçbir veri tarayıcınızdan çıkmaz.

Yön

Şu olarak okundu: OpenAI uyumlu bir istek (/v1/chat/completions).

  • Ollama bu alanları okumaz ve düşürür: tool_choice

curl

localhost:11434 üzerindeki Ollama'ya gönderir. Ollama başka bir yerde çalışıyorsa adresi değiştirin.

curl http://localhost:11434/api/chat -d '{"model":"qwen2.5:7b","messages":[{"role":"system","content":"Answer in one sentence."},{"role":"user","content":"What is the weather in Toronto?"},{"role":"assistant","content":"","tool_calls":[{"id":"call_1","function":{"name":"get_weather","arguments":{"city":"Toronto"}}}]},{"role":"tool","content":"11 degrees, cloudy","tool_name":"get_weather","tool_call_id":"call_1"}],"stream":false,"options":{"stop":["END"],"num_predict":200,"temperature":0.2},"tools":[{"type":"function","function":{"name":"get_weather","description":"Weather for a city","parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}}]}'

Ollama /api/chat isteği

{
  "model": "qwen2.5:7b",
  "messages": [
    {
      "role": "system",
      "content": "Answer in one sentence."
    },
    {
      "role": "user",
      "content": "What is the weather in Toronto?"
    },
    {
      "role": "assistant",
      "content": "",
      "tool_calls": [
        {
          "id": "call_1",
          "function": {
            "name": "get_weather",
            "arguments": {
              "city": "Toronto"
            }
          }
        }
      ]
    },
    {
      "role": "tool",
      "content": "11 degrees, cloudy",
      "tool_name": "get_weather",
      "tool_call_id": "call_1"
    }
  ],
  "stream": false,
  "options": {
    "stop": [
      "END"
    ],
    "num_predict": 200,
    "temperature": 0.2
  },
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Weather for a city",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string"
            }
          },
          "required": [
            "city"
          ]
        }
      }
    }
  ]
}

Dönüştürülen alanlar

NeredenNereye
tool_choiceaktarılmadı
stopoptions.stop
max_tokensoptions.num_predict
temperatureoptions.temperature
streamstream(ayarlanmadı, bu yüzden özgün uç noktanın varsayılanı)

/api/chat varsayılan olarak akış yapar, /v1/chat/completions yapmaz. Dönüştürülen istek, özgün gibi davransın diye her zaman stream ayarlar.

OpenAI uyumlu API'de bağlam uzunluğu (num_ctx) için bir alan yoktur. Ollama'nın belgeleri, bir Modelfile içinde PARAMETER num_ctx ile bir model oluşturmayı ve onu bu adla çağırmayı önerir.

Dönüştürme Ollama v0.40.14'ü izler. Önceki sürümlerde OpenAI uyumlu uç nokta, bir istek temperature ve top_p göndermediğinde bunları 1.0 olarak ayarlıyordu ve boş bir content dizisi içeren bir asistan mesajının araç çağrıları önceki mesaja ekleniyordu.

Dönüştürme, Ollama'nın kaynak kodundan (v0.40.14, openai/openai.go) ve OpenAI uyumluluğu sayfasından alınmıştır; 2026-11-06 tarihinde Ollama 0.40.11 ile denetlenmiştir. Ollama: OpenAI uyumluluğu

Her şey tarayıcınızda yapılır. Araç hiçbir yere bağlanmaz.

Ollama sohbet isteklerini iki uç noktada yanıtlar: yerel /api/chat ve OpenAI uyumlu /v1/chat/completions. İkincisi istekleri kendisi çalıştırmaz. Ollama'nın kaynak kodunda (openai/openai.go) her istek önce bir /api/chat isteğine dönüştürülür ve yanıt geri dönüştürülür. Bu araç aynı dönüştürmeyi tarayıcınızda yapar. Bir istek gövdesini ya da bir yanıtı yapıştırın, araç hangisi olduğunu algılar. OpenAI biçiminden Ollama'ya: max_tokens options.num_predict olur, tek bir stop dizesi liste olur, temperature, top_p, seed ve cezalar options içine taşınır, response_format format olur ("json" ya da json_schema.schema içindeki şema), reasoning_effort think olur (none false olur, minimal low olur, xhigh ve ultra max olur), araç çağrılarının argümanları bir JSON dizesinden nesneye dönüşür ve bir araç mesajı, tool_call_id değerinden bulunan işlev adını alır. content dizisinin her parçası ayrı bir mesaj olur ve görseller JPEG, PNG ya da WebP görsellerin base64 veri URL'leri olmalıdır; görsel URL'leri reddedilir. tool_choice, n, user, logit_bias ve max_completion_tokens gibi Ollama'nın kodunda bulunmayan alanlar hata verilmeden düşürülür. Ollama 0.40.11 üzerindeki testimizde, max_completion_tokens 3 içeren bir istek yine de uzun bir yanıt döndürdü, çünkü Ollama yalnızca max_tokens okur. Diğer yönde, num_ctx, top_k ve min_p gibi OpenAI karşılığı olmayan options değerleri yazılmak yerine listelenir. Bir yanıtta done_reason finish_reason olur (model bir araç çağırdıysa stop tool_calls olur), prompt_eval_count ve eval_count usage olur, thinking reasoning olur ve süreler düşürülür. Ollama id değerini chatcmpl- ve ardından rastgele bir sayı olarak yazar; araç chatcmpl-0 yazar. Dönüştürmeyi, her isteğin iki biçimini de modelin göreceği istemi döndüren _debug_render_only hata ayıklama alanıyla Ollama 0.40.11'e gönderip iki istemi karşılaştırarak ve dönüştürülmüş yanıtları /v1/chat/completions'ın gerçek yanıtlarıyla karşılaştırarak denetledik.

Bu aracın temel mantığı MIT lisansıyla açık kaynaktır. github.com/seigo5555/toolkitbox-lib/src/ollama-openai.ts

Kullanım örnekleri

  • OpenAI SDK için yazılmış kodu alan adlarını tahmin etmeden Ollama'nın yerel API'sine ya da tersi yönde taşımak
  • /v1/chat/completions'a gönderdiğiniz bir alanın neden etkisiz olduğunu bulmak
  • OpenAI yanıtları bekleyen bir istemcinin Ollama'dan ne alacağını görmek

Nasıl kullanılır

  1. Bir /v1/chat/completions ya da /api/chat istek gövdesini veya stream false olarak gönderilmiş bir /api/chat yanıtını yapıştırın.
  2. Yönü otomatik bırakın ya da araç hangi biçimi yapıştırdığınızı anlayamazsa kendiniz seçin.
  3. Dönüştürülmüş JSON'u ya da curl komutunu kopyalayın, uyarıları ve dönüştürülen alanlar tablosunu okuyun.

SSS

Dönüştürülen istek neden her zaman stream ayarlıyor?

/api/chat varsayılan olarak akış yapar, /v1/chat/completions yapmaz. Özgün istek stream ayarlamadıysa dönüştürülen istek, ikisi de aynı davransın diye özgün uç noktanın varsayılanını alır.

OpenAI uyumlu API üzerinden bağlam uzunluğunu nasıl ayarlarım?

Bunun için bir alan yoktur. Ollama'nın belgeleri, bir Modelfile içinde PARAMETER num_ctx ile bir model oluşturmayı ve API'yi o model adıyla çağırmayı önerir. Araç, options.num_ctx değerini karşılığı olmayan alan olarak listeler.

Bir alan aktarılmadı olarak işaretli. Ollama isteği reddeder mi?

Hayır. Ollama kodunda bulunmayan alanları okumaz ve düşürür. Ollama 0.40.11 üzerindeki testimizde tool_choice, n, user, logit_bias ve max_completion_tokens içeren bir istek hata verilmeden kabul edildi ve max_completion_tokens yanıtın uzunluğunu sınırlamadı.

Ollama v0.40.14'te ne değişti?

v0.40.14'ten önce OpenAI uyumlu uç nokta, bir istek temperature ve top_p göndermediğinde bunları 1.0 olarak ayarlıyordu. v0.40.14'ten itibaren, /api/chat'te olduğu gibi modelin kendi varsayılanları geçerlidir. Boş bir content dizisi ve araç çağrıları içeren bir asistan mesajı da farklı işleniyordu: 0.40.11 üzerindeki testimizde araç çağrıları önceki mesaja ekleniyordu. Araç v0.40.14'ü izler.

Neden bir OpenAI yanıtı yapıştıramıyorum?

Ollama yerel yanıtları OpenAI biçimine dönüştürür, tersini asla yapmaz; bu yüzden kopyalanacak bir dönüştürme yoktur. Bunun yerine /api/chat yanıtını yapıştırın.

Verilerim bir yere gönderiliyor mu?

Hayır. Dönüştürme tarayıcınızda çalışır. curl komutu yalnızca sizin çalıştıracağınız bir metindir.

İlgili makaleler

İlgili