마루옵스서버 · 네트워크 · AI 기술 노트

소개문의

[Local LLM 구축하기 13] Python으로 Ollama API 호출하기

노트북 키보드를 누르는 손

참고 사진 · 노트북 키보드를 누르는 손 · 사진: Shixart1985 / 원본 / CC BY 2.0 · 목록용 크기 조정

Local LLM 구축하기 · 13/30 · API와 문서 검색

전체 연재와 학습 순서 · 실습 코드 ZIP

채팅창에서 하던 질문을 Python 코드에서도 보낼 수 있습니다. 파일 요약이나 점검 메모 정리를 자동화할 때 필요한 출발점이에요. 요청을 JSON으로 보내고 응답에서 문장을 꺼내는 과정을 작은 함수로 만들어 보겠습니다.

8편의 Python 가상환경과 2편의 Windows Ollama를 사용합니다. 여기서 저장할 공용 HTTP 함수는 뒤의 예제에서도 불러옵니다.

HTTP 주소·메서드·본문

기본 로컬 주소는 127.0.0.1:11434, 대화 생성 경로는 /api/chat입니다. 버전 조회는 GET을 썼지만 대화는 POST 요청의 본문에 JSON을 넣습니다. 아래 코드는 Ollama 네이티브 API용이므로 /v1/chat/completions의 형식과 섞지 않습니다.

messages에는 role과 content로 구성한 대화 기록을 넣습니다. stream=false로 지정하면 응답 조각 여러 개 대신 완성된 JSON 하나를 받아요. 스트리밍은 요청과 응답의 구조를 익힌 뒤 26편의 측정 예제에서 다룹니다.

공용 요청 함수 저장

local-llm-lab 폴더에 아래 코드를 llm_http.py로 저장합니다. 실습 ZIP의 파일을 써도 됩니다. 실행 전에 Ollama 앱을 켜고 기준 모델의 다운로드를 마칩니다.

import json
import urllib.request

BASE = "http://127.0.0.1:11434"
MODEL = "qwen3:4b-instruct"

def post(path, payload, timeout=180):
    data = json.dumps(payload, ensure_ascii=False).encode("utf-8")
    req = urllib.request.Request(BASE + path, data=data,
        headers={"Content-Type": "application/json; charset=utf-8"})
    with urllib.request.urlopen(req, timeout=timeout) as response:
        return json.load(response)

if __name__ == "__main__":
    result = post("/api/chat", {
        "model": MODEL,
        "messages": [{"role": "user", "content": "오프사이트 백업의 목적을 두 문장으로 설명해 줘."}],
        "stream": False,
        "options": {"num_ctx": 4096, "num_predict": 256, "temperature": 0.2}
    })
    print(result["message"]["content"])
.\.venv\Scripts\python.exe .\llm_http.py

답변 문장이 출력되면 Python에서 보낸 HTTP 요청이 Ollama와 모델까지 도달한 것입니다. 이후 예제는 같은 폴더에서 post 함수를 불러 사용해요. 외부에 배포할 때에는 요청 주소를 아무 값이나 받게 두지 않고 허용한 서버를 설정으로 관리합니다.

요청 실패의 처리

오류·증상확인 위치
연결 거부Ollama 앱·11434 버전 API
404 / 모델 없음요청 경로·ollama list·model 이름
읽기 시간 초과적재 시간·CPU 추론·문맥 크기
JSON 해석 실패stream=false 여부·프록시가 반환한 HTML

실습 코드에서는 오류가 발생한 위치를 traceback으로 확인할 수 있습니다. 운영 앱에서는 연결 실패, HTTP 오류, JSON 해석 실패를 구분해 처리합니다. 재시도는 횟수와 전체 시간을 제한해야 합니다.

대화 기록과 로그 관리

API가 앞의 모든 대화를 알아서 보관해 주는 것은 아닙니다. 이전 내용을 참고하게 하려면 필요한 발화를 다음 요청의 messages에 넣어 주세요. 대화 기록을 저장하고 토큰 예산에 맞게 줄이는 일은 애플리케이션이 맡습니다.

로그에는 우선 시각, 모델, 요청 식별자, 상태와 처리 시간을 남깁니다. 문서와 답변 전체를 남기면 개인정보까지 저장될 수 있습니다. 자동화를 계속 쓴다면 로그의 보관 기간과 삭제 방법도 함께 정합니다.

참고 자료

문서·모델 태그 확인 기준: 2026년 10월 18일. 기본 실습 환경: Windows 11 x64.


댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

닉네임·이메일·댓글 내용·IP 주소·브라우저 정보는 댓글 게시 및 관리에 사용됩니다. 이메일과 접속 정보는 공개 댓글에 표시하지 않습니다. 개인정보 요청은 운영자 이메일로 보내 주세요. 개인정보처리방침