TavilyWebSearch
TavilyWebSearch
TavilyWebSearch 는 LLM 애플리케이션에 최적화된 Tavily AI 검색 API로 웹을 검색하는 컴포넌트예요. 질의를 주면 관련 콘텐츠를 Haystack Document 객체로 돌려주고, 출처 URL 목록도 함께 반환해요.
출처: 문서
본문
개요 (Overview)
TavilyWebSearch 에 질의를 주면 Tavily Search API로 웹을 검색해 관련 콘텐츠를 Haystack Document 객체로 반환해요. 출처 URL 목록도 함께 돌려줘요.
Tavily는 LLM 애플리케이션을 위해 특별히 만들어진 AI 검색 API예요. 전통적인 검색 엔진의 노이즈 없이 깔끔하고 관련 있는 스니펫을 반환해서, RAG 파이프라인에 아주 잘 맞아요.
TavilyWebSearch 는 동작에 Tavily API 키가 필요해요. 기본적으로 TAVILY_API_KEY 환경 변수를 찾고, 초기화 시 api_key 를 직접 전달할 수도 있어요.
사용법 (Usage)
단독으로 쓰기
TavilyWebSearch 가 질의를 기반으로 웹을 검색하고 Document 목록을 반환하는 예시예요.
from haystack_integrations.components.websearch.tavily import TavilyWebSearch
from haystack.utils import Secret
web_search = TavilyWebSearch(
api_key=Secret.from_env_var("TAVILY_API_KEY"),
top_k=5,
)
query = "What is Haystack by deepset?"
response = web_search.run(query=query)
for doc in response["documents"]:
print(doc.content)
파이프라인에서 쓰기
TavilyWebSearch 로 웹에서 답을 찾는 RAG(검색 증강 생성) 파이프라인 예시예요.
from haystack import Pipeline
from haystack.utils import Secret
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack_integrations.components.websearch.tavily import TavilyWebSearch
from haystack.dataclasses import ChatMessage
web_search = TavilyWebSearch(
api_key=Secret.from_env_var("TAVILY_API_KEY"),
top_k=3,
)
prompt_template = [
ChatMessage.from_system("You are a helpful assistant."),
ChatMessage.from_user(
"Given the information below:\n"
"{% for document in documents %}{{ document.content }}\n{% endfor %}\n"
"Answer the following question: {{ query }}.\nAnswer:"
),
]
prompt_builder = ChatPromptBuilder(
template=prompt_template,
required_variables={"query", "documents"},
)
llm = OpenAIChatGenerator(
api_key=Secret.from_env_var("OPENAI_API_KEY"),
)
pipe = Pipeline()
pipe.add_component("search", web_search)
pipe.add_component("prompt_builder", prompt_builder)
pipe.add_component("llm", llm)
pipe.connect("search.documents", "prompt_builder.documents")
pipe.connect("prompt_builder.prompt", "llm.messages")
query = "What is Haystack by deepset?"
result = pipe.run(data={"search": {"query": query}, "prompt_builder": {"query": query}})
print(result["llm"]["replies"][0].text)
더 알아보기 (Learn more)
- ChatPromptBuilder — 채팅 프롬프트를 만드는 빌더
- TavilyFetcher — URL에서 전체 콘텐츠 추출
- Tavily Search API 참조
- GitHub 소스