[랭체인] Agentic Search: 더 스마트한 웹 검색 방법steemCreated with Sketch.

in #kr-dev4 months ago (edited)

안녕하세요, 여러분! 오늘은 웹 검색의 새로운 패러다임인 "Agentic Search"에 대해 자세히 알아보겠습니다. 이 혁신적인 기술이 어떻게 작동하는지 실제 코드 예제와 함께 살펴보겠습니다.

Agentic Search란?

Agentic Search는 인공지능(AI)을 활용하여 보다 정확하고 관련성 높은 검색 결과를 제공하는 고급 검색 기술입니다. 이 기술은 단순히 키워드를 매칭하는 것을 넘어, 사용자의 의도를 이해하고 그에 맞는 정보를 찾아내는 데 중점을 둡니다.

환경 설정

먼저, 필요한 라이브러리를 설치하고 환경을 설정해야 합니다. 이 예제에서는 Tavily API를 사용할 것입니다.

from dotenv import load_dotenv
import os
from tavily import TavilyClient

# load environment variables from .env file
_ = load_dotenv()

# connect
client = TavilyClient(api_key=os.environ.get("TAVILY_API_KEY"))

이 코드는 환경 변수에서 Tavily API 키를 로드하고 클라이언트를 초기화합니다.

Agentic Search 예제

Agentic Search를 사용하여 정보를 검색하는 방법을 살펴보겠습니다.

# run search
result = client.search("What is in Nvidia's new Blackwell GPU?",
                       include_answer=True)

# print the answer
print(result["answer"])

이 코드는 Nvidia의 새로운 Blackwell GPU에 대한 정보를 검색하고, 그 결과를 직접 제공합니다.

전통적인 검색 vs Agentic Search

이제 전통적인 검색 방법과 Agentic Search의 차이를 실제 코드로 비교해 보겠습니다.

전통적인 검색 방법

전통적인 검색 방법은 다음과 같은 단계를 거칩니다:

1. 검색어 설정

city = "San Francisco"

query = f"""
    what is the current weather in {city}?
    Should I travel there today?
    "weather.com"
"""

2. 웹 검색 수행

import requests
from bs4 import BeautifulSoup
from duckduckgo_search import DDGS
import re

ddg = DDGS()

def search(query, max_results=6):
    try:
        results = ddg.text(query, max_results=max_results)
        return [i["href"] for i in results]
    except Exception as e:
        print(f"returning previous results due to exception reaching ddg.")
        results = [
            "https://weather.com/weather/today/l/USCA0987:1:US",
            "https://weather.com/weather/hourbyhour/l/54f9d8baac32496f6b5497b4bf7a277c3e2e6cc5625de69680e6169e7e38e9a8",
        ]
        return results  

for i in search(query):
    print(i)

3. 웹 페이지 스크래핑

def scrape_weather_info(url):
    """Scrape content from the given URL"""
    if not url:
        return "Weather information could not be found."
    
    # fetch data
    headers = {'User-Agent': 'Mozilla/5.0'}
    response = requests.get(url, headers=headers)
    if response.status_code != 200:
        return "Failed to retrieve the webpage."

    # parse result
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup

# use DuckDuckGo to find websites and take the first result
url = search(query)[0]

# scrape first website
soup = scrape_weather_info(url)

print(f"Website: {url}\n\n")
print(str(soup.body)[:50000]) # limit long outputs

4. 텍스트 추출 및 정제

# extract text
weather_data = []
for tag in soup.find_all(['h1', 'h2', 'h3', 'p']):
    text = tag.get_text(" ", strip=True)
    weather_data.append(text)

# combine all elements into a single string
weather_data = "\n".join(weather_data)

# remove all spaces from the combined text
weather_data = re.sub(r'\s+', ' ', weather_data)
    
print(f"Website: {url}\n\n")
print(weather_data)

이 과정은 복잡하고 시간이 많이 소요되며, 최종적으로 얻은 정보도 사용자가 직접 해석해야 합니다.

Agentic Search 방법

반면, Agentic Search는 훨씬 간단하고 직접적입니다:

# run search
result = client.search(query, max_results=1)

# print first result
data = result["results"][0]["content"]

print(data)

이 코드는 한 번의 API 호출로 관련 정보를 구조화된 형태로 제공합니다.

결과를 보기 좋게 출력하려면 다음과 같이 할 수 있습니다:

import json
from pygments import highlight, lexers, formatters

# parse JSON
parsed_json = json.loads(data.replace("'", '"'))

# pretty print JSON with syntax highlighting
formatted_json = json.dumps(parsed_json, indent=4)
colorful_json = highlight(formatted_json,
                          lexers.JsonLexer(),
                          formatters.TerminalFormatter())

print(colorful_json)

이렇게 하면 다음과 같은 구조화된 정보를 얻을 수 있습니다:

{
    "현재 날씨": "맑음, 기온 18°C (64°F)",
    "최고 기온": "22°C (72°F)",
    "최저 기온": "14°C (57°F)",
    "습도": "76%",
    "바람": "서풍 11 km/h",
    "여행 추천": "날씨가 좋아 여행하기 적합합니다. 단, 바람이 약간 있으니 가벼운 겉옷을 준비하세요."
}

Agentic Search의 장점

  1. 코드 간소화: 전통적인 방법에 비해 코드가 훨씬 간단합니다.
  2. 시간 절약: API 호출 한 번으로 필요한 정보를 얻을 수 있습니다.
  3. 구조화된 데이터: JSON 형식으로 제공되어 프로그래밍적으로 활용하기 쉽습니다.
  4. 정확성: AI가 여러 소스의 정보를 종합하여 더 정확한 답변을 제공합니다.
  5. 맞춤형 정보: 사용자의 의도를 파악하여 더 관련성 높은 정보를 제공합니다.

결론

Agentic Search는 정보 검색의 패러다임을 바꾸고 있습니다. 복잡한 웹 스크래핑과 데이터 처리 과정 없이도, 단 몇 줄의 코드로 원하는 정보를 구조화된 형태로 얻을 수 있습니다. 이는 개발자들의 작업 효율을 크게 높이고, 최종 사용자에게는 더 정확하고 유용한 정보를 제공할 수 있게 합니다.

앞으로 Agentic Search 기술이 더욱 발전하면, 우리의 일상생활과 업무에서 정보를 찾고 활용하는 방식이 더욱 스마트해질 것입니다. 이는 단순히 검색의 편의성을 높이는 것을 넘어, 우리가 정보를 이해하고 의사결정을 하는 방식에도 큰 영향을 미칠 것입니다.

여러분도 Agentic Search를 활용해 보시는 건 어떨까요? 더 스마트하고 효율적인 정보 검색의 세계로 여러분을 초대합니다!

#LangChain

Posted using Obsidian Steemit plugin

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.16
TRX 0.16
JST 0.028
BTC 68431.46
ETH 2457.08
USDT 1.00
SBD 2.60