목차
최근 생성형 인공지능과 관련하여 AI Agent(인공지능 에이전트)라는 단어가 자주 등장하고 있습니다. 이는 사용자의 요청을 받아서 내용을 분석 및 판단하여 스스로 적절한 작업을 수행하는 인공지능이라 할 수 있습니다. 즉, 진정한 개인 비서가 될 수 있다고 합니다. 하지만, 아직은 갈 길이 먼 초기 단계라 생각됩니다. 관련하여, 오늘은 openai의 AI Agent API의 중요 부분을 살펴보도록 하겠습니다.
OpenAI API 기반 AI Agent 구조
openai가 말하는 agents에 대해서는 홈페이지 문서를 통해 자세하게 설명하고 있어요.
이 문서 내용에서 가장 핵심적인 부분은 “에이전트가 어떠한 단계를 거쳐 사용자의 요청을 처리하는가”입니다. 요약하면, 사용자 입력(Input) → 에이전트 내부 해석(LLM 활용) → 도구 호출(필요시) → 결과 종합 → 최종 출력(Output)의 단계로 진행된다는 것입니다.
사용자가 어떤 요청을 하면, 우선 에이전트는 이 요청이 무엇을 의미하는지 분석합니다. 예를 들어 “최신 뉴스가 궁금하다”는 식으로 ‘최신 정보를 원한다’는 의도가 확실할 경우 에이전트는 뉴스를 검색하죠. 반면 개념 설명이나 사전적 지식에 가까운 요청이라면 자신이 학습한 데이터를 찾아 대응하는 과정을 진행할 거예요.
이러한 프로세스를 위해서 공식 문서에서는 다음과 같은 구성 요소를 말합니다.
- 모델 (Models)
- AI 에이전트의 두뇌 역할을 하며, GPT-4o 등의 모델이 사용됨
- 자연어 처리, 의사 결정, 데이터 분석 등을 수행
- 도구 (Tools)
- 외부 API 호출, 데이터 검색, 함수 실행 등을 담당
- 예를 들어, 뉴스 검색 API, 웹 검색 API와 연동 가능
- 메모리 (Memory)
- 이전 대화 내용을 기억하여 연속적인 맥락을 유지
- 사용자의 요청을 보다 정교하게 이해하고 응답 가능
- 가드레일 (Guardrails)
- AI가 의도하지 않은 방향으로 동작하는 것을 방지
- 콘텐츠 필터링, 정책 준수, 안전성 보장 등의 역할 수행
- 오케스트레이션 (Orchestration)
- 위의 모든 요소를 조합하여 지능형 AI 시스템을 구축
- 다양한 도구와 메모리를 활용하여 자동화된 작업 수행
그런데, 개인적인 생각으로 위와 같이 구성 요소에 대해 언급은 했지만, 현재까지 이러한 요소들을 모두 완성하고 있지는 못한 것 같아요. 이런 점에서 Openai가 뭔가 조급함이 있는 것 아닌가 싶습니다. 도전자들과 경쟁이 심해지고 있으니까요.
하여간, 다시 돌아와서, 결과적으로 현재 수준에서 OpenAI의 AI Agent API의 핵심 구성요소는 크게 Agent, Runner, 그리고 Tools로 보입니다.
- Agent는 사용자의 요청을 이해하고 분석하여 필요한 작업을 결정하는 역할을 합니다.
- Runner는 Agent가 결정한 작업을 실제로 실행하고 결과를 전달합니다.
- Tools는 Agent가 사용할 수 있는 실제 도구들로, 웹 검색이나 뉴스 검색 같은 외부 기능과 연동하여 결과를 가져옵니다.
Function Tool은 외부 기능을 Agent가 쉽게 사용할 수 있게 해주는 장치로, API 호출 같은 복잡한 작업을 단순화하여 Agent가 쉽게 결과를 얻도록 하죠.
Agent와 Function Tool 개념
OpenAI API 에이전트가 단순히 대화를 생성하는 수준이 아니라, 보다 더 수준 높은 인공지능의 활용 방법을 위해서 외부 정보 출처나 기능을 호출하는 도구가 요구되죠. 예를 들어, 사용자에게 최신 뉴스를 제공하려면 언론사를 직접 스크래핑하거나 공공 API를 사용해서 정보를 찾아오거나 하는 행동들 말이죠. 이런 행동을 위해서는 GPT와 같은 모델 내부의 어떤 행동 이외에 외부 시스템과의 연결이 필요해지는데요, 이런 외부 시스템 연결을 쉽게 구현하기 위해 Function Tool 개념이 제안되었습니다.
즉, 일반적인 ‘문답식 챗봇’과 달리, 에이전트는 도구(Function Tool)를 선택하고 문맥(Context)을 갱신하며 최적의 답변 혹은 액션을 결정합니다. 이 결정 과정에서 OpenAI API가 제공하는 GPT 모델의 거대한 언어 이해 능력이 활용되며, 에이전트는 이를 바탕으로 스스로 질문의 성격을 분류해 적절한 해결책을 찾아가게 됩니다.
OpenAI API로 구현하는 AI Agent
문건 전체의 내용은 대부분은 개별적인 객체에 대한 자세한 설명을 포함했을 뿐 개념적인 부분은 앞서 언급한 내용이 가장 핵심적인 부분입니다. 이제 핵심적인 개념을 기반으로 openai AI Agent를 위한 SDK의 중요 객체를 이용하여 실제 데모가 가능한 코드를 작성해 보도록 하겠습니다.
앞서 OpenAI의 AI Agent API의 핵심 요소는 Agent, Runner, Tools이라고 했습니다. 그럼 이러한 객체에 대해 설명하는 부분이 있는지 보죠.

위처럼 SDK 문서에 보기 좋게 나와있네요. 이제 문건의 내용이 맞게 이들 API를 이용하여 코드를 구현해 보죠.
간단한 데모를 구현하기 위해 객체만 나열할 수는 없으니까, 목적과 기능을 단순하게 설정해 볼게요.
- 우선, 인공지능 모델 입장에서 사용자의 입력을 받고 이를 분석하고 판단해야 하죠. 앞서도 설명한 것처럼 이 부분이 Agents가 되죠
- 두 번째로 Agent가 판단한 결과에 따라 실행된 결과를 가져오는 부분입니다. 중요한 것은 최종적인 결과를 가져오는 부분에서 최초에 사용자의 요구를 Agent에 전달해야 한다는 점도 중요합니다. 이 부분이 Runner가 되죠.
- 마지막으로, Agent가 판단하고 액션 할 수 있는 도구, 즉 Agent와 연결된 Tool에 해당하는 부분들을 구현해야 하죠.
데모 앱은 다음과 같이 동작한다고 해보죠.
- 사용자의 요구사항을 입력받습니다.
- 인공지능 모델(GPT-4o)은 사용자의 요구사항이 뉴스 검색이 필요한 것인지, 웹 검색이 필요한 것인지 판단합니다.
- 뉴스 검색이 필요한 경우 네이버 API를 이용해서 뉴스를 검색합니다.
- 웹 검색이 필요한 경우 네이버 API를 이용해서 웹 정보를 검색합니다.
- 실행된 결과를 사용자에게 전달합니다.
이제 순서대로 코드를 구현해 보죠.
우선 Runner 객체와 사용할 수 있는 메서드를 활용해서 함수를 만들었어요. Runner 객체에는 run, run_sync, run_streamed 등 여러 메서드가 정의되어 있어요. 그리고, 각 메서드를 어떻게 구현하는지 자세하게 가이드해 주고 있어요. 저는 다음과 같이 구현했어요. 여기에서 “intelligent_agent”는 Agent에서 선언할 객체를 연결해 줍니다.

사용자의 요구(text)를 query로 담아 runner를 통해 넘겨줍니다. 물론 agent한테 말이죠. 다음은 Agent를 구현해 볼까요?
Agents에는 여러 개의 속성이 있어요. 중요한 속성은 바로 “instructions”, “tool” 그리고 “model” 정도일 것 같아요. 물론 지금 데모를 위해서 말이에요. 필요에 따라 해당하는 속성을 사용하면 됩니다. 다음과 같이 구성했어요.

이제, 중요 요소 중 마지막인 Tool 부분은 구현해 보죠. 이미 Agent에서 정의한 것처럼 동일한 이름의 함수로 구현되어야 하죠. 두 함수의 이름은 “news_search_naver”와 “web_search_naver”로 정의합니다.

여기에서 @function_tool로 구현하는 이유는 openai에서 제공하는 tool이 아니라 제가 만든 도구 함수 이기 때문에 사용하는 거예요. openai에서 제공하는 tool은 다음과 같다고 해요.
Tool = Union[
FunctionTool,
FileSearchTool,
WebSearchTool,
ComputerTool,
]
이 중에서 FunctioTool이 @function_tool로 구현하는 custom 함수라고 생각하면 됩니다. “Tool” 부분에 대해서는 따로 주제로 설정해서 포스팅이 필요할 듯해요. 구현에 여러 가지 방법이 있을 것 같거든요.
하여간, 이렇게 중요 요소 부분을 구현해 봤고요, 이제 실행을 콘솔에서 하면 화면이 그닥 좋지 못하니 간단하게 Streamlit 앱으로 만들어서 실행해 볼게요.

이제 Agent Streamlit 앱을 실행하고 요구 사항을 다음과 같이 입력할게요. 입력 후 “에이전트 실행”을 클릭합니다.
오늘 코스피 관련 중요 이슈가 뭐야
이슈라는 의미를 잘 파악했다면 뉴스를 검색한 결과를 응답할 거예요. 예상과 다르게 액션한다고 해도 등록된 Tool이 두 개이므로, 웹을 검색한 결과를 보일 거고요. 결과를 기다립니다.

위와 같이 결과가 출력되었고, 이 결과가 뉴스 검색의 결과인지 확인을 위해 “펩트론 주가 상승”과 관련한 출처 부분의 정보를 확인합니다. 위 화면의 가장 아래 부분을 보면 news 기사를 확인한 후 내용을 요약했다는 것을 알 수 있었습니다.
openai의 Agent API는 아직 초기 단계라 그런지 완벽한 가이드라기보다는 개념적 방향성을 말하는 부분이 더 많았던 것 같아요. 조만간 더 보충되고, 또 고도화될 것이라 생각해요. 무엇보다 요구와 응답이라는 1:1, one 2 one 서비스에서 스스로 판단하고 액션 한다는 부분, 그리고 Runner라는 객체를 통해 어떤 순간에 어떻게 행동할지 보다 더 능동적으로 실행하고자 하는 모습을 볼 수 있었습니다.
- 생성형 AI 소유권, 챗지피티 지브리 스타일 이미지 사례 #1
- OpenAI API로 구현하는 AI Agent #2, “프로그래밍 AI 에이전트”
- OpenAI API로 구현하는 AI Agent, GPT-4o와 Function Tool 활용
- AI Detector로 AI content 판별이 가능할까? 기준과 현실 #1
- 검색 키워드와 데이터 독점 문제, 오픈API로 키워드 추출 방법 #1