SerperDevWebSearch
SerperDevWebSearch
SerperDevWebSearch 는 SerperDev API를 사용하는 검색 엔진 컴포넌트예요. 질의를 넣으면 검색 결과로 나온 문서와 링크 목록을 반환해 주죠. 웹 검색을 파이프라인에 넣어 RAG를 구성할 때 자주 쓰여요.
출처: 문서
본문
개요 (Overview)
SerperDevWebSearch 에 질의를 주면 검색과 가장 관련 있는 URL 목록을 돌려줘요. 이때 전체 페이지를 읽는 대신 페이지 스니펫(검색 결과에서 페이지 제목 아래에 표시되는 텍스트 조각)을 이용해 답을 찾아요.
웹 페이지의 본문 내용을 검색하려면 LinkContentFetcher 컴포넌트를 쓰세요.
SerperDevWebSearch 는 동작에 SerperDev 키가 필요해요. 기본적으로 SERPERDEV_API_KEY 환경 변수를 사용하고, 초기화 시점에 api_key 를 직접 넘겨줄 수도 있어요(아래 코드 예시 참고).
대안 검색: Search API를 대안으로 쓰고 싶다면 해당 문서 페이지를 참고하세요.
사용법 (Usage)
SerperDevWebSearch 컴포넌트를 쓰려면 serperdev-haystack 패키지를 설치해야 해요:
pip install serperdev-haystack
단독으로 쓰기
다음은 SerperDevWebSearch 가 질의에 대한 답을 웹에서 찾아, 결과의 내용 스니펫과 URL 문자열을 담은 문서 목록으로 변환하는 예시예요.
from haystack_integrations.components.websearch.serperdev import SerperDevWebSearch
from haystack.utils import Secret
web_search = SerperDevWebSearch(api_key=Secret.from_token(""))
query = "What is the capital of Germany?"
response = web_search.run(query)
파이프라인에서 쓰기
RAG 파이프라인 예시예요. SerperDevWebSearch 로 질의에 대한 답을 찾고, 결과 문서를 LinkContentFetcher 에 넘겨 URL에서 전체 텍스트를 가져와요. 마지막으로 ChatPromptBuilder 와 OpenAIChatGenerator 가 협력해 최종 답변을 만듭니다.
from haystack import Pipeline
from haystack.utils import Secret
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
from haystack.components.fetchers import LinkContentFetcher
from haystack.components.converters import HTMLToDocument
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack_integrations.components.websearch.serperdev import SerperDevWebSearch
from haystack.dataclasses import ChatMessage
from haystack.utils import Secret
web_search = SerperDevWebSearch(api_key=Secret.from_token(""), top_k=2)
link_content = LinkContentFetcher()
html_converter = HTMLToDocument()
prompt_template = [
ChatMessage.from_system("You are a helpful assistant."),
ChatMessage.from_user(
"Given the information below:\n"
"{% for document in documents %}{{ document.content }}{% endfor %}\n"
"Answer question: {{ query }}.\nAnswer:"
),
]
prompt_builder = ChatPromptBuilder(
template=prompt_template,
required_variables={"query", "documents"},
)
llm = OpenAIChatGenerator(
api_key=Secret.from_token(""),
)
pipe = Pipeline()
pipe.add_component("search", web_search)
pipe.add_component("fetcher", link_content)
pipe.add_component("converter", html_converter)
pipe.add_component("prompt_builder", prompt_builder)
pipe.add_component("llm", llm)
pipe.connect("search.links", "fetcher.urls")
pipe.connect("fetcher.streams", "converter.sources")
pipe.connect("converter.documents", "prompt_builder.documents")
pipe.connect("prompt_builder.prompt", "llm.messages")
query = "What is the most famous landmark in Berlin?"
pipe.run(data={"search": {"query": query}, "prompt_builder": {"query": query}})
YAML로 쓰기
위 RAG 파이프라인의 YAML 표현이에요. 웹을 검색하고 결과 페이지를 가져와 텍스트로 변환한 뒤, 내용으로 프롬프트를 만들고 채팅 모델로 답변을 생성해요. 핵심 구조는 아래와 같아요:
components:
search:
init_parameters:
api_key:
env_vars:
- SERPERDEV_API_KEY
strict: true
type: env_var
top_k: 2
type: haystack_integrations.components.websearch.serperdev.websearch.SerperDevWebSearch
fetcher:
type: haystack.components.fetchers.link_content.LinkContentFetcher
converter:
type: haystack.components.converters.html.HTMLToDocument
prompt_builder:
type: haystack.components.builders.chat_prompt_builder.ChatPromptBuilder
llm:
init_parameters:
model: gpt-4o-mini
type: haystack.components.generators.chat.openai.OpenAIChatGenerator
connections:
- receiver: fetcher.urls
sender: search.links
- receiver: converter.sources
sender: fetcher.streams
- receiver: prompt_builder.documents
sender: converter.documents
- receiver: llm.messages
sender: prompt_builder.prompt
참고: 위 YAML은 구조 위주의 요약본이에요. 전체 세부 설정(타임아웃, 리트라이, 각 템플릿 상세 등)은 원문에서 확인할 수 있어요.
추가 자료 (Additional References)
📓 튜토리얼: 조건부 라우팅으로 웹검색 폴백(Fallback) 구축하기
더 알아보기 (Learn more)
- LinkContentFetcher — 검색 결과 URL의 본문 내용 가져오기
- Converters — HTML 등 다양한 형식을 문서로 변환
- SerperDev API 참조
- GitHub 저장소
- 웹검색 폴백 튜토리얼