OpenAI API 기본 설정
ChatGPT API를 사용하기 위해 OpenAI의 Python 라이브러리를 설치하고 API 키를 설정하는 기본 코드이다.
import openai
openai.api_key = 'your-api-key'
response = openai.Completion.create(
engine="text-davinci-003",
prompt="Hello, how are you?",
max_tokens=50
)
print(response.choices[0].text.strip())
프롬프트 엔지니어링 기초
프롬프트에 따라 API가 생성하는 텍스트 결과가 달라질 수 있다. 다음은 다양한 프롬프트를 사용하는 예시이다.
prompt = "What is the capital of France?"
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=50
)
print(response.choices[0].text.strip())
대화형 요청 및 상태 관리
대화를 이어 나가기 위해 대화의 상태를 유지하는 예시이다.
conversation_history = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the weather like today?"}
]
response = openai.ChatCompletion.create(
model="gpt-4",
messages=conversation_history
)
conversation_history.append({"role": "assistant", "content": response['choices'][0]['message']['content']})
print(response['choices'][0]['message']['content'])
다중 모델 사용 전략
여러 모델을 동시에 사용하여 다양한 결과를 비교하거나 병렬로 작업을 처리할 수 있다.
models = ["text-davinci-003", "gpt-4"]
for model in models:
response = openai.Completion.create(
engine=model,
prompt="Explain quantum computing in simple terms.",
max_tokens=100
)
print(f"Model: {model}")
print(response.choices[0].text.strip())
print("\n")
오류 처리 및 예외 관리
API 호출 중 발생할 수 있는 오류를 처리하는 방법을 보여주는 예시이다.
import openai
import time
openai.api_key = 'your-api-key'
def call_openai_api(prompt):
try:
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=50
)
return response.choices[0].text.strip()
except openai.error.RateLimitError:
print("Rate limit exceeded. Retrying in 5 seconds...")
time.sleep(5)
return call_openai_api(prompt) # 재시도
except Exception as e:
print(f"An error occurred: {e}")
return None
result = call_openai_api("Tell me a joke.")
print(result)
네트워크 오류 및 재시도 로직 구현
네트워크 오류가 발생할 경우 자동으로 재시도하는 로직을 구현하는 예시이다.
import requests
import time
def api_request_with_retry(url, max_retries=3):
retries = 0
while retries < max_retries:
try:
response = requests.get(url)
response.raise_for_status() # 상태 코드가 200이 아닌 경우 예외 발생
return response.json()
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}. Retrying...")
retries += 1
time.sleep(2) # 재시도 간격
return None
result = api_request_with_retry("https://api.example.com/data")
if result:
print(result)
else:
print("Failed to fetch data after retries.")
요청 파라미터 최적화
요청 시 사용하는 다양한 파라미터를 통해 결과를 최적화할 수 있다. 예를 들어, temperature
값은 생성되는 텍스트의 창의성을 제어한다.
response = openai.Completion.create(
engine="text-davinci-003",
prompt="Write a creative story about a dragon and a knight.",
max_tokens=150,
temperature=0.7, # 창의성 정도
top_p=1, # 확률 샘플링의 범위
frequency_penalty=0.5, # 반복 억제
presence_penalty=0.5 # 새로운 주제 유도
)
print(response.choices[0].text.strip())
복잡한 프롬프트 작성 전략
복잡한 프롬프트를 사용하여 특정한 형식이나 패턴을 유도하는 전략이다.
prompt = """
You are a world-class editor. Edit the following paragraph for clarity and precision:
---
The quick brown fox jumps over the lazy dog. It is a sentence that contains every letter of the alphabet,
which makes it useful for testing fonts and keyboards. The dog, however, does not seem to mind.
---
Please rewrite the paragraph to be more concise and engaging.
"""
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=150
)
print(response.choices[0].text.strip())
API 응답 데이터 파싱 및 처리
API 응답 데이터를 처리하고 필요한 부분만 추출하는 코드이다.
response = openai.Completion.create(
engine="text-davinci-003",
prompt="Summarize the following text: The quick brown fox jumps over the lazy dog.",
max_tokens=50
)
generated_text = response.choices[0].text.strip()
print(f"Summary: {generated_text}")
import json
print(json.dumps(response, indent=4))
다중 응답 생성 및 선택
여러 응답을 생성하고 그 중 하나를 선택하는 방법이다.
response = openai.Completion.create(
engine="text-davinci-003",
prompt="Give me three different ways to explain AI to a 5-year-old.",
max_tokens=150,
n=3 # 3개의 응답 생성
)
for idx, choice in enumerate(response.choices):
print(f"Option {idx+1}: {choice.text.strip()}")
대규모 요청 처리 및 Rate Limit 관리
대규모 요청을 처리하는 예시로, Rate Limit을 관리하는 방법을 포함한다.
import openai
import time
def call_openai_in_batches(prompts, batch_size=5):
results = []
for i in range(0, len(prompts), batch_size):
batch = prompts[i:i+batch_size]
try:
responses = openai.Completion.create(
engine="text-davinci-003",
prompt=batch,
max_tokens=100
)
results.extend([choice.text.strip() for choice in responses.choices])
except openai.error.RateLimitError:
print("Rate limit hit. Waiting for 10 seconds...")
time.sleep(10) # Rate limit을 초과할 경우 대기 후 재시도
except Exception as e:
print(f"An error occurred: {e}")
return results
prompts = ["Explain AI.", "What is the capital of France?", "How does a car engine work?"]
responses = call_openai_in_batches(prompts)
print(responses)
캐싱을 활용한 성능 최적화
같은 요청에 대한 결과를 캐싱하여 성능을 최적화하는 방법이다.
import openai
import hashlib
cache = {}
def get_response_with_cache(prompt):
prompt_hash = hashlib.md5(prompt.encode()).hexdigest()
# 캐시 확인
if prompt_hash in cache:
print("Returning cached result.")
return cache[prompt_hash]
# API 호출
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=100
)
# 캐시에 저장
result = response.choices[0].text.strip()
cache[prompt_hash] = result
return result
response1 = get_response_with_cache("Tell me a joke.")
print(response1)
response2 = get_response_with_cache("Tell me a joke.")
print(response2)
자동화된 고객 지원 시스템 구현
ChatGPT API를 사용하여 자동화된 고객 지원 챗봇을 구현하는 기본 예시이다.
conversation_history = [{"role": "system", "content": "You are a customer support bot for an online store."}]
def get_customer_support_response(user_input):
conversation_history.append({"role": "user", "content": user_input})
response = openai.ChatCompletion.create(
model="gpt-4",
messages=conversation_history
)
# 대화 기록에 봇의 응답 추가
bot_response = response['choices'][0]['message']['content']
conversation_history.append({"role": "assistant", "content": bot_response})
return bot_response
user_input = "I need help with my order."
bot_response = get_customer_support_response(user_input)
print(bot_response)
생성된 텍스트 기반 데이터 분석
생성된 텍스트 데이터를 분석하여 유용한 정보를 추출하는 방법을 보여준다.
import openai
response = openai.Completion.create(
engine="text-davinci-003",
prompt="Generate a paragraph about the benefits of exercise.",
max_tokens=100
)
generated_text = response.choices[0].text.strip()
from collections import Counter
import re
# 단어 추출
words = re.findall(r'\b\w+\b', generated_text.lower())
word_count = Counter(words)
# 가장 자주 등장한 단어 출력
print(word_count.most_common(5))
대화형 봇 제작
사용자와의 대화 흐름을 관리하는 대화형 봇을 제작하는 코드이다.
import openai
conversation_history = [{"role": "system", "content": "You are a friendly chatbot."}]
def chatbot(user_input):
conversation_history.append({"role": "user", "content": user_input})
response = openai.ChatCompletion.create(
model="gpt-4",
messages=conversation_history
)
bot_message = response['choices'][0]['message']['content']
conversation_history.append({"role": "assistant", "content": bot_message})
return bot_message
# 사용자와 대화 시뮬레이션
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
bot_response = chatbot(user_input)
print(f"Bot: {bot_response}")
비용 효율적인 API 사용 전략
API 사용량을 줄이면서 효율적인 방법으로 결과를 얻는 전략이다. max_tokens
, temperature
등의 파라미터를 적절하게 조절하여 비용을 절감할 수 있다.
def generate_text(prompt, max_tokens=50, temperature=0.5):
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=max_tokens, # 생성할 토큰 수 제한
temperature=temperature # 창의성 조절
)
return response.choices[0].text.strip()
# 최대 30개의 토큰만 생성
result = generate_text("Describe the importance of sleep.", max_tokens=30)
print(result)
유닛 테스트 및 통합 테스트
API 호출을 테스트하는 유닛 테스트 작성법이다.
import unittest
from unittest.mock import patch
import openai
class TestOpenAIAPI(unittest.TestCase):
@patch('openai.Completion.create')
def test_generate_text(self, mock_create):
# 가짜 응답 정의
mock_create.return_value = {
'choices': [{'text': 'Hello, world!'}]
}
result = openai.Completion.create(
engine="text-davinci-003",
prompt="Say hello",
max_tokens=5
)
self.assertEqual(result['choices'][0]['text'], 'Hello, world!')
if __name__ == '__main__':
unittest.main()
API 응답 시간 최적화
API 응답 시간을 최적화하기 위한 방법으로, 필요한 최소한의 파라미터만 사용하고 요청 크기를 줄이는 방법을 제시한다.
def optimized_request(prompt):
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=50,
temperature=0.3, # 낮은 창의성으로 빠른 응답
n=1, # 응답 1개만 생성
stream=False # 스트리밍 비활성화
)
return response.choices[0].text.strip()
# 최적화된 요청 실행
result = optimized_request("Explain the concept of gravity in simple terms.")
print(result)
지속적 통합(CI) 및 지속적 배포(CD) 설정
CI/CD 파이프라인에서 API를 사용하는 테스트를 설정하는 기본 방법이다.
# .github/workflows/test_openai_api.yml
name: Test OpenAI API
on:
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Run tests
run: |
python -m unittest discover -s tests