Integrera Ollama med Python: Exempel på REST API och Python-klient
+ Specifika exempel med hjälp av tänkande LLMs
I detta inlägg kommer vi att utforska två sätt att ansluta din Python-applikation till Ollama: 1. Via HTTP REST API; 2. Via den officiella Ollama Python-biblioteket.
Vi kommer att täcka både chatt och generera anrop, och sedan diskutera hur man effektivt använder “tänkande modeller”.

Ollama har snabbt blivit en av de mest bekväma sätten att köra stora språkmodeller (LLMs) lokalt. För att se hur Ollama jämförs med vLLM, Docker Model Runner, LocalAI och molntillhandtagare — inklusive när du ska välja varje — se LLM Hosting: Lokalt, självvärddat & Molninfrastruktur jämförd. Med dess enkla gränssnitt och stöd för populära öppna modeller som Llama 3, Mistral, Qwen2.5, och även “tänkande” variant som qwen3, är det lätt att integrera AI-funktioner direkt i dina Python-projekt — utan att behöva bero på externa moln-API:er.
🧩 Krav
Innan du börjar, se till att du har:
pip install requests ollama
Bekräfta att Ollama körs genom att köra:
ollama list
Du bör se tillgängliga modeller som llama3, mistral eller qwen3.
⚙️ Alternativ 1: Använda Ollama REST API
REST API är idealiskt när du vill ha maximal kontroll eller när du integrerar med ramverk som redan hanterar HTTP-begäran.
Exempel 1: Chat API
import requests
import json
url = "http://localhost:11434/api/chat"
payload = {
"model": "llama3.1",
"messages": [
{"role": "system", "content": "Du är en Python-assistent."},
{"role": "user", "content": "Skriv en funktion som vänder en sträng."}
]
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
data = json.loads(line)
print(data.get("message", {}).get("content", ""), end="")
👉 Ollama REST API strömmar svar linje för linje (liknande OpenAI:s strömmande API). Du kan samlar innehåll eller visa det i realtid för chattrobotar eller CLI-verktyg.
Exempel 2: Generate API
Om du inte behöver chattkontext eller roller, använd den enklare /api/generate-slutpunkten:
import requests
url = "http://localhost:11434/api/generate"
payload = {
"model": "llama3.1",
"prompt": "Förklara rekursion i en mening."
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
print(line.decode("utf-8"))
Den här slutpunkten är bra för enkel textgenerering — sammanfattningar, kodavsnitt, osv.
🐍 Alternativ 2: Använda Ollama Python-biblioteket
Ollama Python-klienten ger ett renare gränssnitt för utvecklare som föredrar att förbli helt i Python.
Exempel 1: Chat API
import ollama
response = ollama.chat(
model="llama3.1",
messages=[
{"role": "system", "content": "Du är en kodassistent."},
{"role": "user", "content": "Generera en Python-skript som listar alla filer i en katalog."}
]
)
print(response['message']['content'])
Detta returnerar det slutgiltiga meddelandet som ett dictionary. Om du vill ha strömning, kan du iterera över chatströmmen:
stream = ollama.chat(
model="llama3.1",
messages=[
{"role": "user", "content": "Skriv en haiku om rekursion."}
],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
Exempel 2: Generate API
import ollama
output = ollama.generate(
model="llama3.1",
prompt="Sammanfatta konceptet om dekoratorer i Python."
)
print(output['response'])
Eller strömma resultatet:
stream = ollama.generate(
model="llama3.1",
prompt="Lista tre fördelar med att använda Python för AI-projekt.",
stream=True
)
for chunk in stream:
print(chunk['response'], end='', flush=True)
🧠 Arbeta med “Tänkande” Modeller
Ollama stöder “tänkande modeller” som qwen3, som är designade för att visa deras mellanliggande resonemangsskrid. Dessa modeller producerar strukturerad utdata, ofta i ett format som:
</think>
Resonemangsskrid här...
</think>
Slutgiltigt svar här.
Detta gör dem användbara för:
- Felsöka modellresonemang
- Forskning i tolkningsbarhet
- Bygga verktyg som separerar tankar från utdata
Exempel: Använda en tänkande modell
import ollama
response = ollama.chat(
model="qwen3",
messages=[
{"role": "user", "content": "Vad är Australiens huvudstad?"}
]
)
content = response['message']['content']
# Eventuellt extrahera "tänkande"-delen
import re
thinking = re.findall(r"</think>
(.*?)