웹 리서치 자동화하기
요약
본 글은 웹 리서치 자동화를 위한 접근 방식을 탐구하며, 초기에는 복잡한 에이전트 구축을 목표로 했으나 결국 병렬 검색과 정보 수집에 초점을 맞춘 '리트리버(Retriever)' 기반 아키텍처로 진화했음을 설명합니다. 이 새로운 리트리버는 LLM으로 쿼리를 생성하고, 여러 링크를 병렬로 스크래핑하여 벡터스토어에 인덱싱한 후, 검색 증강 생성(RAG) 흐름을 통해 정보를 종합하는 방식을 제시합니다.
핵심 포인트
- 웹 리서치 자동화의 핵심은 복잡한 에이전트보다 효율적인 '리트리버' 구축에 있음.
- LLM으로 여러 쿼리를 생성하고, 링크 스크래핑 및 정보 수집을 병렬로 수행하는 것이 중요함.
- 최종 아키텍처는 검색 증강 생성(RAG) 흐름을 따르지만, 에이전틱 논리 구조를 차용함.
- LangChain 리트리버 구현과 사용 방법을 문서화하여 실질적인 개발 가이드라인을 제공함.
주요 링크
동기 부여
웹 리서치는 LLM의 핵심 응용 분야 중 하나입니다. Greg Kamradt는 이를 자신이 가장 원하는 AI 도구 중 하나로 강조했으며, gpt-researcher와 같은 OSS 저장소도 인기를 얻고 있습니다. 저희도 이에 도전하기로 결정했고, 처음에는 다른 많은 프로젝트들처럼 웹 리서치 에이전트를 구축하는 것을 목표로 삼았습니다. 하지만 예상과는 다르게, 상당히 간단한 검색기(retriever)가 효과적이고 쉽게 구성 가능하다는 것을 알게 되었습니다 (예: PrivateGPT와 같은 프로젝트에서 대중화된 것처럼 개인 정보 보호 모드(private mode)로 실행할 수 있음). 이 블로그에서는 저희의 탐색 과정과 사고 과정, 구축 방법, 그리고 다음 단계에 대해 이야기합니다.
탐색
앞서 언급한 gpt-researcher나 AI 검색 엔진(perplexity.ai) 같은 프로젝트들은 웹 리서치가 어떻게 재구상될 수 있는지 초기적인 단면을 보여줍니다. 저희 역시 많은 이들처럼, 프롬프트와 일련의 도구를 받으면 스스로 웹을 탐색할 수 있는 에이전트를 먼저 구상했습니다! 이를 위해서는 다음 도구가 명확하게 필요했습니다:
- 페이지 검색 및 반환
- 반환된 페이지의 전체 콘텐츠 스크래핑
- 페이지에서 관련 정보 추출
이러한 도구들을 가지고, 에이전트는 인간이 하는 일을 근사치로 수행할 수 있었습니다: 주제를 검색하고, 선택된 링크를 고르고, 유용한 정보를 위해 링크를 훑어본 다음, 반복적인 탐색을 위해 검색으로 돌아가는 것입니다. 저희는 에이전트를 만들고 이 도구들을 제공했지만... 마치 인간처럼 반복적인 검색 과정에서 느리게 서투른 모습을 보였습니다!
개선 사항
저희는 AI가 독특하게 활용할 수 있는 중심적 장점을 발견했습니다: 많은 검색을 병렬로 시작하고, 결과적으로 많은 페이지를 병렬로
수많은 페이지에서 병렬로 수집된 방대한 정보와 함께, 각 페이지에서 가장 관련성 높은 청크(chunk)를 가져와 이를 LLM의 컨텍스트 윈도우에 로드하여 종합하는 것이 합리적이라고 생각했습니다. 물론, 이 지점에서 저희는 저희 에이전트가 리트리버(retriever)로 변모하고 있다는 것을 깨달았습니다! (참고: 여전히 에이전틱 속성(agentic properties)이 이 리트리버에 추가적인 이점을 줄 수 있다고 생각합니다. 이는 마지막에서 논의됩니다.)
검색 (Retrieval)
이 리트리버는 내부적으로 정확히 어떤 작업을 수행할까요? 저희의 생각은 다음과 같습니다:
- LLM을 사용하여 여러 개의 관련성 높은 검색 쿼리를 생성합니다 (LLM 호출 1회)
- 각 쿼리에 대해 검색을 실행합니다
- 쿼리당 상위 K개의 링크를 선택합니다 (여러 검색 호출을 병렬로 수행)
- 선택된 모든 링크에서 정보를 로드합니다 (페이지를 병렬로 스크래핑)
- 해당 문서들을 벡터스토어(vectorstore)에 인덱싱합니다
- 각 원래 생성된 검색 쿼리에 대해 가장 관련성 높은 문서를 찾습니다
종합적으로, 이 단계들은 검색 증강 생성(retrieval augmented generation): 흐름에 속합니다:

하지만 그 논리는 gpt-researcher의 에이전틱 아키텍처와 유사합니다:

비록 이것이 에이전트는 아니지만, 논리의 유사성은 이 접근 방식에 유용한 검증(sanity check) 역할을 합니다. 저희는 새로운 LangChain 리트리버를 만들고 구성과 함께 사용 방법을 문서화했습니다. 예시 질문(LLM 기반 자율 에이전트는 어떻게 작동하나요?)의 경우, LangSmith를 사용하여 프로세스를 시각화하고 검증할 수 있습니다 (여기에서 트레이스 확인). 이 과정에서 리트리버가 합리적인 출처(Lilian Weng의 에이전트에 대한 블로그 게시물)로부터 청크를 로드하고 검색하는 것을 관찰할 수 있습니다:

문서에 언급된 것처럼, 동일한 프로세스는 예를 들어 LlamaV2 및 GPT4all 임베딩을 사용하여
자율적인 웹 리서치 에이전트를 구축하려는 시도로 시작했지만, 상당히 단순하고 효율적이며 사용자 정의가 가능한 검색기(retriever)로 발전했습니다. 하지만 이것은 단지 첫 단계일 뿐입니다. 이 프로젝트는 다음과 같은 많은 에이전트적 속성(agentic properties)을 추가하면 더 좋을 것입니다:
- 초기 검색 후 LLM에게 추가 정보가 필요한지 문의하는 기능
- 최종 답변을 구성하기 위해 여러 '작성(write)' 및 '수정(revision)' 에이전트를 사용하는 기능
만약 이 중 어떤 추가 기능이 흥미롭게 들린다면, 기본 저장소(base repo)에 PR을 열어주세요. 저희가 그것들을 통합할 수 있도록 도와드리겠습니다!
Bard나 Perplexity.ai 같은 대규모 모델의 호스팅된 AI 검색은 매우 성능이 뛰어나지만, 웹 리서치를 위한 작고 가벼운 도구들 역시 사생활 보호(예: 데이터를 외부와 공유하지 않고 노트북에서 로컬로 실행할 수 있는 능력), 구성 가능성(예: 사용할 특정 오픈 소스 컴포넌트를 선택할 수 있는 능력), 그리고 관찰 가능성(예: LangSmith와 같은 도구를 사용하여 '내부적으로' 무슨 일이 일어나고 있는지 들여다볼 수 있는 능력)과 같은 중요한 장점을 가지고 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기