AI

엔터프라이즈급 AI 애플리케이션을 위해 Bright Data를 NVIDIA NeMo와 통합하세요

이 가이드는 NVIDIA NeMo Agent Toolkit과 Bright Data 도구를 통합하여 실시간 웹 데이터로 AI 에이전트 기능을 강화하는 방법을 설명합니다.
9 분 읽기
NVIDIA Nemo with Bright Data

이 가이드에서는 다음을 확인하실 수 있습니다:

  • NVIDIA NeMo 프레임워크가 제공하는 기능, 특히 NVIDIA NeMo Agent Toolkit을 사용한 AI 에이전트 구축 방법.
  • LangChain을 통한 맞춤형 도구를 사용하여 Bright Data를 NAT AI 에이전트에 통합하는 방법.
  • NVIDIA NeMo Agent Toolkit 워크플로우를 Bright Data Web MCP에 연결하는 방법.

자, 시작해 보겠습니다!

NVIDIA NeMo 프레임워크 소개

NVIDIA NeMo 프레임워크는 LLM 및 다중 모드 모델을 포함한 생성형 AI 모델을 구축, 맞춤화 및 배포하기 위해 설계된 포괄적인 클라우드 네이티브 AI 개발 플랫폼입니다.

훈련 및 미세 조정부터 평가 및 배포에 이르기까지 AI 라이프사이클 전체를 위한 엔드투엔드 도구를 제공합니다. NeMo는 또한 대규모 분산 훈련을 활용하며 데이터 큐레이션, 모델 평가, 안전 가드레일 구현과 같은 작업을 위한 구성 요소를 포함합니다.

16,000개 이상의 GitHub 스타를 보유한 오픈 소스 Python 라이브러리와 전용 Docker 이미지로 지원됩니다.

NVIDIA NeMo Agent Toolkit

NVIDIA NeMo 프레임워크의 일부인 NVIDIA NeMo Agent Toolkit (약칭 “NAT”)은 복잡한 AI 에이전트 시스템을 구축, 최적화 및 관리하기 위한 오픈 소스 프레임워크입니다.

다양한 에이전트와 도구를 통합 워크플로로 연결하여 심층적인 가시성, 프로파일링 및 비용 분석을 지원하며, 다중 에이전트 운영의 “지휘자” 역할을 수행하고 AI 애플리케이션의 확장을 돕습니다.

NAT는 에이전트와 도구를 모듈식 함수 호출로 취급하여 구성 가능성을 강조합니다. 또한 병목 현상을 식별하고, 평가를 자동화하며, 엔터프라이즈급 에이전트형 AI 시스템을 관리하는 기능을 제공합니다.

자세한 내용은 다음을 참조하십시오:

Bright Data 도구로 대규모 언어 모델(LLM)과 실시간 데이터 연결

NVIDIA NeMo Agent Toolkit은 기업급 AI 프로젝트 구축 및 관리에 필요한 유연성, 맞춤화, 가시성, 확장성을 제공합니다. 조직이 복잡한 AI 워크플로우를 조정하고, 여러 에이전트를 연결하며, 성능과 비용을 모니터링할 수 있게 합니다.

그러나 가장 정교한 NAT 애플리케이션조차도 LLM의 본질적인 한계에 직면합니다. 여기에는 정적 훈련 데이터로 인한 구식 지식과 실시간 웹 정보 접근 부족이 포함됩니다.

해결책은 NVIDIA NeMo Agent Toolkit 워크플로우를 Bright Data와 같은 AI용 웹 데이터 제공업체와 통합하는 것입니다.

Bright Data는 웹 스크래핑, 검색, 브라우저 자동화 등을 위한 도구를 제공합니다. 이러한 솔루션을 통해 AI 시스템이 실시간 실행 가능한 데이터를 검색하고 엔터프라이즈 애플리케이션의 모든 잠재력을 발휘할 수 있습니다!

Bright Data를 NVIDIA NeMo AI 에이전트에 연결하는 방법

NVIDIA NeMo AI 에이전트에서 Bright Data의 기능을 활용하는 한 가지 방법은 NeMo Agent Toolkit을 통해 맞춤형 도구를 만드는 것입니다.

이러한 도구는 LangChain(또는 AI 에이전트 구축 라이브러리와 호환되는 기타 통합)으로 구동되는 사용자 정의 기능을 통해 Bright Data 제품에 연결됩니다.

아래 지침을 따르세요!

필수 사항

이 튜토리얼을 따라하려면 다음이 필요합니다:

Bright Data 및 NVIDIA NIM 계정 설정은 별도의 장에서 안내해 드리므로 지금 당장 걱정하지 마십시오.

참고: 설치 중 또는 툴킷 실행 시 문제가 발생할 경우, 지원되는 플랫폼 중 하나를 사용하고 있는지 확인하세요.

1단계: NVIDIA NIM API 키 가져오기

대부분의 NVIDIA NeMo Agent 워크플로에는 NVIDIA_API_KEY 환경 변수가 필요합니다. 이는 워크플로 뒤에 있는 NVIDIA NIM LLM에 대한 연결 인증을 위해 필수적입니다.

API 키를 가져오려면 먼저 NVIDIA NIM 계정을 생성하세요(아직 계정이 없는 경우). 로그인 후 오른쪽 상단 모서리의 계정 이미지를 클릭하세요. “API 키” 옵션을 선택하세요:
Selecting the “API Keys” option

API 키 페이지로 이동합니다. “API 키 생성” 버튼을 클릭하여 새 키를 생성하세요:
Pressing the “Generate API Key” option

API 키에 이름을 지정한 후 “키 생성”을 클릭하세요:
Clicking the “Generate Key” button

모달 창에 API 키가 표시됩니다. “API 키 복사” 버튼을 클릭하고 키를 안전한 곳에 보관하세요. 곧 필요할 것입니다.
Copying the NVIDIA API key
잘하셨습니다! 이제 NVIDIA NeMo Agent Toolkit을 설치하고 시작할 준비가 되었습니다.

2단계: NVIDIA NeMo 프로젝트 설정

최신 안정 버전의 NeMo Agent Toolkit을 설치하려면 다음 명령어를 실행하세요:

pip install nvidia-nat

NeMo Agent Toolkit에는 핵심 패키지와 함께 설치할 수 있는 여러 선택적 종속성이 있습니다. 이러한 선택적 종속성은 프레임워크별로 그룹화되어 있습니다.

설치가 완료되면 nat 명령어를 사용할 수 있습니다. 다음 명령어를 실행하여 정상 작동 여부를 확인하세요:

nat --version

다음과 유사한 출력이 표시됩니다:

nat, version 1.3.1

다음으로 NVIDIA NeMo 애플리케이션의 루트 폴더를 생성합니다. 예를 들어 “bright_data_nvidia_nemo”라고 명명합니다:

mkdir bright_data_nvidia_nemo

이 폴더 내에서 다음 명령을 사용하여 “web_data_workflow”라는 NeMo Agent 워크플로를 생성하세요:

nat workflow create --workflow-dir bright_data_nvidia_nemo web_data_workflow 

참고: “A required privilege is not held by the client” 오류가 발생하면 관리자 권한으로 명령어를 실행하세요.

성공 시 다음과 같은 로그가 표시됩니다:

워크플로 'web_data_workflow' 설치 중...
워크플로 'web_data_workflow' 설치 성공.
워크플로 'web_data_workflow'가 <your_path>에 성공적으로 생성되었습니다.

이제 프로젝트 폴더 bright_data_nvidia_nemo/web_data_workflow에는 다음과 같은 구조가 포함됩니다:

bright_data_nvidia_nemo/web_data_workflow/
├── configs -> src/web_data_workflow/configs
├── data -> src/text_file_ingest/data
├── pyproject.toml
└── src/
    ├── web_data_workflow.egg-info/ 
    └── web_data_workflow/
        ├── __init__.py
        ├── configs/
        │   └── config.yml
        ├── data/
        ├── __init__.py
        ├── register.py
        └── web_data_workflow.py

각 파일과 폴더의 역할은 다음과 같습니다:

  • configs/src/web_data_workflow/configs: 워크플로 구성에 쉽게 접근할 수 있도록 하는 심볼릭 링크입니다.
  • data/src/text_file_ingest/data: 샘플 데이터 또는 입력 파일을 저장하기 위한 심볼릭 링크.
  • pyproject.toml: 프로젝트 메타데이터 및 종속성 파일.
  • src/: 소스 코드 디렉터리.
    • web_data_workflow.egg-info/: Python 패키징 도구로 생성된 메타데이터 폴더.
    • web_data_workflow/: 메인 워크플로 모듈.
      • __init__.py: 모듈을 초기화합니다.
      • configs/
        • config.yml: 런타임 동작(LLM 구성, 함수/도구 정의, 에이전트 유형 및 설정, 워크플로 오케스트레이션 등)을 정의하는 워크플로 구성 파일.

        data/: 워크플로별 데이터, 샘플 입력 또는 테스트 파일을 저장하는 디렉터리.

      • data/: 워크플로 전용 데이터, 샘플 입력 또는 테스트 파일을 저장하는 디렉터리입니다.
      • register.py: 사용자 정의 함수를 NAT에 연결하기 위한 등록 모듈입니다.
      • web_data_workflow.py: 사용자 정의 도구를 정의하는 샘플 파일입니다.

선호하는 Python IDE에서 프로젝트를 열고 생성된 파일들을 살펴보며 익숙해지세요.

워크플로 정의는 아래 파일에 위치해 있음을 확인할 수 있습니다:

bright_data_nvidia_nemo/web_data_workflow/web_data_workflow/configs/config.yml

이 파일을 열면 다음과 같은 YAML 구성을 확인할 수 있습니다:

functions:
  current_datetime:
    _type: current_datetime
  web_data_workflow:
    _type: web_data_workflow
    prefix: "Hello:"

llms:
  nim_llm:
    _type: nim
    model_name: meta/llama-3.1-70b-instruct
    temperature: 0.0

workflow:
  _type: react_agent
  llm_name: nim_llm
  tool_names: [current_datetime, web_data_workflow]

이것은 NVIDIA NIM의 meta/llama-3.1-70b-instruct 모델로 구동되는 ReAct 에이전트 워크플로를 정의하며, 다음에 접근할 수 있습니다:

  • 내장된 current_datetime 도구.
  • 사용자 정의 web_data_workflow 도구.

특히 web_data_workflow 도구 자체는 다음 위치에 정의되어 있습니다:

bright_data_nvidia_nemo/web_data_workflow/web_data_workflow/web_data_workflow.py

이 샘플 도구는 텍스트 입력을 받아 미리 정의된 문자열(예: "Hello:")을 접두사로 붙여 반환합니다.

좋습니다! 이제 NAT가 적용된 워크플로가 준비되었습니다.

3단계: 현재 워크플로 테스트

생성된 워크플로를 맞춤 설정하기 전에, 이를 익히고 작동 방식을 이해하는 데 시간을 할애하는 것이 좋습니다. 이렇게 하면 Bright Data와 통합하기 위해 워크플로를 조정하는 것이 더 쉬워집니다.

터미널에서 워크플로 폴더로 이동하여 시작하세요:

cd ./bright_data_nvidia_nemo/web_data_workflow

워크플로우 실행 전에 NVIDIA_API_KEY 환경 변수를 설정해야 합니다. Linux/macOS에서는 다음 명령을 실행하세요:

export NVIDIA_API_KEY="<YOUR_NVIDIA_API_KEY>"

Windows PowerShell에서는 다음과 같이 실행하세요:

$Env:NVIDIA_API_KEY="<YOUR_NVIDIA_API_KEY>"

<YOUR_NVIDIA_API_KEY> 자리 표시자를 앞서 가져온 NVIDIA NIM API 키로 대체하십시오.

이제 nat run 명령어로 워크플로를 테스트합니다:

nat run --config_file configs/config.yml --input "Hey! How's it going?"

이 명령은 config.yml 파일( configs/ 심볼릭 링크를 통해)을 로드하고 "Hey! How's it going?" 프롬프트를 전송합니다.

다음과 같은 출력이 표시됩니다:
The output produced by the agent

에이전트가 다음과 같이 응답했음을 확인하세요:

잘 지내고 있어요, 물어봐 주셔서 감사합니다! 당신은 어떠세요?

사용자 정의 web_data_workflow 도구가 작동하는지 확인하려면 다음과 같은 프롬프트를 시도해 보세요:

nat run --config_file configs/config.yml --input "Use the web_data_workflow tool on 'World!'"

web_data_workflow 도구는 "Hello:" 접두사로 구성되어 있으므로 예상 출력은 다음과 같습니다:

워크플로 결과:
['Hello: World!']

결과가 예상 동작과 일치하는지 확인하세요:
Note the response produced by the agent
대단합니다! NAT 워크플로가 완벽하게 작동합니다. 이제 Bright Data와 통합할 준비가 되었습니다.

4단계: LangChain Bright Data 도구 설치

NVIDIA NeMo Agent Toolkit의 독특한 점 중 하나는 LangChain, LlamaIndex, CrewAI, Agno, Microsoft Semantic Kernel, Google ADK 등 다양한 AI 라이브러리와 함께 작동한다는 것입니다.

Bright Data와의 통합을 단순화하기 위해, 휠을 재발명하는 대신 LangChain용 공식 Bright Data 도구를 사용할 것입니다.

이 도구들에 대한 자세한 안내는 공식 문서 또는 다음 블로그 게시물을 참조하십시오:

다음 라이브러리를 설치하여 NVIDIA NeMo Agent Toolkit 내에서 LangChain 사용을 준비하세요:

pip install "nvidia-nat[langchain]" langchain-brightdata

필요한 패키지는 다음과 같습니다:

  • "nvidia-nat[langchain]": LangChain(또는 LangGraph)을 NeMo Agent Toolkit과 통합하기 위한 하위 패키지입니다.
  • langchain-brightdata: Bright Data의 웹 데이터 수집 도구 제품군을 LangChain에 통합합니다. 이를 통해 AI 에이전트가 검색 엔진 결과를 수집하고, 지역 제한 또는 봇 방지 기능이 적용된 웹사이트에 접근하며, Amazon, LinkedIn 등 다양한 인기 플랫폼에서 구조화된 데이터를 추출할 수 있습니다.

배포 중 문제를 방지하려면 프로젝트의 pyproject.toml 파일에 다음을 포함하세요:

dependencies = [
  "nvidia-nat[langchain]~=1.3",
  "langchain-brightdata~=0.1.3",
]

참고: 프로젝트에 맞게 해당 패키지 버전을 조정하세요.

훌륭합니다! 이제 NVIDIA NeMo Agent 워크플로가 LangChain 도구와 통합되어 Bright Data 연결을 간소화할 수 있습니다.

5단계: Bright Data 통합 준비

LangChain Bright Data 도구는 계정에 설정된 Bright Data 서비스에 연결하여 작동합니다. 본 문서에서 소개하는 두 가지 도구는 다음과 같습니다:

해당 도구를 사용하려면 SERP API 영역과 Web Unblocker API 영역이 모두 설정된 Bright Data 계정이 필요합니다. 설정 방법을 알아보겠습니다!

아직 Bright Data 계정이 없다면 새로 생성하세요. 이미 계정이 있다면 로그인하여 대시보드로 이동합니다. 다음으로 “프록시 및 스크래핑” 페이지로 이동하여 “내 영역” 테이블을 확인하세요:
Note the “unlocker” Web Unlocker API zone and “serp” SERP API zone
이 테이블에 이미 unlocker라는 웹 언블로커 API 존과 serp라는 SERP API 존이 존재한다면 준비가 완료된 것입니다. 그 이유는 다음과 같습니다:

  • BrightDataSERP LangChain 도구는 자동으로 'serp'라는 SERP API 영역에 연결됩니다.
  • BrightData 언블로커 랭체인(LangChain) 도구는 자동으로 'web_unlocker'라는 웹 언블로커 API 존에 연결됩니다.

이 두 영역이 없다면 생성해야 합니다. “Unblocker API” 및 “SERP API” 카드에서 아래로 스크롤한 후 “영역 생성” 버튼을 클릭하세요. 마법사를 따라 필요한 이름으로 두 영역을 추가하세요:
Note the “Create zone” button

단계별 안내는 다음 문서 페이지를 참조하세요:

마지막으로 LangChain Bright Data 도구에 계정 인증 방법을 알려주어야 합니다. Bright Data API 키를 생성하고 환경 변수로 저장하세요:

export BRIGHT_DATA_API_KEY="<YOUR_BRIGHT_DATA_API_KEY>"

또는 PowerShell에서:

$Env:BRIGHT_DATA_API_KEY="<YOUR_BRIGHT_DATA_API_KEY>"

훌륭합니다! 이제 LangChain 도구를 통해 NVIDIA NeMo 에이전트를 Bright Data에 연결하기 위한 모든 준비가 완료되었습니다.

6단계: 맞춤형 Bright Data 도구 정의

이제 NVIDIA NeMo 에이전트 툴킷 워크플로에서 새로운 도구를 생성할 모든 구성 요소를 갖추셨습니다. 이 도구들은 에이전트가 Bright Data의 SERP API 및 Web Unblocker API와 상호작용하여 웹을 검색하고 공개 웹 페이지에서 데이터를 스크래핑할 수 있도록 합니다.

먼저 프로젝트의 src/ 폴더에 bright_data.py 파일을 추가하세요:
Note the “bright_data.py” file
SERP API와 상호작용하기 위한 커스텀 도구를 다음과 같이 정의합니다:

# bright_data_nvidia_nemo/web_data_workflow/src/web_data_workflow/bright_data.py

from pydantic import Field
from typing import Optional
from nat.builder.builder import Builder
from nat.builder.function_info import FunctionInfo
from nat.cli.register_workflow import register_function
from nat.data_models.function import FunctionBaseConfig
import json


class BrightDataSERPAPIToolConfig(FunctionBaseConfig, name="bright_data_serp_api"):
    """
    Bright Data SERP API 도구 구성.
    BRIGHT_DATA_API_KEY가 필요합니다.
    """
    api_key: str = Field(
        default="",
        description="SERP 요청에 사용되는 Bright Data API 키입니다."
    )

    # 기본 SERP 매개변수 (선택적 재정의)
    search_engine: str = Field(
        default="google",
        description="쿼리할 검색 엔진 (기본값: google)."
    )
    country: str = Field(
        default="us",
        description="지역화된 결과를 위한 2자리 국가 코드 (기본값: us)."
    )
    language: str = Field(
        default="en",
        description="2자리 언어 코드 (기본값: en)."
    )
    search_type: Optional[str] = Field(
        default=None,
        description="검색 유형: None, 'shop', 'isch', 'nws', 'jobs'."
    )
    device_type: Optional[str] = Field(
        default=None,
        description="기기 유형: None, 'mobile', 'ios', 'android'."
    )
    parse_results: Optional[bool] = Field(
        default=None,
        description="원시 HTML 대신 구조화된 JSON을 반환할지 여부."
    )


@register_function(config_type=BrightDataSERPAPIToolConfig)
async def bright_data_serp_api_function(tool_config: BrightDataSERPAPIToolConfig, builder: Builder):
    import os
    from langchain_brightdata import BrightDataSERP

    # API 키가 누락된 경우 설정
    if not os.environ.get("BRIGHT_DATA_API_KEY"):
        if tool_config.api_key:
            os.environ["BRIGHT_DATA_API_KEY"] = tool_config.api_key

    async def _bright_data_serp_api(
        query: str,
        search_engine: Optional[str] = None,
        country: Optional[str] = None,
        language: Optional[str] = None,
        search_type: Optional[str] = None,
        device_type: Optional[str] = None,
        parse_results: Optional[bool] = None,
    ) -> str:
        """
        Bright Data SERP API를 사용하여 실시간 검색 쿼리를 수행합니다.

        매개변수:
            query (str): 검색 쿼리 텍스트.
            search_engine (str, 선택적): 사용할 검색 엔진 (기본값: google).
            country (str, 선택적): 지역화된 결과를 위한 국가 코드.
            language (str, 선택적): 지역화된 결과를 위한 언어 코드.
            search_type (str, 선택적): 검색 유형 (예: None, 'isch', 'shop', 'nws').
            device_type (str, 선택적): 기기 유형 (예: None, 'mobile', 'ios').
            parse_results (bool, 선택적): 구조화된 JSON을 반환할지 여부.

        반환값:
            str: JSON 형식의 검색 결과.
        """

        serp_client = BrightDataSERP(
            bright_data_api_key=os.environ["BRIGHT_DATA_API_KEY"]
        )

        payload = {
            "query": query,
            "search_engine": search_engine or tool_config.search_engine,
            "country": country or tool_config.country,
            "language": language or tool_config.language,
            "search_type": search_type or tool_config.search_type,
            "device_type": device_type or tool_config.device_type,
            "parse_results": (
                parse_results
                if parse_results is not None
                else tool_config.parse_results
            ),
        }

        # 명시적으로 None으로 설정된 매개변수 제거
        payload = {k: v for k, v in payload.items() if v is not None}

        results = serp_client.invoke(payload)
        return json.dumps(results)

    yield FunctionInfo.from_fn(
        _bright_data_serp_api,
        description=_bright_data_serp_api.__doc__,
    )

이 코드 조각은 bright_data_serp_api라는 사용자 정의 NVIDIA NeMo Agent 도구를 정의합니다. 먼저 BrightDataSERPAPIToolConfig 클래스를 정의해야 합니다. 이 클래스는 Google SERP API가 지원하는 필수 인자와 구성 가능한 매개변수 (예: API 키, 검색 엔진, 국가, 언어, 기기 유형, 검색 유형, 결과를 JSON으로 파싱할지 여부 등)를 지정합니다.

다음으로, 커스텀 bright_data_serp_api_function() 이 NeMo 워크플로우 함수로 등록됩니다. 이 함수는 환경에 Bright Data API 키가 설정되어 있는지 확인한 후, 비동기식 _bright_data_serp_api() 함수를 정의합니다.

_bright_data_serp_api() 는 LangChain의 BrightDataSERP 클라이언트를 사용하여 검색 요청을 구성하고, 이를 호출한 후 결과를 JSON 형식으로 반환합니다. 마지막으로 FunctionInfo를 통해 NeMo 에이전트 프레임워크에 함수를 노출합니다. FunctionInfo에는 에이전트가 함수를 호출하는 데 필요한 모든 메타데이터가 포함됩니다.

참고: 결과를 JSON으로 반환하면 표준화된 문자열 출력을 제공합니다. SERP API 응답은 구성된 인자에 따라 (구문 분석된 JSON, 원시 HTML 등) 달라질 수 있으므로 이는 유용한 방법입니다.

마찬가지로, 동일한 파일에서 bright_data_web_unlocker_api 도구를 다음과 같이 정의할 수 있습니다:

class BrightDataWebUnlockerAPIToolConfig(FunctionBaseConfig, name="bright_data_web_unlocker_api"):
    """
    Bright Data Web Unlocker 도구 구성.

    Bright Data Web Unlocker를 사용하여 지역 제한 또는 봇 방지 보호 페이지에 접근할 수 있게 합니다.
    BRIGHT_DATA_API_KEY가 필요합니다.
    """

    api_key: str = Field(
        default="",
        description="웹 언락커용 Bright Data API 키."
    )

    country: str = Field(
        default="us",
        description="요청 시 시뮬레이션할 2자리 국가 코드 (기본값: us)."
    )

    data_format: str = Field(
        default="html",
        description="출력 콘텐츠 형식: 'html', 'markdown', 또는 'screenshot'."
    )

    zone: str = Field(
        default="unblocker",
        description='사용할 Bright Data 영역 (기본값: "unblocker").'
    )


@register_function(config_type=BrightDataWebUnlockerAPIToolConfig)
async def bright_data_web_unlocker_api_function(tool_config: BrightDataWebUnlockerAPIToolConfig, builder: Builder):
    import os
    import json
    from typing import Optional
    from langchain_brightdata import BrightDataUnlocker

    # 필요한 경우 환경 변수 설정
    if not os.environ.get("BRIGHT_DATA_API_KEY") and tool_config.api_key:
        os.environ["BRIGHT_DATA_API_KEY"] = tool_config.api_key

    async def _bright_data_web_unlocker_api(
        url: str,
        country: Optional[str] = None,
        data_format: Optional[str] = None,
    ) -> str:
        """
        Bright Data Web Unlocker를 사용하여 지역 제한 또는 봇 방지 보호 URL에 접근합니다.

        인수:
            url (str): 가져올 대상 URL.
            country (str, 선택적): 시뮬레이션된 국가를 재정의합니다.
            data_format (str, 선택적): 출력 콘텐츠 형식 ('html', 'markdown', 'screenshot').

        반환값:
            str: 대상 웹사이트에서 가져온 콘텐츠.
        """

        unlocker = BrightDataUnlocker()

        result = unlocker.invoke({
            "url": url,
            "country": country or tool_config.country,
            "data_format": data_format or tool_config.data_format,
            "zone": tool_config.zone,
        })

        return json.dumps(result)

    yield FunctionInfo.from_fn(
        _bright_data_web_unlocker_api,
        description=_bright_data_web_unlocker_api.__doc__,
    )

필요에 따라 두 도구의 기본 인수 값을 조정하세요.

BrightDataSERPBrightDataUnlocker는 BRIGHT_DATA_API_KEY 환경 변수(이전에 설정했으므로 준비 완료)에서 API 키를 읽으려 시도합니다.

다음으로 register.py에 다음 줄을 추가하여 두 도구를 임포트하세요:

# bright_data_nvidia_nemo/web_data_workflow/src/web_data_workflow/register.py

# ...

from .bright_data import bright_data_serp_api_function, bright_data_web_unlocker_api_function

이 두 도구는 config.yml 파일에서 사용할 수 없습니다. 그 이유는 자동 생성된 pyproject.toml 파일에 다음 내용이 포함되어 있기 때문입니다:

[project.entry-points.'nat.components']
web_data_workflow = "web_data_workflow.register"

이는 nat 명령어에 web_data_workflow 워크플로를 로드할 때 web_data_workflow.register 모듈에서 컴포넌트를 찾으라”고 지시합니다.

참고: 동일한 방식으로 BrightDataWebScraperAPI용 도구를 생성하여 Bright Data의 웹 스크래핑 API와 통합할 수 있습니다. 이를 통해 에이전트는 Amazon, Instagram, LinkedIn, Yahoo Finance 등 다양한 인기 웹사이트에서 구조화된 데이터 피드를 가져올 수 있는 기능을 갖추게 됩니다.

이제 시작합니다! 에이전트가 이 두 가지 새로운 도구에 연결할 수 있도록 config.yml 파일을 적절히 업데이트하기만 하면 됩니다.

7단계: Bright Data 도구 구성

config.yml에서 Bright Data 도구를 임포트하고 다음 명령어로 에이전트에 전달하세요:

# bright_data_nvidia_nemo/web_data_workflow/src/web_data_workflow/configs/config.yml

functions:
  # Bright Data 커스텀 도구 정의 및 커스터마이징
  bright_data_serp_api:
    _type: bright_data_serp_api
  bright_data_web_unlocker_api:
    _type: bright_data_web_unlocker_api
    data_format: markdown

llms:
  nim_llm:
    _type: nim
    model_name: meta/llama-3.1-70b-instruct # 엔터프라이즈용 AI 모델로 교체
    temperature: 0.0

워크플로:
  _type: react_agent
  llm_name: nim_llm
  tool_names: [bright_data_serp_api, bright_data_web_unlocker_api] # Bright Data 도구 구성

앞서 정의한 도구를 사용하려면:

  1. config.yml 파일의 functions 섹션 아래에 추가하세요. FunctionBaseConfig 클래스가 노출하는 인수를 통해 맞춤 설정할 수 있습니다. 예를 들어 bright_data_web_unlocker_api 도구는AI 에이전트가 처리하기에 적합한 마크다운 형식으로 데이터를 반환하도록 설정되었습니다.
  2. 에이전트가 호출할 수 있도록 워크플로 블록의 tool_names 필드에 도구를 나열하세요.

훌륭합니다! meta/llama-3.1-70b-instruct로 구동되는 React 에이전트가 이제 LangChain 기반 커스텀 도구 두 가지 모두에 접근할 수 있습니다:

  1. bright_data_serp_api
  2. bright_data_web_unlocker_api

참고: 본 예시에서는 LLM이 NVIDIA NIM 모델로 구성되었습니다. 배포 환경에 따라 기업용 모델로 전환하는 것을 고려하십시오.

8단계: NVIDIA NeMo Agent Toolkit 워크플로 테스트

NVIDIA NeMo Agent Toolkit 워크플로우가 Bright Data 도구와 상호작용할 수 있는지 확인하려면 웹 검색과 웹 데이터 추출을 모두 트리거하는 작업이 필요합니다.

예를 들어, 비즈니스 인텔리전스를 지원하기 위해 경쟁사의 신제품 및 가격을 모니터링하려는 회사를 가정해 보겠습니다. 경쟁사가 Nike인 경우 다음과 같은 프롬프트를 작성할 수 있습니다:

웹 검색을 통해 최신 나이키 신발을 찾아내세요. 검색 결과에서 가장 관련성이 높은 웹 페이지 최대 3개를 선택하고, 공식 나이키 웹사이트 페이지를 우선적으로 고려하세요. 해당 페이지에 접근하여 내용을 마크다운 형식으로 추출하세요. 발견된 신발 모델에 대해 이름, 출시 상태, 가격, 주요 정보 및 공식 나이키 페이지 링크(가능한 경우)를 제공하세요.

NVIDIA_API_KEYBRIGHT_DATA_API_KEY 환경 변수가 정의되었는지 확인한 후 에이전트를 다음 명령어로 실행하세요:

nat run --config_file configs/config.yml --input "웹 검색을 통해 최신 나이키 신발을 발견하세요. 검색 결과에서 공식 나이키 웹사이트 페이지를 우선적으로 고려하여 가장 관련성 높은 웹 페이지 최대 3개를 선택하세요. 해당 페이지에 접속하여 내용을 마크다운 형식으로 추출하십시오. 발견된 신발 모델에 대해 이름, 출시 상태, 가격, 주요 정보 및 공식 나이키 페이지 링크(가능한 경우)를 제공하십시오."

초기 출력은 다음과 유사할 것입니다:
Note the initial output produced by the agent

상세 모드( 워크플로 블록에서 verbose: true 설정)를 활성화하면 에이전트가 다음 단계를 수행하는 것을 확인할 수 있습니다:

  1. “최신 나이키 신발” 및 “신상 나이키 신발”과 같은 쿼리로 SERP API 호출
  2. 가장 관련성 높은 페이지를 선별하며, 공식 나이키 “신상 신발” 페이지를 우선순위로 합니다.
  3. 선택된 페이지에 접근하기 위해 Web Unlocker API 도구를 사용하며, 해당 콘텐츠를 마크다운 형식으로 스크래핑합니다.
  4. 스크랩된 데이터를 처리하여 구조화된 결과 목록 생성:
[에어 조던 11 레트로 "감마" - 남성용 신발](https://www.nike.com/t/air-jordan-11-retro-gamma-mens-shoes-DYkD1oXL/CT8012-047)
출시 상태: 출시 예정
색상: 1
가격: $235

[에어 조던 11 레트로 "감마" - 빅 키즈 신발](https://www.nike.com/t/air-jordan-11-retro-gamma-big-kids-shoes-LJyljnZt/378038-047)
출시 상태: 출시 예정
컬러: 1
가격: $190

# 간결함을 위해 생략...

이 결과는 Nike의 “신상 신발” 페이지에서 확인할 수 있는 내용과 정확히 일치합니다:
Note that the results returned by the agent match those on the official Nike “New Shoes” web page
미션 완료! AI 에이전트가 웹을 자율적으로 검색하고, 적절한 페이지를 선별하여 스크래핑한 후 구조화된 제품 인사이트를 추출했습니다. Bright Data 도구를 NAT 워크플로우에 통합하지 않았다면 이 모든 작업은 불가능했을 것입니다!

에이전트형 비즈니스 인텔리전스는 NVIDIA NeMo Agent Toolkit과 결합된 Bright Data 솔루션이 가능하게 하는 수많은 사용 사례 중 하나일 뿐임을 기억하세요. 도구 구성을 조정하거나, 추가 도구를 통합하거나, 입력 프롬프트를 변경하여 더 많은 시나리오를 탐색해 보세요!

Web MCP를 통한 NVIDIA NeMo Agent Toolkit과 Bright Data 연결

NVIDIA NeMo Agent Toolkit을 Bright Data 제품과 통합하는 또 다른 방법은 Web MCP에 연결하는 것입니다. 자세한 내용은 공식 문서를 참조하세요.

Web MCP는 Bright Data의 웹 자동화 및 데이터 수집 플랫폼 위에 구축된 60개 이상의 도구에 대한 접근을 제공합니다. 무료 티어에서도 이미 두 가지 강력한 도구를 이용할 수 있습니다:

도구 설명
search_engine Google, Bing 또는 Yandex 결과를 JSON 또는 Markdown 형식으로 가져옵니다.
scrape_as_markdown 모든 웹페이지를 깨끗한 마크다운으로 스크랩하면서 봇 방지 조치를 우회합니다.

그러나 Web MCP 는 Pro 모드에서 진가를 발휘합니다. 이 프리미엄 계층은 무료는 아니지만, Amazon, Zillow, LinkedIn, YouTube, TikTok, Google Maps 등 주요 플랫폼에 대한 구조화된 데이터 추출 기능과 자동화된 브라우저 작업을 위한 추가 도구를 사용할 수 있게 해줍니다.

참고: 프로젝트 설정 및 필수 요건은 이전 장을 참조하십시오.

이제 NVIDIA NeMo Agent Toolkit에서 Bright Data의 Web MCP를 사용하는 방법을 살펴보겠습니다!

1단계: NVIDIA NAT MCP 패키지 설치

앞서 언급했듯이 NVIDIA NeMo Agent Toolkit은 모듈식입니다. 핵심 패키지가 기반을 제공하며, 추가 기능은 선택적 확장 기능을 통해 추가됩니다.

MCP 지원을 위해서는 nvidia-nat[mcp] 패키지가 필요합니다. 다음 명령어로 설치하세요:

pip install nvidia-nat[mcp]

이제 NVIDIA NeMo Agent Toolkit 에이전트가 MCP 서버에 연결할 수 있습니다. 특히 엔터프라이즈급 성능과 안정성을 보장하기 위해, 관리형 원격 서버를 통한 원격 스트리밍 HTTP 통신으로 Bright Data의 웹 MCP에 연결하게 됩니다.

2단계: 원격 웹 MCP 연결 구성

config.yml 파일에서 스트리밍 HTTP 프로토콜을 사용하여 Bright Data의 원격 웹 MCP 서버 연결을 구성하세요:

# bright_data_nvidia_nemo/web_data_workflow/src/web_data_workflow/configs/config.yml

function_groups:
  bright_data_web_mcp:
    _type: mcp_client
    server:
      transport: streamable-http
url: "https://mcp.brightdata.com/mcp?token=<YOUR_BRIGHT_DATA_API_KEY>&pro=1"    tool_call_timeout: 600
    auth_flow_timeout: 300
    reconnect_enabled: true
    reconnect_max_attempts: 3

llms:
  nim_llm:
    _type: nim
    model_name: meta/llama-3.1-70b-instruct # 엔터프라이즈용 AI 모델로 교체
    temperature: 0.0

workflow:
  _type: react_agent
  llm_name: nim_llm
  tool_names: [bright_data_web_mcp]

이번에는 함수 블록 아래에 도구를 정의하는 대신 function_groups를 사용합니다. 이는 Web MCP 연결을 구성하고 원격 서버에서 MCP 도구 전체 세트를 가져옵니다. 그런 다음 개별 도구와 마찬가지로 tool_names 필드를 통해 그룹이 에이전트로 전달됩니다.

Web MCP URL에는 &pro=1 쿼리 매개변수가 포함됩니다. 이는 Pro 모드를 활성화하며, 선택 사항이지만 기업용으로 강력히 권장됩니다. Pro 모드는 기본 도구뿐만 아니라 전체 구조화된 데이터 추출 도구 모음을 사용할 수 있게 하기 때문입니다.

3단계: 웹 MCP 연결 확인

새로운 프롬프트로 NVIDIA NeMo 에이전트를 실행하세요. 초기 로그에서 에이전트가 Web MCP가 노출하는 모든 도구를 로드하는 것을 확인할 수 있습니다:
Loading the Web MCP tools
Pro 모드가 활성화된 경우, 초기 로딩 시 60개 이상의 모든 도구가 로드됩니다.

그런 다음 구성 요약 로그에는 예상대로 단일 기능 그룹이 표시됩니다:
Note the configured function group
자, 이제 NVIDIA NeMo Agent Toolkit 워크플로가 Bright Data Web MCP가 제공하는 모든 기능을 완전히 활용할 수 있게 되었습니다.

결론

이 블로그 게시물에서는 LangChain 기반 커스텀 도구를 사용하거나 Web MCP를 통해 Bright Data를 NVIDIA NeMo Agent Toolkit에 통합하는 방법을 알아보았습니다.

이러한 설정은 NAT 워크플로 내에서 실시간 웹 검색, 구조화된 데이터 추출, 라이브 웹 피드 액세스 및 자동화된 웹 상호 작용의 문을 열어줍니다. AI를 위한 Bright Data 서비스의 전체 제품군을 활용하여 AI 에이전트의 모든 잠재력을 발휘할 수 있습니다!

지금 바로 Bright Data에 가입하고 AI 준비가 완료된 웹 데이터 도구 통합을 시작하세요!