Ollama를 Python과 통합하는 방법: REST API 및 Python 클라이언트 예제
+ 사고형 LLM을 사용한 구체적인 예시
이 포스트에서는 Python 애플리케이션을 Ollama에 연결하는 방법에 대해 두 가지 방법을 소개합니다: 1. HTTP REST API를 통해; 2. 공식 Ollama Python 라이브러리를 통해.
우리는 채팅과 생성 요청을 모두 다루고, 이후 **“사고 모델”**을 효과적으로 사용하는 방법에 대해 논의할 것입니다.

Ollama 는 대규모 언어 모델(LLM)을 로컬에서 실행하는 데 있어 가장 편리한 방법 중 하나로 빠르게 자리 잡았습니다. Ollama가 vLLM, Docker Model Runner, LocalAI 및 클라우드 제공업체와 비교되는 방식을 보고, 각각을 언제 선택해야 하는지 알고 싶다면 LLM Hosting: Local, Self-Hosted & Cloud Infrastructure Compared를 참조하세요. 간단한 인터페이스와 Llama 3, Mistral, Qwen2.5 및 qwen3과 같은 “사고” 변형 모델을 포함한 인기 있는 오픈 모델에 대한 지원을 제공하므로, 외부 클라우드 API에 의존하지 않고도 Python 프로젝트에 AI 기능을 쉽게 통합할 수 있습니다.
🧩 사전 조건
시작하기 전에 다음을 확인하세요:
pip install requests ollama
Ollama가 실행되고 있는지 확인하려면 다음을 실행하세요:
ollama list
llama3, mistral, 또는 qwen3와 같은 사용 가능한 모델을 보시게 될 것입니다.
⚙️ 선택 1: Ollama의 REST API 사용
HTTP 요청을 이미 처리하는 프레임워크와 통합하거나 최대한의 제어를 원할 때 REST API가 이상적입니다.
예제 1: 채팅 API
import requests
import json
url = "http://localhost:11434/api/chat"
payload = {
"model": "llama3.1",
"messages": [
{"role": "system", "content": "당신은 Python 보조 프로그램입니다."},
{"role": "user", "content": "문자열을 뒤집는 함수를 작성하세요."}
]
}
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는 OpenAI의 스트리밍 API와 유사하게 응답을 줄 단위로 스트리밍합니다. 챗봇 또는 CLI 도구에서 실시간으로 내용을 표시하거나 누적할 수 있습니다.
예제 2: 생성 API
채팅 컨텍스트 또는 역할이 필요하지 않다면, 더 간단한 /api/generate 엔드포인트를 사용하세요:
import requests
url = "http://localhost:11434/api/generate"
payload = {
"model": "llama3.1",
"prompt": "재귀를 한 문장으로 설명하세요."
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
print(line.decode("utf-8"))
이 엔드포인트는 단일 텍스트 생성 작업 — 요약, 코드 스니펫 등에 이상적입니다.
🐍 선택 2: Ollama Python 라이브러리 사용
Ollama Python 클라이언트는 완전히 Python에서 작업하는 것을 선호하는 개발자들에게 더 깔끔한 인터페이스를 제공합니다.
예제 1: 채팅 API
import ollama
response = ollama.chat(
model="llama3.1",
messages=[
{"role": "system", "content": "당신은 코드 보조 프로그램입니다."},
{"role": "user", "content": "디렉토리에 있는 모든 파일을 나열하는 Python 스크립트를 생성하세요."}
]
)
print(response['message']['content'])
이것은 최종 메시지를 딕셔너리로 반환합니다. 스트리밍을 원한다면, 챗 스트림을 반복할 수 있습니다:
stream = ollama.chat(
model="llama3.1",
messages=[
{"role": "user", "content": "재귀에 대한 하이쿠를 작성하세요."}
],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
예제 2: 생성 API
import ollama
output = ollama.generate(
model="llama3.1",
prompt="파이썬에서 데코레이터의 개념을 요약하세요."
)
print(output['response'])
또는 결과를 스트리밍할 수 있습니다:
stream = ollama.generate(
model="llama3.1",
prompt="파이썬으로 AI 프로젝트에 사용하는 세 가지 장점을 나열하세요.",
stream=True
)
for chunk in stream:
print(chunk['response'], end='', flush=True)
🧠 “사고” 모델 사용
Ollama는 *“사고 모델”*과 같은 qwen3을 지원합니다. 이 모델들은 중간 추론 단계를 보여주는 것이 설계되었습니다. 이러한 모델은 종종 다음과 같은 형식의 구조화된 출력을 생성합니다:
</think>
여기 추론 단계가 있습니다...
이것은 다음과 같은 용도로 유용합니다:
- 모델 추론 디버깅
- 해석 가능성 연구
- 사고와 출력을 분리하는 도구 개발
예제: 사고 모델 사용
import ollama
response = ollama.chat(
model="qwen3",
messages=[
{"role": "user", "content": "호주 수도는 어디인가요?"}
]
)
content = response['message']['content']
# 선택적으로 "사고" 부분 추출
import re
thinking = re.findall(r"</think>", content, re.DOTALL)
answer = re.sub(r"