ollama는 로컬에서 LLM(Large Language Model)을 실행하고 사용할 수 있도록 도와주는 툴입니다. LangChain과도 쉽게 연동할 수 있어, 인터넷 연결 없이도 AI 모델을 활용할 수 있습니다.

 


🔹 Ollama 기본 사용법

 

1️⃣ 설치

 

먼저, ollama를 설치해야 합니다.

MacOS & Linux:

curl -fsSL https://ollama.com/install.sh | sh

 

Windows:

Ollama 공식 홈페이지에서 설치 파일 다운로드

 

설치가 완료되면 터미널에서 ollama 명령어가 사용 가능해집니다.

 


2️⃣ 모델 다운로드 및 실행

 

Ollama는 로컬에서 실행할 LLM을 다운로드해야 합니다.

예를 들어, Mistral 모델을 다운로드하고 실행하려면:

ollama pull mistral
ollama run mistral

또는 llama3 모델을 사용하려면:

ollama pull llama3
ollama run llama3

이제 터미널에서 직접 모델과 대화할 수 있습니다.

 


🔹 Python에서 Ollama 사용하기

 

✅ Ollama + Python 기본 예제

 

Ollama의 API를 Python에서 호출하려면 ollama 패키지를 설치합니다.

import ollama

response = ollama.chat(model="mistral", messages=[{"role": "user", "content": "Explain quantum computing"}])
print(response["message"]["content"])

✅ 위 코드에서는 mistral 모델을 사용해 “Explain quantum computing” 질문에 대한 답을 생성합니다.

 


✅ Ollama + LangChain 사용 예제

 

LangChain에서 Ollama 모델을 사용할 수도 있습니다.

from langchain_community.llms import Ollama

llm = Ollama(model="mistral")
result = llm.invoke("What is the capital of South Korea?")
print(result)

✅ 이 코드는 mistral 모델을 사용하여 “대한민국의 수도는?” 질문에 답변합니다.

 


🔹 고급 기능

 

✅ 사용자 지정 모델 만들기

 

Ollama는 Modelfile을 사용하여 **사용자 정의 모델(Custom Model)**을 만들 수 있습니다.

 

1️⃣ Modelfile 생성:

touch Modelfile

2️⃣ 파일 내용 추가:

FROM mistral
SYSTEM "You are a helpful assistant that specializes in space science."

3️⃣ 모델 빌드 및 실행:

ollama create my-space-assistant -f Modelfile
ollama run my-space-assistant

이제 "my-space-assistant"라는 모델을 실행하면 우주 과학에 특화된 AI로 동작하게 됩니다.

 


🔹 Ollama vs OpenAI API

FeatureOllama (로컬)OpenAI API (클라우드)

💰 비용 무료 (하드웨어 필요) 유료 (API 비용 발생)
⚡ 속도 빠름 (로컬 실행) 느림 (네트워크 요청 필요)
🔗 인터넷 필요 여부 ❌ 필요 없음 ✅ 필요
🛠 모델 커스터마이징 ✅ 가능 (Modelfile) ❌ 불가능
🔄 모델 변경 가능 여부 ✅ 가능 (pull 사용) ✅ 가능 (API 변경)

 

 


🎯 정리

 

Ollama는 로컬에서 LLM을 실행할 수 있는 강력한 도구

Python 및 LangChain과 쉽게 연동 가능

인터넷 없이도 빠르게 AI 모델을 실행할 수 있어 보안성이 뛰어남

Modelfile을 사용해 모델을 맞춤 설정할 수도 있음

 

Ollama를 사용하면 클라우드 API 없이도 로컬에서 빠르고 저렴하게 AI 애플리케이션을 구축할 수 있습니다! 🚀

'Areas > LangChain' 카테고리의 다른 글

LangChain이란?  (0) 2025.03.16

LangChain은 LLM(대형 언어 모델, Large Language Model)을 활용한 애플리케이션을 더 쉽게 개발할 수 있도록 도와주는 Python 및 JavaScript 라이브러리입니다. 단순히 언어 모델을 호출하는 것이 아니라, 이를 체인(Chain)으로 연결하여 다양한 기능을 수행할 수 있도록 설계되었습니다.

 


📌 LangChain의 핵심 개념

 

LangChain은 LLM을 이용한 애플리케이션을 구축하는 데 필요한 여러 모듈(Component)을 제공합니다. 주요 개념을 정리하면 다음과 같습니다.

 

1️⃣ LLM (Large Language Model)

OpenAI(GPT-4, GPT-3.5), Claude, Mistral, Llama 등 다양한 모델을 쉽게 호출할 수 있도록 지원합니다.

로컬 모델(ollama, Hugging Face 모델)과의 연동도 가능합니다.

 

2️⃣ Prompt Templates

LLM에 전달할 프롬프트를 템플릿 형태로 관리하여 재사용할 수 있습니다.

예시:

from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("What is the capital of {country}?")
print(prompt.format(country="France"))  # "What is the capital of France?"

 

 

3️⃣ Chains (체인)

여러 개의 LLM 호출, API 요청 등을 하나의 흐름으로 연결할 수 있습니다.

예를 들어, 프롬프트를 생성하고 → LLM에 전달하고 → 결과를 포스트프로세싱하는 작업을 체인으로 묶을 수 있음.

 

4️⃣ Agents (에이전트)

단순히 체인된 작업을 수행하는 것이 아니라, 주어진 도구(Tool)를 활용하여 더 역동적인 문제 해결이 가능합니다.

예를 들어, LLM이 계산기 도구, 검색 도구, 데이터베이스 조회 도구 등을 활용하여 답을 찾도록 구성할 수 있음.

ReAct(Reasoning + Acting) 방식을 기반으로 동작.

 

5️⃣ Memory (메모리)

LangChain은 기본적으로 Stateless(상태 없음)이지만, 특정 기능을 통해 대화 히스토리를 기억할 수 있음.

챗봇과 같이 문맥을 유지해야 하는 애플리케이션에서 유용함.

 

6️⃣ Retrieval-Augmented Generation (RAG)

LLM은 훈련 데이터 이후의 정보를 모름.

이를 해결하기 위해, 외부 데이터베이스(Vector DB)에서 정보를 검색(Retrieve)한 후, LLM에 제공하는 방식.

대표적으로 FAISS, Chroma, Weaviate, Pinecone 등의 벡터 DB를 활용.

 


🚀 LangChain의 활용 예시

 

LangChain을 활용하면 다음과 같은 애플리케이션을 만들 수 있습니다.

1. Chatbot – OpenAI API를 활용한 대화형 챗봇

2. 문서 요약 시스템 – 긴 문서를 LLM을 이용해 요약

3. 질문 응답 시스템 (Q&A Bot) – 벡터DB(RAG)를 활용하여 문서 기반의 Q&A 제공

4. 데이터 분석 도우미 – LLM이 Pandas, SQL 등을 활용해 데이터를 분석하는 에이전트

5. 자동화된 검색 시스템 – LLM이 Google Search, Wikipedia 검색을 수행하여 정보를 제공

6. 코딩 도우미 – LangChain을 활용해 코드 자동 생성 및 디버깅 지원

 


🛠 LangChain 코드 예제

 

✅ OpenAI API를 이용한 간단한 체인 예제

from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# OpenAI API 키 설정 (환경 변수 또는 직접 입력)
import os
os.environ["OPENAI_API_KEY"] = "your-api-key"

# 프롬프트 템플릿 생성
prompt = PromptTemplate.from_template("What is the capital of {country}?")

# LLM 초기화
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 체인 생성
chain = LLMChain(llm=llm, prompt=prompt)

# 실행
result = chain.run(country="Germany")
print(result)  # "Berlin"

 

 


🎯 LangChain이 유용한 이유

 

LLM을 더 쉽게 활용 – OpenAI, Hugging Face 등 다양한 모델을 쉽게 연결 가능

컴포넌트 기반 설계 – Prompt, Chain, Agent, Memory 등의 모듈을 조합하여 확장 가능

RAG 기반 검색 최적화 – 벡터 DB를 이용해 최신 정보를 LLM에 제공 가능

강력한 도구 활용 (Tools & Agents) – 계산기, API 호출, DB 조회 등을 결합하여 자동화된 AI 시스템 구축 가능

 

LangChain은 단순한 챗봇을 넘어, 지능적인 AI 애플리케이션을 만들기 위한 필수 도구로 자리 잡고 있습니다. 🚀

'Areas > LangChain' 카테고리의 다른 글

LangChain에서 Ollama 사용하는 법  (0) 2025.03.16

LLM(대형 언어 모델)을 다운로드할 때 흔히 볼 수 있는 Quantization (양자화) 기호를 읽는 방법을 정리해볼게요.


1. 기본 개념

LLM을 사용할 때 모델의 크기를 줄이고 속도를 높이기 위해 양자화(Quantization) 를 적용하는 경우가 많습니다. 이를 나타내는 기호가 모델 파일 이름에 포함됩니다.

예를 들어:

mistral-7B.Q4_K_M.gguf
llama-3-8B.Q5_1.gguf

이런 식으로 .gguf, .ggml, .safetensors 등의 확장자 앞에 Q4_K_M, Q5_1 같은 기호가 붙습니다.


2. 양자화 기호 분석

양자화 기호는 보통 다음과 같은 구조로 되어 있습니다.

🔹 QX (X 비트 양자화)

  • Q4, Q5, Q6 등으로 나타남
  • 숫자는 사용되는 비트 수를 의미
    • Q4 → 4비트 양자화 (더 작은 크기, 성능은 조금 감소)
    • Q5 → 5비트 양자화 (균형 잡힌 성능)
    • Q6 → 6비트 양자화 (더 높은 정밀도)

🔹 세부 양자화 방식

  • Q4_0, Q4_1, Q5_0, Q5_1 같은 형식으로 세부 옵션이 붙음
  • 예시: Q4_0 vs Q4_1
    • _0: 기본적인 양자화
    • _1: 좀 더 정밀한 양자화 방식 (더 많은 가중치 유지)

🔹 K-서픽스 (K-양자화)

  • 예시: Q4_K_M, Q5_K_S
  • K가 붙으면 더 정교한 양자화 알고리즘 사용
  • M, S 같은 추가 기호는 세부적인 변형 방식

3. 실제 예제 분석

모델 파일명 의미

mistral-7B.Q4_K_M.gguf Mistral 7B 모델, 4비트 K-양자화 (M 변형), gguf 포맷
llama-3-8B.Q5_1.gguf LLaMA 3 8B 모델, 5비트 양자화 (더 정밀한 _1 방식)
gemma-2B.Q6_K.gguf Gemma 2B 모델, 6비트 K-양자화

4. 어떤 양자화 모델을 선택해야 할까?

  • RAM이 적으면? → Q4_0 또는 Q4_K
  • 균형 잡힌 선택? → Q5_1
  • 최대한 정밀한 모델이 필요하면? → Q6_K

양자화 모델은 작은 메모리로도 실행할 수 있도록 도와주지만, 정확도가 조금씩 낮아질 수 있습니다. 따라서 사용할 환경 (RAM, 속도, 정확도) 에 맞춰 선택하면 됩니다.


🚀 요약

  1. Q4, Q5, Q6 → 숫자가 클수록 더 정밀한 모델
  2. _0, _1 → _1이 더 정밀함
  3. K가 붙으면 더 정교한 양자화 알고리즘 사용
  4. 작은 RAM에서는 Q4, 높은 정밀도 필요하면 Q6 추천

이제 LLM 다운로드할 때 파일명만 보고도 쉽게 이해할 수 있겠죠? 😊

'Areas > LLM' 카테고리의 다른 글

MCP(Model Context Protocol)  (1) 2025.03.23
LLM System 프롬프트 예시  (0) 2025.03.18

pandas.DataFrame.melt() 사용법 및 예제

melt() 함수는 DataFrame을 긴(long) 형식으로 변환하는 데 사용됩니다.
이는 데이터 분석 및 시각화에 유용하며, 특히 Tidy Data 형식으로 변환할 때 자주 사용됩니다.


🔹 melt() 기본 문법

pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value')

🔸 주요 매개변수

  • frame : 변환할 DataFrame
  • id_vars : 녹이지 않고 유지할 열 (기준 열)
  • value_vars : 녹일 열 (기본적으로 나머지 모든 열이 포함됨)
  • var_name : 새로 생성될 "변수 이름" 열의 이름 (기본값: variable)
  • value_name : 새로 생성될 "값" 열의 이름 (기본값: value)

🔹 예제 1: 기본 사용법

import pandas as pd

# 샘플 데이터 생성
df = pd.DataFrame({
    '이름': ['철수', '영희', '민수'],
    '국어': [90, 85, 88],
    '수학': [80, 95, 92]
})

print("📌 원본 DataFrame:")
print(df)

# melt() 적용
df_melted = df.melt(id_vars=['이름'], var_name='과목', value_name='점수')

print("\n📌 melt() 적용 후:")
print(df_melted)

📌 결과:

📌 원본 DataFrame:
   이름  국어  수학
0  철수  90  80
1  영희  85  95
2  민수  88  92

📌 melt() 적용 후:
   이름  과목  점수
0  철수  국어  90
1  영희  국어  85
2  민수  국어  88
3  철수  수학  80
4  영희  수학  95
5  민수  수학  92

🔹 **이름을 기준(id_vars=['이름'])**으로 두고, 국어/수학을 녹여서(value_vars=['국어', '수학']) 과목과 점수 열을 생성했습니다.


🔹 예제 2: value_vars를 지정하여 특정 열만 녹이기

df_melted = df.melt(id_vars=['이름'], value_vars=['국어'], var_name='과목', value_name='점수')
print(df_melted)

📌 결과:

   이름  과목  점수
0  철수  국어  90
1  영희  국어  85
2  민수  국어  88

🔹 국어만 녹이고, 수학은 변환하지 않았습니다.


🔹 예제 3: var_name과 value_name 변경하기

df_melted = df.melt(id_vars=['이름'], var_name='Subject', value_name='Score')
print(df_melted)

📌 결과:

   이름 Subject  Score
0  철수     국어     90
1  영희     국어     85
2  민수     국어     88
3  철수     수학     80
4  영희     수학     95
5  민수     수학     92

🔹 **열 이름을 영어(var_name='Subject', value_name='Score')**로 변경했습니다.


🔹 예제 4: 여러 개의 id_vars 사용하기

df = pd.DataFrame({
    '학교': ['A', 'A', 'B'],
    '이름': ['철수', '영희', '민수'],
    '국어': [90, 85, 88],
    '수학': [80, 95, 92]
})

df_melted = df.melt(id_vars=['학교', '이름'], var_name='과목', value_name='점수')
print(df_melted)

📌 결과:

   학교  이름  과목  점수
0   A  철수  국어  90
1   A  영희  국어  85
2   B  민수  국어  88
3   A  철수  수학  80
4   A  영희  수학  95
5   B  민수  수학  92

🔹 두 개의 기준 열(id_vars=['학교', '이름'])을 유지하고 나머지를 녹였습니다.


🔹 정리

  • melt()는 넓은(wide) 데이터긴(long) 데이터로 변환할 때 사용됩니다.
  • **기준 열(id_vars)**을 유지하고, 나머지 열을 녹여서 **새로운 열(var_name, value_name)**로 변환합니다.
  • 여러 개의 id_vars를 설정할 수도 있으며, value_vars를 지정해 특정 열만 녹일 수도 있습니다.

이해되셨나요? 😃 더 궁금한 점 있으면 질문해주세요! 🚀

tmux(terminal multiplexer)는 여러 터미널 세션을 하나의 창에서 관리할 수 있도록 도와주는 도구입니다. 원격 서버에서 작업하거나 여러 프로세스를 실행해야 할 때 유용합니다.

1. tmux 시작하기

tmux
  • 새로운 tmux 세션을 시작합니다.

2. 세션 관리

세션 생성

tmux new -s mysession
  • mysession이라는 이름으로 새로운 세션을 시작합니다.

실행 중인 세션 목록 확인

tmux list-sessions
  • 현재 실행 중인 tmux 세션 목록을 확인합니다.

세션에 연결하기

tmux attach -t mysession
  • mysession 세션에 다시 연결합니다.

세션에서 분리하기 (백그라운드 실행)

Ctrl + b  →  d
  • 현재 tmux 세션을 백그라운드로 보냅니다.

세션 종료

exit
  • tmux 세션을 종료합니다.

3. 창(Window) 및 창 분할(Pane)

새 창 만들기

Ctrl + b  →  c
  • 새로운 창을 생성합니다.

창 전환

Ctrl + b  →  n  # 다음 창으로 이동
Ctrl + b  →  p  # 이전 창으로 이동
Ctrl + b  →  w  # 창 목록 보기
Ctrl + b  →  숫자  # 특정 창으로 이동 (예: 0, 1, 2...)

창 닫기

Ctrl + b  →  &  
  • 현재 창을 닫습니다.

패널(창 분할) 만들기

Ctrl + b  →  %  # 수직 분할
Ctrl + b  →  "  # 수평 분할

패널 전환

Ctrl + b  →  방향키(←, →, ↑, ↓)

패널 크기 조절

Ctrl + b  →  :resize-pane -U  # 위로 크기 조절
Ctrl + b  →  :resize-pane -D  # 아래로 크기 조절
Ctrl + b  →  :resize-pane -L  # 왼쪽으로 크기 조절
Ctrl + b  →  :resize-pane -R  # 오른쪽으로 크기 조절

패널 닫기

Ctrl + b  →  x

4. 기타 유용한 명령어

설정 다시 불러오기

Ctrl + b  →  :source-file ~/.tmux.conf
  • ~/.tmux.conf 설정 파일을 다시 로드합니다.

tmux 종료

tmux kill-server
  • 모든 tmux 세션을 종료합니다.

tmux를 사용하면 원격 서버에서 작업할 때 SSH 연결이 끊겨도 실행 중인 작업이 유지되는 장점이 있습니다. 기본 단축키만 익혀도 효율적으로 활용할 수 있으니 한 번 사용해 보세요!

+ Recent posts