이번 글에서는 OpenAI의 Agent SDK를 이용해 복잡한 질문에 대한 깊이 있는 답변을 제공하는 Deep Research Agent를 구현하는 과정에 대해 설명합니다.
Deep Research란?
여러 단계의 정보 검색과 추론을 반복적으로 수행하여 보다 심층적이고 복합적인 질문에 대한 종합적인 답변을 생성하는 프로세스를 의미합니다. 이전 글(전통 RAG의 한계와 ReAct 기반 Tool-Using 에이전트)에서 "ReAct: Synergizing Reasoning and Acting in Language Models"의 개념에 대해 소개해드렸는데요, 이 논문은 언어 모델이 추론(reasoning)과 행동(acting)을 반복적으로 수행하여 복잡한 문제를 해결하는 방법론을 제시하고 있습니다.
참고: ReAct: Synergizing Reasoning and Acting in Language Models 논문 원문 - https://arxiv.org/abs/2210.03629
2025.07.20 - [AI engineering/AI agent] - 전통 RAG의 한계와 ReAct 기반 Tool-Using 에이전트로 멀티홉 추론 해결하기
전통 RAG의 한계와 ReAct 기반 Tool-Using 에이전트로 멀티홉 추론 해결하기
전통 RAG의 한계 (Retrieval-Augmented Generation의 한계)RAG(Retrieval-Augmented Generation)는 대형 언어 모델(LLM)이 응답을 생성할 때, 외부 지식베이스에서 관련 정보를 검색하여 활용하는 기법입니다. 예를 들
develiro.tistory.com
간단한 Deep Research Agent 흐름
그럼 실제로 Deep Research Agent가 이러한 추론 - 행동을 반복하도록 Python으로 간단히 구현해보겠습니다.
사용자가 질문을 날리면, Planner Agent가 탐색에 대한 계획을 세우고, Research Agent가 필요한 정보를 탐색해줄 겁니다.
이때 Planner Agent는 단순히 탐색 순서를 정하는 것 뿐만 아니라, 사용자 질문의 특성에 따라 두 개의 Agent 중 어떤 Agent로 분기할지 선택해줄 것입니다.
Resaerch Agent의 두 가지 종류입니다:
- Wikipedia Agent: 일반적인 지식들과 역사적인 사실이 기록된 위키피디아 지식백과의 내용을 저장해둔 DB를 탐색하는 Agent
- Perplexity Agent: 최근 이벤트와 뉴스 등 최신 정보에 대한 접근이 필요할 때 Perplexity API를 활용하여 검색하는 Agent
이제 Synthesizer Agent가 얻은 정보를 통합하고 재추론을 할지 판단 및 보고서를 생성해줍니다.
생성된 결과물은 다시 llm이 품질 검사를 실행하죠.
위 그림과 같이 Deep Research Agent의 흐름을 크게 5단계로 도식화해보았습니다.
- Planner Agent (계획 수립)
- 사용자가 질문을 입력하면, Planner Agent가 이를 분석하여 어떤 정보를 어디에서 찾아야 하는지 계획을 수립합니다.
- 예시: "애플의 소프트웨어 엔지니어링 총괄 부사장의 학력은 어디인가요?"라는 질문을 받으면 Planner Agent는 이를 단계별로 나누어 필요한 검색 키워드를 결정합니다.
- Research Agents (정보 탐색)
- Planner Agent의 계획에 따라 Wikipedia Search Agent와 Perplexity Agent와 같은 하위 Agent들이 실제 정보를 검색합니다.
- Wikipedia Search Agent는 위키피디아에서 정보를 검색하고, Perplexity Agent는 웹에서 다양한 소스를 활용해 최신 정보를 탐색합니다.
- Synthesizer Agent (정보 종합)
- 각각의 Research Agent가 찾은 정보를 Synthesizer Agent가 받아서 이를 통합하고 정리하여 하나의 종합적인 답변으로 만듭니다.
- 재탐색 (필요시)
- 만약 Synthesizer Agent가 정보가 부족하거나 추가 탐색이 필요하다고 판단하면, 다시 Planner 단계로 돌아가 추가 검색을 진행합니다.
- LLM-as-a-Judge (품질 검증)
- 최종적으로 만들어진 답변은 대형 언어 모델(LLM)에 의해 평가되어 답변의 품질을 검증받습니다.
main 함수로만 간단히 위 단계들의 구조를 살펴보겠습니다.
async def _main(question: str, gr_messages: list[ChatMessage]):
# Agent 초기화 코드 생략
# 사용자 질문 입력
gr_messages.append(ChatMessage(role="user", content=question))
# Planner Agent로부터 검색 계획 생성
search_plan = await _create_search_plan(planner_agent, question)
# 각 단계별로 Research Agents를 사용하여 정보 검색
for step in search_plan.search_steps:
if step.agent_type == "perplexity":
agent = perplexity_agent
else:
agent = knowledge_search_agent
response = await agents.Runner.run(agent, input=step.search_term)
search_results.append(response.final_output)
# Synthesizer Agent가 최종 답변 생성
synthesizer_agent_response = await _generate_final_report(
synthesizer_agent, search_results, question
)
report = synthesizer_agent_response.final_output_as(ResearchReport)
# 최종 보고서를 사용자에게 제공
gr_messages.append(
ChatMessage(
role="assistant",
content=f"Final Research Report\n\n📝 Summary:\n{report.summary}\n\n📄 Full Report:\n{report.full_report}",
)
)
마무리
이러한 구조로 Deep Research Agent를 구현하면 복잡한 질문에 대해서도 체계적이고 정확한 답변을 얻을 수 있습니다. 각 단계의 Agent들이 명확한 역할을 수행하면서 효율적이고 신뢰할 수 있는 답변을 만들어줍니다.
'AI engineering > AI agent' 카테고리의 다른 글
전통 RAG의 한계와 ReAct 기반 Tool-Using 에이전트로 멀티홉 추론 해결하기 (7) | 2025.07.20 |
---|---|
Cursor보다 좋고 싸다: Mac에서 Gemini CLI 사용하기 (3) | 2025.07.06 |
노코딩으로 초간단 chatGPT 창작 작문 AI 에이전트 만들기 - FlowiseAI (0) | 2025.01.31 |
FlowiseAI 설치방법: 코딩 없이 쉽게 나만의 챗봇, 추천 시스템을 만드는 툴 (1) | 2025.01.01 |