반응형

OpenAI API를 활용한 챗봇 만들기: Responses 객체, 함수 호출(Function Calling) 중심 실전 가이드

반응형
요즘 챗봇 하나쯤은 누구나 만들어보고 싶지 않으신가요? OpenAI API의 Responses 객체만 잘 활용해도, 꽤나 똑똑한 챗봇을 뚝딱 만들 수 있습니다!

 

 

안녕하세요, 개발자 여러분! 오늘은 OpenAI API를 활용한 챗봇 만들기에 대해 아주 실용적인 내용을 소개해 드리려 합니다. 특히 Responses 객체를 중심으로, OpenAI GPT-4 모델을 직접 호출하고 원하는 방식으로 응답을 처리하는 실전 코드 예제까지 담아볼게요.
초보자도 따라할 수 있도록 환경설정부터 챗봇 완성까지 하나하나 쉽게 풀어드립니다. 단순한 이론 설명이 아니라, 실제로 돌아가는 코드 중심으로 준비했으니 따라오시기만 하면 돼요. 그럼 시작해볼까요?

1. OpenAI API와 Responses 객체란? 🤖

OpenAI API는 대화형 인공지능 모델(GPT-4 등)을 외부 애플리케이션에서 손쉽게 사용할 수 있도록 만들어진 API입니다. 특히 최근에는 Responses 객체가 추가되면서 훨씬 더 유연하고 다양한 기능을 제공하게 되었죠.

📌 Responses 객체의 주요 특징

  • 텍스트, 이미지 입력을 모두 지원하고 텍스트로 출력
  • 이전 응답의 출력값을 다음 입력으로 연동 가능 (상태 기반 대화 구현에 유리)
  • 함수 호출(Function Calling)과 외부 도구 연동 기능 포함
  • 웹 검색, 파일 검색, 이미지 생성 같은 Built-in Tools와의 통합도 쉬움

💬 예제 코드로 보는 Responses 사용법

Responses API를 사용하는 가장 기본적인 예제는 아래와 같습니다. 아주 간단하게 GPT-4에게 유니콘 이야기를 한 줄로 만들어달라고 요청하죠.

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY")

response = client.responses.create(
    model="gpt-4.1",
    input="Write a one-sentence bedtime story about a unicorn."
)

print(response.output_text)

출력 결과는 다음과 같습니다:

Under the soft glow of a silver moon, a gentle unicorn named Luna tiptoed through a field of twinkling stars, carrying sweet dreams to every sleepy child.

어때요? 단 한 줄로도 감성이 폭발하죠 😍 이처럼 Responses 객체를 사용하면 다양한 입력을 넣고 그에 맞는 자연스러운 응답을 받을 수 있다는 점이 매우 강력합니다.

정리하자면...

  1. Responses 객체는 GPT-4.1을 활용한 최신 인터페이스
  2. 단순 텍스트 입력 뿐 아니라 구조화된 함수 호출, 파일 검색, 웹 검색 등도 가능
  3. 챗봇 구현 시 매우 직관적이고 강력한 도구

이제 Responses 객체가 어떤 역할을 하는지 감이 좀 오셨죠? 다음 단계에서는 OpenAI API를 사용하기 위한 환경 설정부터 시작해봅시다.

2. 환경 설정: API 키, SDK 설치 🛠️

Responses API를 사용하기 위해서는 먼저 개발 환경을 세팅해야 합니다. 여기에는 OpenAI API 키 등록, 공식 라이브러리 설치, 기본 테스트까지 포함됩니다. 이 과정을 정확히 해줘야 이후 챗봇 개발이 매끄럽게 진행될 수 있어요.

🔑 STEP 1: OpenAI API Key 발급

  1. OpenAI API Key 페이지에 접속
  2. ‘Create new secret key’ 버튼을 눌러 키 생성
  3. 생성된 키를 복사해서 환경변수 또는 config 파일에 저장

⚠️ 주의: 이 키는 외부에 유출되면 요금이 부과될 수 있으니 절대 깃허브에 올리지 마세요!

💻 STEP 2: SDK 설치 및 환경변수 등록

OpenAI의 공식 파이썬 라이브러리인 openai 모듈을 설치해봅시다.

pip install openai

설치가 완료되면 API 키를 등록해줍니다. 운영체제에 따라 명령어가 다릅니다.

운영체제 명령어
Windows setx OPENAI_API_KEY "your_api_key_here"
macOS/Linux export OPENAI_API_KEY="your_api_key_here"

💡 환경변수 등록 후에는 반드시 터미널 재시작!

📋 STEP 3: 정상 작동 확인

간단한 API 호출 예제로 환경 구성이 잘 되었는지 확인해봅시다.

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-4.1",
    input="Say hello to Korea!"
)

print(response.output_text)

정상적으로 “Hello Korea!” 같은 메시지가 출력되면, 준비 완료입니다 🎉

이제 본격적으로 챗봇 기능을 구현하는 다음 단계로 넘어가 볼게요!

3. Responses API 기본 예제 따라하기 🧪

이제 본격적으로 Responses API를 사용해서 다양한 스타일의 챗봇 응답을 생성해보겠습니다. 아래 예제들은 단순한 질문-응답부터, 스타일이 가미된 응답까지 다양하게 다뤄볼게요. GPT-4.1 모델을 사용하며, 챗봇의 말투나 성격도 지정할 수 있는 점을 꼭 확인해보세요!

🌈 예제 1: 기본적인 단문 응답

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-4.1",
    input="Write a one-sentence bedtime story about a unicorn."
)

print(response.output_text)

이 코드를 실행하면 아주 아름답고 감성적인 한 줄짜리 동화가 반환됩니다. 예를 들어:

“Under the soft glow of a silver moon, a gentle unicorn named Luna tiptoed through a field of twinkling stars...”

🏴‍☠️ 예제 2: 말투 커스터마이징 (해적 말투)

response = client.responses.create(
    model="gpt-4.1",
    instructions="Talk like a pirate.",
    input="Are semicolons optional in JavaScript?"
)

print(response.output_text)

이제 GPT가 해적처럼 말하게 됩니다. 유쾌하고 독특한 응답이 출력되죠!

“Arrr matey! Semicolons be like rum on a pirate ship...”

🧠 예제 3: 역할(Role) 기반 메시지 설정

GPT에게 ‘개발자(Developer)’와 ‘사용자(User)’ 역할을 부여해 맥락 있는 대화를 만들어보는 예제입니다.

response = client.responses.create(
    model="gpt-4.1",
    input=[
        {
            "role": "developer",
            "content": "Talk like a pirate."
        },
        {
            "role": "user",
            "content": "Are semicolons optional in JavaScript?"
        }
    ]
)

print(response.output_text)

👆 이 구조는 Function Calling에도 쓰이는 매우 중요한 메시지 포맷이에요. Responses API는 role에 따라 대화 흐름을 정교하게 조정할 수 있는 점이 강력합니다!

💡Tips:

  • developer: 시스템 수준의 규칙, 말투, 스타일을 정의합니다.
  • user: 실제 사용자가 던지는 질문이나 요청입니다.
  • assistant: 모델이 생성한 응답입니다.

이제 Responses API의 기본적인 사용법과 구조에 익숙해졌다면, 다음 단계에서는 Function Calling을 통해 챗봇이 외부 함수를 호출하고 결과를 응답하는 기능까지 구현해보겠습니다!

4. 함수 호출(Function Calling)로 챗봇 능력 확장 ⚙️

GPT 챗봇이 정말 '스마트'해지려면, 단순히 텍스트만 생성하는 것에 그치지 않고 외부 데이터를 받아서 처리하거나, 함수를 호출해주는 기능이 필요합니다. 그게 바로 GPT-4의 Function Calling 기능이에요!

🔍 Function Calling이란?

  • GPT가 텍스트 응답 대신 함수를 호출하듯 JSON으로 명령을 내려주는 기능
  • 개발자가 정의한 함수에 맞춰 GPT가 적절한 인자를 생성해 호출해달라고 요청
  • 실제 호출은 우리가 정의한 함수가 처리하고 결과를 다시 GPT에게 넘김

🌦️ 예제: 현재 날씨 조회 함수 만들기

사용자의 질문이 “오늘 파리 날씨 어때?”일 때, GPT는 get_weather() 함수를 호출해달라고 요청합니다. 그 함수는 실제 API를 호출하거나 하드코딩된 결과를 리턴하죠.

① 함수 정의

def get_weather(latitude, longitude):
    import requests
    url = f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}&current=temperature_2m"
    response = requests.get(url)
    data = response.json()
    return data['current']['temperature_2m']

② 함수 메타데이터 전달

tools = [{
    "type": "function",
    "name": "get_weather",
    "description": "Get current temperature for provided coordinates.",
    "parameters": {
        "type": "object",
        "properties": {
            "latitude": {"type": "number"},
            "longitude": {"type": "number"}
        },
        "required": ["latitude", "longitude"]
    },
    "strict": True
}]

③ 함수 호출 요청 및 실행 흐름

input_messages = [{"role": "user", "content": "What's the weather like in Paris today?"}]

response = client.responses.create(
    model="gpt-4.1",
    input=input_messages,
    tools=tools,
)

tool_call = response.output[0]
args = json.loads(tool_call.arguments)

result = get_weather(args["latitude"], args["longitude"])

이렇게 모델이 요청한 파라미터에 맞게 get_weather() 함수를 실행한 후, 결과를 GPT에게 다시 넘기면 모델이 다음 응답을 자연스럽게 만들어줍니다.

input_messages.append(tool_call)
input_messages.append({
    "type": "function_call_output",
    "call_id": tool_call.call_id,
    "output": str(result)
})

response2 = client.responses.create(
    model="gpt-4.1",
    input=input_messages,
    tools=tools,
)

print(response2.output_text)

✨ 결과 예시

The weather in Paris today is quite warm, with a temperature of 34.8°C. Don’t forget to hydrate!

놀랍죠? 이제 챗봇이 단순한 말뿐 아니라, 직접 데이터를 가져와 응답하는 데까지 진화했어요!

이제 Function Calling의 핵심은 이해했으니, 다음 단계에서는 Streamlit을 활용해 이 챗봇을 시각적으로 보여주는 프론트엔드를 만들어볼게요!

5. Streamlit으로 챗봇 UI 만들기 🖥️

OpenAI API로 백엔드 챗봇 로직을 완성했다면, 이제는 사용자가 직접 입력하고 결과를 볼 수 있도록 프론트엔드 화면을 만들어야겠죠? 가장 빠르고 쉬운 방법이 바로 Streamlit입니다. 몇 줄의 코드로 완성도 높은 챗봇 UI를 만들 수 있어요.

🚀 Streamlit 설치 및 기본 실행

pip install streamlit
streamlit hello

설치 후 streamlit hello 명령어로 실행하면 기본 샘플 앱이 열립니다. 웹 브라우저에 자동으로 실행되며, 마치 SPA처럼 페이지 전환 없이 인터랙티브한 화면을 보여주죠!

💬 챗봇 UI 구성 요소

  • st.title() – 앱의 제목을 보여주는 상단 타이틀
  • st.text_input() – 사용자 질문 입력창
  • st.button() 또는 st.form() – 전송 버튼 처리
  • st.write() – 대화 기록 출력

🧪 간단한 챗봇 UI 예제

import streamlit as st

st.set_page_config(page_title="Math Tutor Chatbot")
st.title("수학 튜터 챗봇")
st.write("수학에 대해 궁금한 점을 질문해보세요.")

st.divider()

with st.form("chat_form", clear_on_submit=True):
    question = st.text_input("질문을 입력하세요", label_visibility="collapsed")
    submitted = st.form_submit_button("Send")

    if submitted and question:
        # 여기에 OpenAI 응답 코드 삽입
        st.write(f"사용자: {question}")
        st.write("GPT 응답: ...")

Streamlit 앱에서는 st.form()st.text_input()을 함께 사용하면 사용자가 Enter만 눌러도 즉시 반응하도록 만들 수 있어요. GPT 응답은 st.write()로 보여주면 되고, 스트리밍 응답이 필요할 땐 st.write_stream()도 쓸 수 있습니다.

📌 챗봇 완성 흐름 요약

  1. 사용자 입력을 받아 messages에 추가
  2. call_openai() 함수로 Responses API 호출
  3. function_call이 있을 경우 → 함수 실행 → 결과 재전달
  4. 최종 assistant 응답을 화면에 출력

이제 OpenAI Responses + Streamlit 조합으로 누구나 멋진 챗봇 UI를 만들 수 있습니다. 그럼 다음 단계에서는 이 모든 것을 합쳐서 완성된 챗봇 통합 구조를 만들어보겠습니다!

6. Responses 기반 대화형 챗봇 완성하기 🧠💬

이제 우리가 준비한 모든 것을 종합해서 OpenAI Responses API + Function Calling + Streamlit UI를 통합한 진짜 챗봇을 완성할 시간입니다. 핵심은 단 하나, 사용자 입력에 따라 상황에 맞게 답하거나 함수 호출 결과를 응답에 자연스럽게 녹여내는 거예요.

🧩 핵심 함수 1: call_openai()

def call_openai(messages, functions=None, function_call="auto"):
    response = openai.ChatCompletion.create(
        model="gpt-4.1",
        messages=messages,
        functions=functions,
        function_call=function_call
    )
    return response

대화 메시지와 함수 정의를 받아 모델에게 호출을 요청하는 핵심 함수입니다.

🛠️ 핵심 함수 2: handle_function_call()

import json

def handle_function_call(function_call, messages):
    try:
        func_name = function_call["name"]
        args = json.loads(function_call["arguments"])
    except (KeyError, json.JSONDecodeError):
        result = "함수 호출 인자 오류"
        func_name = function_call.get("name", "unknown")
    else:
        if func_name == "get_weather":
            result = str(get_weather(**args))
        else:
            result = "알 수 없는 함수 호출"

    messages.append({
        "role": "function",
        "name": func_name,
        "content": result
    })
    return messages

GPT가 요청한 함수 호출 명령을 해석하고, 실제로 파이썬 함수를 실행한 뒤 결과를 다시 메시지로 넣어주는 함수입니다.

🎯 최종 통합 함수: chat()

def chat(user_input, messages, functions):
    messages.append({"role": "user", "content": user_input})
    response = call_openai(messages, functions, function_call="auto")
    reply = response.choices[0].message

    if "function_call" in reply:
        handle_function_call(reply["function_call"], messages)
        response2 = call_openai(messages, functions)
        final_reply = response2.choices[0].message
        return final_reply.get("content", str(final_reply))
    else:
        return reply.get("content", str(reply))

이제 이 함수를 Streamlit의 전송 버튼 아래에 연결해주면, 사용자 질문 → GPT 응답 or 함수 호출 → 최종 응답까지 완전 자동화된 챗봇 흐름이 완성됩니다!

📌 전체 흐름 요약

  1. 사용자 입력 → chat() 함수 전달
  2. GPT가 응답 또는 함수 호출 요청
  3. handle_function_call()이 함수 실행
  4. 실행 결과를 포함하여 다시 GPT 호출
  5. 최종 응답을 사용자에게 보여줌

이렇게 Responses API, Function Calling, Streamlit UI가 완벽히 결합된 챗봇을 만들 수 있습니다! 여러분도 나만의 GPT 챗봇을 지금부터 시작해보세요. 진짜 어렵지 않아요 🙂

🧷 마무리: 나만의 챗봇, 지금 시작해보세요!

지금까지 OpenAI Responses API를 중심으로 GPT-4 챗봇을 만드는 과정을 함께 따라왔어요. 텍스트 응답에서 함수 호출까지, 그리고 그 결과를 바탕으로 유용한 대답을 해주는 대화형 챗봇까지 만들어봤죠.

단순한 지식 응답을 넘어, 외부 시스템과 통신하거나 실제 데이터를 불러오는 능력을 갖춘 챗봇은 더 이상 먼 미래의 기술이 아닙니다. 여러분도 이 글에 나온 예제 코드를 바탕으로 나만의 업무 보조, 공부 도우미, 데이터 처리 챗봇을 직접 만들 수 있어요!

 

OpenAI의 Responses 객체는 더 이상 단순한 텍스트 생성 도구가 아닙니다. 그것은 실시간 의사결정, 외부 함수 호출, 도구 기반 응답 생성까지 가능한 차세대 챗봇 인터페이스의 핵심이에요.

 

한 줄 요약하자면? Responses를 제대로 이해하고 활용하는 순간, 여러분은 챗봇 개발자가 됩니다.

이제 여러분의 손에 달렸습니다. 간단한 텍스트 챗봇에서 시작해서, 자신만의 AI 도우미를 만들어보세요. 지금 시작해도 절대 늦지 않았습니다 :)

반응형

+ Recent posts