SearchApiWebSearch

SearchApiWebSearch

Search API를 사용하는 검색 엔진 컴포넌트예요.

출처: 문서

본문

항목 내용
파이프라인에서 가장 흔한 위치 LinkContentFetcher 또는 Converters 앞
필수 init 변수 api_key: SearchAPI API 키. SEARCHAPI_API_KEY 환경 변수로 설정 가능
필수 run 변수 query: 검색 쿼리를 담은 문자열
출력 변수 documents: 문서 목록. links: 결과 링크 문자열 목록
API reference SearchApi
GitHub 링크 searchapi 통합
패키지 이름 searchapi-haystack

개요

SearchApiWebSearch에 쿼리를 주면 검색에 가장 관련 있는 URL 목록을 반환해요. 답을 찾을 때 전체 페이지가 아니라 페이지 스니펫(검색 결과에서 페이지 제목 아래에 표시되는 텍스트 조각)을 사용해요.

웹 페이지의 콘텐츠를 검색하려면 LinkContentFetcher 컴포넌트를 사용하세요.

SearchApiWebSearch는 동작하려면 SearchApi 키가 필요해요. 기본적으로 SEARCHAPI_API_KEY 환경 변수를 사용하죠. 또는 초기화 시 api_key를 전달할 수도 있어요 — 아래 코드 예시를 보세요.

대안 검색: Serper Dev를 대안으로 사용하려면 해당 문서 페이지를 참고하세요.

사용법

SearchApiWebSearch 컴포넌트를 사용하려면 searchapi-haystack 패키지를 설치하세요:

pip install searchapi-haystack

단독으로 사용하기

SearchApiWebSearch가 쿼리에 대한 답을 웹에서 찾고, 결과를 콘텐츠 스니펫이 담긴 문서 목록과 URL 문자열로 변환하는 예시예요.

from haystack_integrations.components.websearch.searchapi import SearchApiWebSearch
from haystack.utils import Secret

web_search = SearchApiWebSearch(api_key=Secret.from_token("<your-api-key>"))
query = "What is the capital of Germany?"
response = web_search.run(query)

파이프라인에서 사용하기

SearchApiWebSearch로 쿼리에 대한 답을 찾는 RAG 파이프라인 예시예요. 결과 문서는 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.searchapi import SearchApiWebSearch
from haystack.dataclasses import ChatMessage

web_search = SearchApiWebSearch(api_key=Secret.from_token("<your-api-key>"), 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("<your-api-key>"),
)

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}})

더 알아보기 (Learn more)