Exa Search 도구

Exa Search 도구 (ExaSearchTool)

CrewAI의 ExaSearchTool은 가장 빠르고 정확한 웹 검색 API인 Exa를 사용해 에이전트가 웹을 검색할 수 있게 해주는 도구예요. 어떤 쿼리든 가장 관련성 높은 결과를 반환하며, 토큰 효율적인 하이라이트와 전체 페이지 콘텐츠 옵션을 제공합니다.

출처: 문서

본문

ExaSearchTool은 Exa를 사용해 CrewAI 에이전트가 웹을 검색할 수 있게 해줍니다. Exa는 가장 빠르고 정확한 웹 검색 API로, 어떤 쿼리에도 가장 관련성 높은 결과를 반환하며, 토큰 효율적인 하이라이트와 전체 페이지 콘텐츠 옵션을 제공해요.

설치 (Installation)

CrewAI tools 패키지를 설치하세요.

pip install 'crewai[tools]'

환경변수 (Environment Variables)

Exa API 키를 환경변수로 설정하세요.

export EXA_API_KEY='your_exa_api_key'

API 키는 Exa 대시보드에서 받을 수 있어요.

사용 예시 (Example Usage)

CrewAI 에이전트 안에서 ExaSearchTool을 사용하는 방법은 다음과 같습니다.

import os
from crewai import Agent, Task, Crew
from crewai_tools import ExaSearchTool

# 도구 초기화
exa_tool = ExaSearchTool()

# 이 도구를 사용하는 에이전트 생성
researcher = Agent(
    role='Research Analyst',
    goal='Find the latest information on any topic',
    backstory='An expert researcher who finds the most relevant and up-to-date information.',
    tools=[exa_tool],
    verbose=True
)

# 에이전트를 위한 태스크 생성
research_task = Task(
    description='Find the top 3 recent breakthroughs in quantum computing.',
    expected_output='A summary of the top 3 breakthroughs with source URLs.',
    agent=researcher
)

# 크루 구성 후 실행
crew = Crew(
    agents=[researcher],
    tasks=[research_task],
    verbose=True
)

result = crew.kickoff()
print(result)

설정 옵션 (Configuration Options)

ExaSearchTool은 초기화 시 다음 파라미터를 받습니다.

  • type (str, optional): 사용할 검색 유형. 기본값 "auto". 옵션: "auto", "instant", "fast", "deep".
  • highlights (bool 또는 dict, optional): 전체 페이지 대신 쿼리에 가장 관련성 높은 토큰 효율적인 발췌문을 반환. 기본값 True. {"max_characters": 4000} 같은 dict로 설정하거나 False로 비활성화.
  • content (bool, optional): 결과에 전체 페이지 콘텐츠 포함 여부. 기본값 False.
  • api_key (str, optional): 사용자의 Exa API 키. 제공하지 않으면 EXA_API_KEY 환경변수로 폴백.
  • base_url (str, optional): 커스텀 API 서버 URL. 제공하지 않으면 EXA_BASE_URL 환경변수로 폴백.

도구를 호출할 때(또는 에이전트가 호출할 때) 다음 검색 파라미터를 사용할 수 있어요.

  • search_query (str): 필수. 검색 쿼리 문자열.
  • start_published_date (str, optional): 이 날짜 이후 게시된 결과만 필터 (ISO 8601 형식, 예: "2024-01-01").
  • end_published_date (str, optional): 이 날짜 이전 게시된 결과만 필터 (ISO 8601 형식).
  • include_domains (list[str], optional): 검색을 제한할 도메인 목록.

고급 사용법 (Advanced Usage)

대부분의 에이전트 워크플로에는 highlights를 권장합니다. 각 결과에서 가장 관련성 높은 발췌문을 반환하고 전체 페이지 콘텐츠보다 훨씬 적은 토큰을 사용해요.

# 쿼리에 가장 관련성 높은 토큰 효율적인 발췌문 얻기
exa_tool = ExaSearchTool(
    highlights=True,
    type="auto",
)

# 에이전트에서 사용
agent = Agent(
    role="Researcher",
    goal="Answer questions with current web data",
    tools=[exa_tool]
)

철저한 다단계 검색에는 type="deep"을 사용하세요.

exa_tool = ExaSearchTool(
    highlights=True,
    type="deep",
)

하이라이트와 전체 콘텐츠 중 선택에 대한 자세한 내용은 Exa 검색 모범 사례를 참고하세요.

MCP로 Exa 사용하기 (Using Exa via MCP)

에이전트를 Exa의 호스팅 MCP 서버에 연결할 수도 있어요. x-api-key 헤더로 API 키를 전달하세요.

from crewai import Agent
from crewai.mcp import MCPServerHTTP

agent = Agent(
    role="Research Analyst",
    goal="Find and analyze information on the web",
    backstory="Expert researcher with access to Exa's tools",
    mcps=[
        MCPServerHTTP(
            url="https://mcp.exa.ai/mcp",
            headers={"x-api-key": "YOUR_EXA_API_KEY"},
        ),
    ],
)

API 키는 Exa 대시보드에서 받으세요. CrewAI의 MCP에 대한 자세한 내용은 MCP 개요를 참고하세요.

기능 (Features)

  • 토큰 효율적인 하이라이트: 각 결과에서 가장 관련성 높은 발췌문을 얻습니다. 전체 텍스트보다 토큰이 약 10배 적어요
  • 시맨틱 검색: 키워드가 아닌 의미를 기반으로 결과 찾기
  • 전체 콘텐츠 검색: 검색 결과와 함께 웹 페이지의 전체 텍스트 가져오기
  • 날짜 필터링: 게시 날짜 필터로 결과를 특정 기간으로 제한
  • 도메인 필터링: 특정 도메인으로 검색 제한

EXASearchTool은 ExaSearchTool의 deprecated 별칭입니다. 기존 import는 계속 동작하지만 deprecation 경고를 내보내니, ExaSearchTool로 마이그레이션해 주세요.

리소스 (Resources)

더 알아보기 (Learn more)