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

+ 사고형 LLM을 사용한 구체적인 예시

Page content

이 포스트에서는 Python 애플리케이션을 Ollama에 연결하는 방법에 대해 두 가지 방법을 소개합니다: 1. HTTP REST API를 통해; 2. 공식 Ollama Python 라이브러리를 통해.

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

ollama and 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 기능을 쉽게 통합할 수 있습니다.


🧩 사전 조건

시작하기 전에 다음을 확인하세요:

  • Ollama가 로컬에서 설치되고 실행되고 있습니다 (ollama serve)
  • Python 3.9 이상
  • 필요한 의존성:
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"

구독하기

시스템, 인프라, AI 엔지니어링에 관한 새 글을 받아보세요.