~/tools / Ein lokales LLM auf dem eigenen Server / Ollama OpenAI Converter
Ollama OpenAI Converter — Chat-Anfragen und -Antworten zwischen Ollama /api/chat und /v1/chat/completions umwandeln
Wandeln Sie eine Chat-Anfrage zwischen dem nativen /api/chat von Ollama und dem OpenAI-kompatiblen /v1/chat/completions um, in beide Richtungen, und machen Sie aus einer Antwort von /api/chat die Antwort, die /v1/chat/completions zurückgibt. Die Umwandlung folgt dem Quellcode von Ollama, und das Tool listet jedes Feld auf, das umbenannt wird, wegfällt oder keine Entsprechung hat. Nichts verlässt Ihren Browser.
Gelesen als eine OpenAI-kompatible Anfrage (/v1/chat/completions).
- Ollama liest diese Felder nicht und verwirft sie: tool_choice
curl
Sendet an Ollama auf localhost:11434. Ändern Sie die Adresse, wenn Ollama woanders läuft.
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-Anfrage an /api/chat
{
"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"
]
}
}
}
]
}Umgewandelte Felder
| Von | Nach |
|---|---|
| tool_choice | nicht übernommen |
| stop | options.stop |
| max_tokens | options.num_predict |
| temperature | options.temperature |
| stream | stream(nicht gesetzt, daher der Standardwert des ursprünglichen Endpunkts) |
/api/chat streamt standardmäßig, /v1/chat/completions nicht. Die umgewandelte Anfrage setzt stream immer, damit sie sich wie die ursprüngliche verhält.
Die OpenAI-kompatible API hat kein Feld für die Kontextlänge (num_ctx). Die Dokumentation von Ollama schlägt vor, ein Modell mit PARAMETER num_ctx in einem Modelfile zu erstellen und es unter diesem Namen aufzurufen.
Die Umwandlung folgt Ollama v0.40.14. In früheren Versionen setzte der OpenAI-kompatible Endpunkt temperature und top_p auf 1.0, wenn eine Anfrage sie nicht mitsendete, und die Tool-Aufrufe einer Assistenten-Nachricht mit einem leeren content-Array wurden an die vorherige Nachricht angehängt.
Umwandlung nach dem Quellcode von Ollama (v0.40.14, openai/openai.go) und der Seite zur OpenAI-Kompatibilität, am 2026-11-06 mit Ollama 0.40.11 geprüft. Ollama: OpenAI-Kompatibilität
Alles geschieht in Ihrem Browser. Das Tool verbindet sich mit nichts.
Ollama beantwortet Chat-Anfragen an zwei Endpunkten: dem nativen /api/chat und dem OpenAI-kompatiblen /v1/chat/completions. Der zweite führt Anfragen nicht selbst aus. Im Quellcode von Ollama (openai/openai.go) wird jede Anfrage zuerst in eine Anfrage an /api/chat umgewandelt, und die Antwort wird zurückgewandelt. Dieses Tool führt dieselbe Umwandlung in Ihrem Browser aus. Fügen Sie einen Anfrage-Body oder eine Antwort ein, und das Tool erkennt, um welche Form es sich handelt. Von der OpenAI-Form zu Ollama: max_tokens wird zu options.num_predict, ein einzelner stop-String wird zu einer Liste, temperature, top_p, seed und die Penalties wandern in options, response_format wird zu format ("json" oder das Schema aus json_schema.schema), reasoning_effort wird zu think (none wird zu false, minimal wird zu low, xhigh und ultra werden zu max), die Argumente von Tool-Aufrufen wechseln von einem JSON-String zu einem Objekt, und eine Tool-Nachricht erhält den Funktionsnamen, der über ihre tool_call_id nachgeschlagen wird. Jeder Teil eines content-Arrays wird zu einer eigenen Nachricht, und Bilder müssen base64-Daten-URLs von JPEG-, PNG- oder WebP-Bildern sein; Bild-URLs werden abgelehnt. Felder, die nicht im Code von Ollama vorkommen, etwa tool_choice, n, user, logit_bias und max_completion_tokens, werden ohne Fehler verworfen. In unserem Test mit Ollama 0.40.11 lieferte eine Anfrage mit max_completion_tokens 3 trotzdem eine lange Antwort, weil Ollama nur max_tokens liest. In der anderen Richtung werden options ohne OpenAI-Entsprechung, etwa num_ctx, top_k und min_p, aufgelistet statt geschrieben. Bei einer Antwort wird done_reason zu finish_reason (stop wird zu tool_calls, wenn das Modell ein Tool aufgerufen hat), prompt_eval_count und eval_count werden zu usage, thinking wird zu reasoning, und die Zeitdauern entfallen. Ollama schreibt die id als chatcmpl- gefolgt von einer Zufallszahl; das Tool schreibt chatcmpl-0. Wir haben die Umwandlung geprüft, indem wir beide Formen jeder Anfrage mit dem Debug-Feld _debug_render_only an Ollama 0.40.11 gesendet haben, das den Prompt zurückgibt, den das Modell sehen würde, und die beiden Prompts verglichen haben, sowie indem wir umgewandelte Antworten mit den echten Antworten von /v1/chat/completions verglichen haben.
Die Kernlogik dieses Tools ist Open Source unter der MIT-Lizenz. github.com/seigo5555/toolkitbox-lib/src/ollama-openai.ts
Anwendungsfälle
- Code, der für das OpenAI SDK geschrieben wurde, zur nativen API von Ollama übertragen oder umgekehrt, ohne die Feldnamen zu raten
- Herausfinden, warum ein Feld, das Sie an /v1/chat/completions senden, keine Wirkung hat
- Sehen, was ein Client, der OpenAI-Antworten erwartet, von Ollama erhält
Verwendung
- Fügen Sie den Body einer Anfrage an /v1/chat/completions oder /api/chat ein oder eine Antwort von /api/chat, die mit stream auf false gesendet wurde.
- Lassen Sie die Richtung auf automatisch, oder wählen Sie sie selbst, wenn das Tool nicht erkennen kann, welche Form Sie eingefügt haben.
- Kopieren Sie das umgewandelte JSON oder den curl-Befehl und lesen Sie die Warnungen und die Tabelle der umgewandelten Felder.
FAQ
Warum setzt die umgewandelte Anfrage immer stream?
/api/chat streamt standardmäßig, /v1/chat/completions nicht. Wenn die ursprüngliche Anfrage stream nicht gesetzt hat, erhält die umgewandelte den Standardwert des ursprünglichen Endpunkts, damit sich beide gleich verhalten.
Wie setze ich die Kontextlänge über die OpenAI-kompatible API?
Dafür gibt es kein Feld. Die Dokumentation von Ollama schlägt vor, ein Modell mit PARAMETER num_ctx in einem Modelfile zu erstellen und die API mit diesem Modellnamen aufzurufen. Das Tool führt options.num_ctx als Feld ohne Entsprechung auf.
Ein Feld ist als nicht übernommen markiert. Lehnt Ollama die Anfrage ab?
Nein. Ollama liest Felder, die nicht in seinem Code vorkommen, nicht und verwirft sie. In unserem Test mit Ollama 0.40.11 wurde eine Anfrage mit tool_choice, n, user, logit_bias und max_completion_tokens ohne Fehler angenommen, und max_completion_tokens begrenzte die Länge der Antwort nicht.
Was hat sich in Ollama v0.40.14 geändert?
Vor v0.40.14 setzte der OpenAI-kompatible Endpunkt temperature und top_p auf 1.0, wenn eine Anfrage sie nicht mitsendete. Ab v0.40.14 gelten die eigenen Standardwerte des Modells, wie bei /api/chat. Auch eine Assistenten-Nachricht mit einem leeren content-Array und Tool-Aufrufen wurde anders behandelt: In unserem Test mit 0.40.11 wurden ihre Tool-Aufrufe an die vorherige Nachricht angehängt. Das Tool folgt v0.40.14.
Warum kann ich keine OpenAI-Antwort einfügen?
Ollama wandelt native Antworten in die OpenAI-Form um, nie umgekehrt, deshalb gibt es keine Umwandlung zum Nachbauen. Fügen Sie stattdessen die Antwort von /api/chat ein.
Werden meine Daten irgendwohin gesendet?
Nein. Die Umwandlung läuft in Ihrem Browser. Der curl-Befehl ist nur Text, den Sie selbst ausführen.
Passende Artikel
- Ein lokales Modell aus dem eigenen Code aufrufen: Structured Outputs und die OpenAI-kompatible API in OllamaDie Ausgabe eines lokalen Modells mit einem JSON Schema einschränken und Ollama aus Clients im OpenAI-Stil aufrufen: was die offizielle Dokumentation sagt und was nicht unterstützt wird.
- Den Arbeitsspeicher von Ollama auf einem kleinen VPS im Blick behaltenSehen Sie, was Ollama im Arbeitsspeicher hält, wie lange es dort bleibt und welche Einstellungen das ändern: ollama ps, keep_alive und die Grenzwerte, nach den offiziellen FAQ.
- Dify mit Ollama auf Ihrem eigenen VPS verbindenBetreiben Sie Dify auf Ihrem eigenen VPS und nutzen Sie Ollama als Modell: Installation, die Plugin-Felder, das Adressproblem in Docker und Embeddings, nach der offiziellen Dokumentation.