OpenAI API 활용 - 함수 호출과 Assistant API



OpenAI API를 사용하면 GPT 모델을 애플리케이션에 통합하여 자연어 처리, 코드 생성, 대화형 AI 등을 구현할 수 있습니다.



언제 사용하나요?



  • 챗봇, 고객 상담 자동화

  • 문서 요약, 번역 서비스

  • 코드 생성, 리뷰 자동화

  • 데이터 분석 및 인사이트 추출

  • RAG(검색 증강 생성) 시스템 구축



API 키 설정


# 환경 변수 설정
export OPENAI_API_KEY="sk-..."

# Python
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")


기본 Chat Completion


from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "당신은 친절한 AI 어시스턴트입니다."},
{"role": "user", "content": "Python으로 퀵소트 구현해줘"}
],
temperature=0.7,
max_tokens=1000
)

print(response.choices[0].message.content)


Function Calling (함수 호출)


GPT가 외부 함수를 호출하도록 지시할 수 있습니다.


tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "특정 도시의 현재 날씨를 가져옵니다",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "도시 이름 (예: 서울, 부산)"
}
},
"required": ["city"]
}
}
}
]

response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "서울 날씨 알려줘"}],
tools=tools,
tool_choice="auto"
)

# 함수 호출 결과 확인
tool_call = response.choices[0].message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
# {"city": "서울"}


Assistant API (대화 세션 관리)


# 1. Assistant 생성
assistant = client.beta.assistants.create(
name="코딩 도우미",
instructions="당신은 Python 전문가입니다.",
model="gpt-4o",
tools=[{"type": "code_interpreter"}]
)

# 2. Thread(대화 세션) 생성
thread = client.beta.threads.create()

# 3. 메시지 추가
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="피보나치 함수 만들어줘"
)

# 4. 실행
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)

# 5. 완료 대기 및 결과 확인
while run.status != "completed":
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
time.sleep(1)

# 6. 응답 가져오기
messages = client.beta.threads.messages.list(thread_id=thread.id)
print(messages.data[0].content[0].text.value)


Embedding (텍스트 벡터화)


# RAG 시스템용 임베딩
response = client.embeddings.create(
model="text-embedding-3-small",
input="검색할 텍스트"
)

vector = response.data[0].embedding # 1536차원 벡터


이미지 생성 (DALL-E)


response = client.images.generate(
model="dall-e-3",
prompt="한국 전통 한옥 마을 풍경",
size="1024x1024",
quality="standard",
n=1
)

image_url = response.data[0].url


스트리밍 응답


stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "긴 이야기 해줘"}],
stream=True
)

for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")


비용 최적화 팁



  • 간단한 작업은 gpt-4o-mini 사용 (더 저렴)

  • max_tokens 제한으로 비용 관리

  • 시스템 프롬프트 캐싱 활용

  • 배치 API로 대량 요청 시 50% 할인



주요 모델 비교







모델특징용도
gpt-4o최신, 빠름, 멀티모달범용
gpt-4o-mini저렴, 빠름간단한 작업
o1추론 특화복잡한 문제 해결