챗봇 web serach tool 추가 작업

강냉쓰·2026년 10월 2일

강냉쓰의 흔적

목록 보기
4/22

현재 챗봇에는 두가지 모델을 제공하고있다.
gpt-5-mini
gpt-4.1-nano

이렇게 두개인데 open ai 공식 홈페이지에는 gpt-5-mini 는 web search tool을 붙일 수 있다.
그래서 gpt-5 에만 web search tool 을 추가하는 작업을 해보려고 한다.

우선 여기에 web search tool 을 어떻게 붙일 수 있는지 간단한 파이썬 코드가 있다.

from openai import OpenAI
client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    tools=[{"type": "web_search"}],
    input="What was a positive news story from today?"
)

print(response.output_text)

여기서 client.responses.create 를 사용중인데 내 프로젝트는 어떤걸 쓰는지 파악이 필요했다.

우선 python 코드로 간단하게 동작 테스트를 해봤다. 위 예제는 gpt-5지만 내가 사용하는 모델은 gpt-5-mini 였기 때문에 이것도 동작하는지 테스트했고, 정상작동을 확인했다.
그리고 혹시 지원하지 않는 모델을 사용했을때 어떤 에러가 발생하는지도 확인했다.

만약 똑같이 tools에 web_search를 추가해서 모델만 다르게 요청을 해도 지원되는 모델같은 경우에는 툴을 사용하고, 지원하지 않는 모델 같은 경우에는 툴을 사용하지 않은 응답을 생성하는지 확인했지만 400 에러가 발생했다. 에러 내용은 지원되지않는 모델을 사용했기 때문..

그럼 어딘가에 모델 목록 뿐만 아니라 web search 를 지원하게 할지 안할지도 기록해놓는 곳이 필요했다. 현재 모델의 목록은 프론트엔드에서 어쩌피 드롭박스에서 선택을 하여 생성하기때문에 거기에만 하드코딩이 되어있었지만 백엔드에서도 web search 가 필요한지 안한지를 알 수 있어야했기 때문에 고민이 필요했다.

우선 gemini 한테 내가 파악하고있는 사실을 토대로 구현해달라고 하니 frontend, backend 모두 models와 web search 가 지원되는지를 다 적어놓고 사용하는걸로 했다. 나는 두개가 나뉘어져있으면 유지보수가 좋지않아 어딘가 한곳에 있는게 좋다고 생각했다. 방안을 gemini 한테 물어보니 두가지 방법을 제안했다.

첫번재 방법은 요청을 보낼때마다 frontend 에서 web search 를 사용할지를 계속 보내는 방법이었는데 이 방법은 frontend 에서 잘못된 요청을 보내도 backend 에서 확인없이 바로 수행해버리는 문제가 발생할것같아 별로였고,
두번째 방법은 backend 에서 알고있고 frontend 에서 지원되는 모델 목록을 요청받아 보여주는거였는데, 이럴경우 봇을 생성할때 봇 목록을 가져와야 하기 때문에 약간의 딜레이가 발생할 수 있었다. 하지만 목록을 받아오는 시점을 생성할때가 아니라 어쩌피 변할게 없기때문에 페이지 로드시, 같은 시점으로 하면 해결될것이라 생각해서 두번째 방법으로 구현했다.

하드코딩된 모델 목록과 web search 지원 여부를 backend 에서 가지고있고 그것을 기반으로 web search 요청하는 로직을 추가한 후 빌드해서 실행해보았다.
결과는 역시나 실패.. 확인해보니 web search 가이드에서 사용하고있는 코드와 달랐다.

내 프로젝트가 사용하고있는 코드는

const stream = await openai.chat.completions.create({
            model: conversationConfig.model_name || 'gpt-3.5-turbo',
            messages: apiMessages,
            stream: true,
          });

이거고 가이드 하고있는 코드는

from openai import OpenAI
client = OpenAI()

response = client.responses.create(
    model="gpt-5",
    tools=[{"type": "web_search"}],
    input="What was a positive news story from today?"
)

print(response.output_text)

이거였다.

주요 차이점은 openai.chat.completions.create 와 client.responses.create.
둘의 차이를 알아보니 openai.chat.completions.create가 표준 API고, client.responses.create는 간결한 API 라는 차이가 있었다.

사실 둘의 차이를 모르겠는데 web search 는 표준 API는 지원하지 않았고, 간결한 API 버전 에서만 지원했다.
두가지 중 하나만 시도해도 되지만 지금까지 표준 API로 모든것들이 정상적으로 동작했기에 이 부분을 놓칠 순 없었다. 그래서 간결한 API로 먼저 시도한 후 실패 에러코드가 나면 표준 API로 시도하게했다. 그리고 표준 API 에는 web search 가 어쩌피 동작하지 않으니 조건에 의한 분기없이 그냥 제거했다.

그렇게 모두 빌드 후 정상작동을 확인했다.

그런데 봇을 생성할때 봇 목록이 안보인다.. 깜빡하고 해당 테스트를 못했는데 모델을 얻어오는 주소를 엉뚱한걸 넣고 있었다.
이미 잘 얻어오고있는 다른 방식과 통일하게 수정해서 고쳤다.


원문 및 최신 수정본: 내 웹페이지

profile
개발하다가 나온 여러가지 고민과 그에 대한 해결책들을 간결하지않고 일기처럼 끄적여봅니다.

0개의 댓글