Ollama를 Python과 통합하는 방법: REST API 및 Python 클라이언트 예제
+ Thinking LLMs를 사용한 구체적인 예시
이 게시물에서는 Python 애플리케이션을 Ollama에 연결하는 두 가지 방법을 살펴보겠습니다: 1. HTTP REST API를 통해; 2. 공식 Ollama Python 라이브러리를 통해.
우리는 채팅과 생성 호출을 모두 다루고, 이후 **“생각 모델”**을 효과적으로 사용하는 방법에 대해 논의할 것입니다.
Ollama 는 대규모 언어 모델(LLM)을 로컬에서 실행하는 데 있어 가장 편리한 방법 중 하나로 빠르게 자리 잡았습니다. 간단한 인터페이스와 Llama 3, Mistral, Qwen2.5 및 qwen3과 같은 “생각” 변형 모델을 포함한 인기 있는 오픈 모델에 대한 지원을 통해, 외부 클라우드 API에 의존하지 않고도 Python 프로젝트에 AI 기능을 직접 통합하는 것이 간단해졌습니다.
🧩 사전 조건
들어가기 전에 다음 사항을 확인하세요:
pip install requests ollama
Ollama가 실행되고 있는지 확인하려면 다음을 실행하세요:
ollama list
llama3
, mistral
, 또는 qwen3
와 같은 사용 가능한 모델을 보아야 합니다.
⚙️ 선택 1: Ollama의 REST API 사용
REST API는 최대한의 제어가 필요하거나 이미 HTTP 요청을 처리하는 프레임워크와 통합할 때 이상적입니다.
예제 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"</think>", "", content, flags=re.DOTALL)
print("🧠 생각 과정:\n", thinking[0].strip() if thinking else "N/A")
print("\n✅ 최종 답변:\n", answer.strip())
“생각” 모델 사용 시기
사용 사례 | 권장 모델 | 이유 |
---|---|---|
해석 가능성 / 디버깅 | qwen3 |
추론 추적 보기 |
성능 민감한 앱 | qwen3 non-thinking mode |
더 빠르고 간결함 |
교육 / 설명 | qwen3 |
단계별 논리 보여주기 |
✅ 요약
작업 | REST API | Python 클라이언트 |
---|---|---|
간단한 텍스트 생성 | /api/generate |
ollama.generate() |
대화형 채팅 | /api/chat |
ollama.chat() |
스트리밍 지원 | 예 | 예 |
“생각” 모델 사용 가능 | 예 | 예 |
Ollama의 로컬 중심 설계는 보안, 오프라인, 개인정보 보호가 중요한 AI 애플리케이션에 이상적입니다. 상호작용형 챗봇을 만들거나 백그라운드 데이터 풍부화 서비스를 구축하든, LLM을 Python 워크플로우에 쉽게 통합할 수 있으며, 모델, 지연 시간, 데이터에 대한 완전한 제어가 가능합니다.
유용한 링크
- https://pypi.org/project/ollama/
- Ollama cheatsheet
- Python Cheatsheet
- 설치 및 Ollama 구성
- 구조화된 출력으로 LLM 제한: Ollama, Qwen3 및 Python 또는 Go
- 인기 있는 LLM 제공업체의 구조화된 출력 비교 - OpenAI, Gemini, Anthropic, Mistral 및 AWS Bedrock
- Ollama GPT-OSS 구조화된 출력 문제
- Ollama가 병렬 요청을 어떻게 처리하는지
- 테스트: Ollama 새 버전 - v0.12.1에서 메모리 할당 및 모델 스케줄링