Ollama를 Python과 통합하는 방법: REST API 및 Python 클라이언트 예제

+ Thinking LLMs를 사용한 구체적인 예시

Page content

이 게시물에서는 Python 애플리케이션을 Ollama에 연결하는 두 가지 방법을 살펴보겠습니다: 1. HTTP REST API를 통해; 2. 공식 Ollama Python 라이브러리를 통해.

우리는 채팅생성 호출을 모두 다루고, 이후 **“생각 모델”**을 효과적으로 사용하는 방법에 대해 논의할 것입니다.

ollama and python

Ollama 는 대규모 언어 모델(LLM)을 로컬에서 실행하는 데 있어 가장 편리한 방법 중 하나로 빠르게 자리 잡았습니다. 간단한 인터페이스와 Llama 3, Mistral, Qwen2.5qwen3과 같은 “생각” 변형 모델을 포함한 인기 있는 오픈 모델에 대한 지원을 통해, 외부 클라우드 API에 의존하지 않고도 Python 프로젝트에 AI 기능을 직접 통합하는 것이 간단해졌습니다.


🧩 사전 조건

들어가기 전에 다음 사항을 확인하세요:

  • Ollama가 로컬에서 설치되고 실행되고 있음 (ollama serve)
  • Python 3.9 이상
  • 필요한 의존성:
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 워크플로우에 쉽게 통합할 수 있으며, 모델, 지연 시간, 데이터에 대한 완전한 제어가 가능합니다.

유용한 링크