ChatGPT API / Ollama 사용 실습
1. OpenAI API(ChatGPT API)
1.1 OpenAI API 개요
- OpenAI API란?
- OpenAI에서 제공하는 클라우드 기반 서비스
- 사용자가 LLM을 활용하여 다양한 자연어 처리 작업을 수행할 수 있도록 지원함
- 복잡한 머신러닝 모델을 직접 구축하지 않고도 텍스트 생성, 번역, 요약, 질문 응답 등 다양한 기능을 구현할 수 있음
- 주요 특징
- 다양한 모델 제공:
- gpt-4/gpt-4o: 최신 언어 모델로 고급 자연어 이해 및 생성 능력을 보유
- gpt-3.5/gpt-3.5-turbo: 빠른 응답과 효율적인 성능 제공
- Codex: 코드 생성에 특화된 모델
- DALL-E: 텍스트를 기반으로 이미지 생성
- 기타(새로운 버전의 발표에 따라 계속 추가됨)
- 다양한 활용 사례:
- 대화형 챗봇 개발
- 콘텐츠 생성(스토리, 마케팅 카피 등)
- 언어 번역 및 문서 요약
- 코드 작성과 디버깅
- 멀티턴 대화 지원:
- 이전 대화 내용을 기억하지 못하는 API의 특성을 극복하기 위해 사용자는 이전 대화 내용을 입력으로 전달해야 함
- 비용 효율성:
- 사용량에 따라 종량제 요금 부과(GPT-4는 1,000 토큰당 약 $003, GPT-35는 $002)
- 운영정책에 따라 계속 바뀌는 중
- 다양한 모델 제공:
1.2 OpenAI API 사용 방법
1.2.1 Key 생성 방법
- OpenAI Platform의 API Key 조회화면에 접속
- https://platform.openai.com/account/apikeys
- 왼족 메뉴에서 User > API Keys 선택
- ‘Create new secret key’ 버튼 클릭 → Secret Key 생성창 Open → ‘Creaet’ 키 눌러서 Secret Key 생성
1.2.2 주의 사항
- 생성한 API 키는 단 한 곳에서만 사용이 가능함
- 다른 서비스에 사용하려면 새로 발급받아야 함
- 생성한 API 키는 다시 확인이 되지 않으므로 창을 닫기 전에 복사, 저장해 둘것
- 타인에게 절대로 노출 시키지 말것 → 쓴 만큼 돈 나감
1.2.3 API Key 사용하기
pip install openai
import os
import openai
import streamlit as st
openai.organization = "org-LX1aoE2SdFIlz345GlxDZ6vV"
openai.api_key = os.getenv('OPENAI_API_KEY')
- openai.organization은 https://platform.openai.com/account/org-settings 의 왼쪽 메뉴 중 Settings 에서 확인할 수 있음
- openai.api_key 값은 OPENAI_API_KEY 환경변수에 저장된 값을 사용함
- API Key 발급 후 반드시 저장할 것(다시 볼 수 없음)
- 직접 입력해도 상관없음
1.2.4 실행 예제
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0, # 모델 출력에 대한 무작위성의 정도
)
return response.choices[0].message["content"]
def my_get_completion(text):
ans = get_completion(f"""
```{text}```
위 문장을 분석하여 긍정적인 확률, 부정적인 확률을 float 형태로 답변 형식에 맞춰서 대답해줘
답변 형식
pos_pect:
neg_pect:
""")
return [float(ans.split(": ")[-1]) for ans in ans.split("\n")]
st.markdown("# 감성 분석 사이트")
text = st.text_input('분석 대상 텍스트를 입력하세요', '')
result = my_get_completion(text)
st.success(f'{result[0]}, {result[1]}', icon="✅")
2. Ollama
2.1 Ollama 개요
- Ollama란?
- 대규모 언어 모델(Large Language Model, LLM)을 로컬 환경에서 실행할 수 있도록 설계된 오픈소스 플랫폼
- 개인 사용자부터 개발자까지 누구나 쉽게 LLM을 활용할 수 있도록 설계된 강력한 도구
- 클라우드 기반 API에 의존하지 않고 자신의 PC에서 직접 LLM을 실행할 수 있음
- 주요 특징
- 다양한 모델 지원
- Llama 2, Llama 3, Mistral, CodeLlama 등 여러 LLM 사용 가능
- 사용자 필요에 따라 모델을 선택하고 커스터마이징 가능
- 로컬 실행
- macOS, Windows, Linux 등 다양한 운영체제에서 실행 가능
- Docker를 통한 배포 지원
- 사용자 정의 기능
- 모델의 프롬프트와 설정을 사용자 맞춤으로 조정 가능
- REST API를 통해 외부 애플리케이션과 통합 가능
- 간단한 설치 및 사용
- 명령어 한 줄로 모델 실행 가능
- ollama run <모델명>모델명>
- 필요한 모델은 자동으로 다운로드 및 설치됨
- 명령어 한 줄로 모델 실행 가능
- 다양한 모델 지원
- 설치 방법
- Windows: 현재 프리뷰 버전 제공
- Linux: 스크립트를 통해 설치 (curl 명령어 사용)
- macOS: Homebrew 또는 다운로드 페이지에서 설치
- Docker: 공식 이미지를 사용하여 컨테이너 환경에서 실행
- 활용 사례
- 텍스트 생성, 번역, 질의응답, 요약 등 다양한 작업
- 코드 생성 및 디버깅에 특화된 CodeLlama 같은 모델 활용 가능
- 멀티모달 입력(텍스트와 이미지) 지원
2.1 Ollama 사용해 보기
2.1.1 가상환경 만들기
python -m venv ollama
cd ollama
source ./bin/activate
2.1.2 Ollama 설치 및 실행
- 설치
curl -fsSL https://ollama.com/install.sh | sh
- 설치된 모델 확인
ollama list
- 모델 선택하여 실행
- 예제에서는 openchat 모델 사용
ollama run openchat
- 예제에서는 openchat 모델 사용
2.1.3 실행 예제
- 예제 1
import ollama
response = ollama.chat(model='openchat', messages=[
{
'role': 'user',
'content': '하늘은 왜 푸른지 설명해줘.',
},
])
print(response['message']['content'])
- 예제 2
response = ollama.chat(model="openchat", messages=[
{
"role": "user",
"content": "하늘이 왜 푸른지에 대하여 설명해줘. " +
"앞 문장을 분석하여 긍정적인 내용과 부정적인 내용을 float 형태로 답변 형식에 맞춰서 대답해줘.",
}
])
print(response['message']['content'])
- 예제 3
import requests
def query_ollama(model_name, prompt):
url = "http://localhost:11434/api/generate"
headers = {"Content-Type": "application/json"}
data = {
"model": model_name,
"prompt": prompt,
"stream": False
}
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
response_data = response.json()
print(response_data)
# return response_data['response']
if __name__ == "__main__":
model = "openchat"
prompt = "하늘은 왜 푸르게 보일까?"
result = query_ollama(model, prompt)
# print(result)
- 예제 4
import requests
import argparse
def query_ollama(model_name, prompt):
url = "http://localhost:11434/api/generate"
headers = {"Content-Type": "application/json"}
data = {
"model": model_name,
"prompt": prompt,
"stream": False
}
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
response_data = response.json()
print(response_data)
# return response_data['response']
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Input prompt.")
parser.add_argument("prompt", type=str)
model = "openchat"
args = parser.parse_args()
# prompt = "하늘은 왜 푸르게 보일까?"
result = query_ollama(model, args.prompt)
# print(result)