AI 에이전트 구축은 날이 갈수록 쉬워지고 있습니다. 본 글에서는 LangChain의 새로운 BrightDataSERP 도구 사용 과정을 살펴보겠습니다. 약어에 익숙하지 않으시다면, SERP는 “검색 엔진 결과 페이지(Search Engine Results Page)”를 의미합니다.
이 튜토리얼은 초보자도 쉽게 따라할 수 있습니다. 파이썬에 대한 기본적인 이해만 있으면 됩니다. 이 가이드를 마치면 다음과 같은 기술을 여러분의 도구함에 추가할 수 있습니다.
- BrightDataSERP를 이용한 기본 검색 수행
- SERP 출력 커스터마이징
- LLM 친화적 사용을 위한 출력 정리
- 검색 기능을 갖춘 AI 에이전트 생성
소개: AI의 지식 한계
LLM에 익숙하다면 이미 알고 있듯이, 그들의 지식은 정적입니다. 공개될 시점에는 훈련과 미세 조정이 완료된 상태이므로 더 이상 지식을 추가할 수 없습니다.
OpenAI가 검색 기능을 추가하기 전까지 ChatGPT에는 지식 컷오프 날짜가 존재했습니다. LLM은 마지막 미세 조정 시점을 기준으로 여전히 컷오프 날짜를 가지고 있습니다. 다만, 모델은 제로샷 추론을 활용할 수 있습니다. 전체 훈련 과정에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
AI 모델은 정적 지식 기반으로 배포됩니다. 제로샷 추론을 통해 모델은 새로운 데이터를 이해할 수 있지만, 해당 정보를 영구적으로 유지하지는 않습니다.
LangChain이 한계를 해결하는 방식
LangChain을 사용하면 도구를 생성하고 다양한 LLM에 연결할 수 있습니다. Python 함수를 작성할 수 있다면 LLM이 자체 판단에 따라 해당 함수를 호출하도록 할 수 있습니다. LLM에 도구 접근 권한을 부여하면 나머지는 모두 LLM이 처리합니다. 사전 훈련으로 답변 가능한 질문을 하면 도구를 사용하지 않습니다. 알지 못하는 질문을 하면 도구를 활용해 답을 찾으려 시도합니다.
LangChain은 다음과 같은 모든 요구 사항을 위한 사전 구축된 도구까지 제공합니다.
- 검색
- 코드
- 생산성
- 웹 브라우징
- 데이터베이스
- 금융
LangChain의 통합 도구 전체 목록은 여기에서 확인할 수 있습니다. 더 좋은 소식이 있습니다. Bright Data도 그 중 하나입니다!
Bright Data와 함께 LangChain 사용하기
이제 LangChain의 기능을 살펴보았으니, Bright Data와 함께 LangChain을 실제로 사용하는 방법을 알아보겠습니다. 기본적인 Python 지식이 있다고 가정하겠습니다. OpenAI와 Bright Data에서 API 키를 얻는 방법을 단계별로 안내해 드리겠습니다. 계속하기 전에, 먼저 LangChain과 Bright Data를 활용한 웹 스크래핑 가이드를 꼭 확인하세요.
필수 준비 사항
우선 LangChain의 Bright Data 도구를 설치해야 합니다. 아래 pip install 명령어로 설치할 수 있습니다.
pip install langchain-brightdata
다음으로 Bright Data API 키와 serp라는 SERP 인스턴스가 필요합니다. SERP API 무료 체험판은 여기에서 신청할 수 있습니다. 영역(zone) 이름을 반드시 serp로 지정하세요. serp1은 작동하지 않습니다. 준비가 되면 “추가(Add)” 버튼을 클릭하고 도구 설정을 완료하세요.

새 SERP 영역의 대시보드에서 API 키를 확인할 수 있습니다.

OpenAI 키를 얻으려면 API 키 페이지를 열고 “새 비밀 키 생성” 버튼을 클릭하세요.

기본 예시
도구 작동 방식을 보여주는 간단한 예제로 시작하겠습니다. 아래 API 키를 본인 키로 교체하세요. BrightDataSERP 클래스가 핵심 작업을 수행합니다. 우리는 설정만 지정하고 결과를 출력합니다. 일반적으로 .encode("utf-8")는 필요 없으나, Windows에서 출력 문제가 발생했을 때 이 방법으로 해결되었습니다.
from langchain_brightdata import BrightDataSERP
api_key = "your-bright-data-api-key"
tool = BrightDataSERP(bright_data_api_key=api_key)
results = tool.invoke("Latest AI News")
print(results.encode("utf-8"))
다음은 샘플 출력 스니펫입니다. 이와 유사한 내용을 확인한다면 올바른 방향으로 진행 중입니다.
https://api.brightdata.com/request {'zone': 'serp', 'url': 'https://www.google.com/search?q=Latest%20AI%20News&gl=us&hl=en&num=10', 'format': 'raw'} {'Authorization': 'Bearer your-api-key', 'Content-Type': 'application/json'}
b'<!doctype html><html itemscope="" itemtype="http://schema.org/SearchResultsPage" lang="en-MX"><head><meta charset="UTF-8"><meta content="origin" name="referrer"><link href="//www.gstatic.com/images/branding/searchlogo/ico/favicon.ico" rel="icon"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>최신 AI 뉴스 - Google 검색</title><script nonce="IBYZiM7epIs5U67-92qXVg">window._hst=Date.now();</script><script nonce="IBYZiM7epIs5U67-92qXVg">
...
고급 사용법
아래 예시에서는 kwargs를 사용하여 BrightDataSERP에 맞춤 설정을 적용합니다. 맞춤 설정 관련 전체 문서는 여기에서 확인할 수 있습니다. 검색 유형을 'shop'으로 설정하여 더 관련성 높은 쇼핑 결과를 얻습니다.
from langchain_brightdata import BrightDataSERP
api_key = "your-bright-data-api-key"
# 도구 초기화
serp_tool = BrightDataSERP(
bright_data_api_key=api_key,
search_engine="google",
country="us",
language="en",
results_count=10,
parse_results=True)
#검색 수행
results = serp_tool.invoke(
{
"query": "best electric vehicles",
"country": "us",
"language": "en",
"search_type": "shop",
"device_type": "mobile",
"results_count": 15,
})
print(results)
다음 항목을 맞춤 설정하여 검색 결과를 개선할 수 있습니다.
querycountrylanguagesearch_type기기 유형결과 수
Bright Data와 OpenAI로 AI 에이전트 만들기
BrightDataSERP 사용법에 대한 기본적인 이해를 얻으셨으니, 이제 실제 AI 에이전트가 이를 어떻게 활용하는지 살펴보겠습니다. 코드 조각들을 살펴본 후 전체적으로 어떻게 작동하는지 보여드리겠습니다.
구성 요소
시작하기 전에 설치해야 할 몇 가지가 더 있습니다.
LangChain 자체 설치
pip install langchain
LangChain용 OpenAI 지원 설치.
pip install langchain-openai
에이전트 생성을 위해 LangGraph를 설치하세요.
pip install langgraph
AI 시대에 다소 충격적일 수 있지만, BeautifulSoup도 함께 설치하겠습니다. 곧 그 이유를 알게 될 것입니다.
pip install beautifulsoup4
검색 기능 만들기
아래 함수는 이전 예제와 유사하게 검색 결과를 가져옵니다. 결과를 수신한 후 BeautifulSoup을 사용해 텍스트를 추출합니다. 이제 LLM에 결과를 전달할 때 훨씬 적은 토큰을 사용하게 됩니다. LLM이 인식하는 것은 사이트 텍스트뿐입니다. 에이전트가 페이지 레이아웃을 더 잘 이해할 수 있도록 n (줄바꿈) 문자는 유지합니다.
텍스트를 추출한 후 반환합니다.
#검색 결과에서 텍스트만 반환하는 함수 생성
def get_cleaned_search_results(query):
#도구 초기화
serp_tool = BrightDataSERP(
bright_data_api_key=bright_data_api_key,
search_engine="google",
country="us",
language="en",
results_count=5,
parse_results=False,
)
#결과 가져오기
results = serp_tool.invoke({
"query": query,
"country": "us",
"language": "en",
"results_count": 5,
})
#텍스트를 구식 방식으로 파싱----입력 토큰 절약
soup = BeautifulSoup(results, "html.parser")
#결과 반환 시 줄바꿈 유지, 이로써 모델이 불필요한 코드 없이 레이아웃을 인식 가능
return soup.get_text(separator="n")
함수를 도구로 변환하기
이제 LangChain의 Tool 클래스를 사용해 함수를 감쌉니다. 이렇게 하면 에이전트가 이를 도구로 호출할 수 있습니다. 아래에서 볼 수 있듯이 매우 간단합니다. 이름과 설명을 지정하고, func 인자로 함수를 도구로 연결합니다.
#함수를 langchain 도구로 변환
cleaned_search_tool = Tool.from_function(
name="CleanedBrightDataSearch",
func=get_cleaned_search_results,
description=(
"최근 정보, 제품 세부사항 또는 시사 이슈가 필요한 질문에 답변할 때 최신 Google 검색 결과를 가져오려면 이 도구를 사용하세요. 사용자의 자연어 질의를 전달하세요."),
)
에이전트 생성
아래 코드는 에이전트를 생성합니다. ChatOpenAI는 LLM 인스턴스를 생성합니다. LLM과 도구를 create_react_agent() 에 전달하여 실제 에이전트를 생성합니다.
# llm 시작
llm = ChatOpenAI(
model="gpt-4o",
openai_api_key=openai_api_key,
streaming=False,
# 임의로 토큰 제한 설정, 작은 작업이므로 512 사용
max_tokens=512
)
# LLM에 도구 접근 권한 부여
agent = create_react_agent(llm, tools=[cleaned_search_tool])
지루하지만 기능적인 UI
아무리 원시적인 프로그램이라도 런타임이 필요합니다. 여기서는 사용자가 에이전트와 상호작용할 수 있는 기본 터미널 환경을 구성합니다. 사용자가 프롬프트를 입력하면, 이 프롬프트가 메시지로 전달되고 에이전트의 출력을 스트리밍합니다.
#사용자는 에이전트에게 무엇이든 물어볼 수 있습니다—채팅GPT 웹앱처럼
user_prompt = input("무엇이든 물어보세요: ")
messages = [{"role": "user", "content": user_prompt}]
#모델 출력을 스트리밍합니다. 모델은 필요 시 검색을 수행해야 합니다
for step in agent.stream({"messages": messages}, stream_mode="values"):
step["messages"][-1].pretty_print()
전체 코드 통합
전체 코드
전체 코드 예시는 다음과 같습니다.
from langchain_openai import ChatOpenAI
from langchain_brightdata import BrightDataSERP
from langgraph.prebuilt import create_react_agent
from langchain.tools import Tool
from bs4 import BeautifulSoup
# 여기에서 인증 정보를 입력하세요
openai_api_key = "your-openai-api-key"
bright_data_api_key = "your-bright-data-api-key"
# 검색 결과에서 텍스트만 반환하는 함수 생성
def get_cleaned_search_results(query):
#도구 초기화
serp_tool = BrightDataSERP(
bright_data_api_key=bright_data_api_key,
search_engine="google",
country="us",
language="en",
results_count=5,
parse_results=False,
)
#결과 가져오기
results = serp_tool.invoke({
"query": query,
"country": "us",
"language": "en",
"results_count": 5,
})
#텍스트를 구식 방식으로 파싱----입력 토큰 절약
soup = BeautifulSoup(results, "html.parser")
#결과 반환하지만 줄바꿈 유지, 이로써 모델이 불필요한 코드 없이 레이아웃을 인식 가능
return soup.get_text(separator="n")
#함수를 langchain 도구로 변환
cleaned_search_tool = Tool.from_function(
name="CleanedBrightDataSearch",
func=get_cleaned_search_results,
description=(
"최근 정보, 제품 세부사항 또는 시사 이슈가 필요한 질문에 답변할 때 최신 Google 검색 결과를 가져오려면 이 도구를 사용하세요. 사용자의 자연어 질의를 전달하세요."
),)
# llm 시작
llm = ChatOpenAI(
model="gpt-4o",
openai_api_key=openai_api_key,
temperature=0.7,
streaming=False,
max_tokens=512
)
# llm에 도구 접근 권한 부여
agent = create_react_agent(llm, tools=[cleaned_search_tool])
# 사용자는 에이전트에게 무엇이든 질문할 수 있음 - ChatGPT 웹앱과 유사
user_prompt = input("무엇이든 물어보세요: ")
messages = [{"role": "user", "content": user_prompt}]
#모델 출력을 스트리밍하며, 필요 시 모델이 검색을 수행해야 함
for step in agent.stream({"messages": messages}, stream_mode="values"):
step["messages"][-1].pretty_print()
에이전트가 보는 내용
이 스니펫은 에이전트가 보는 내용입니다. 여기에는 우리의 프롬프트와 참조를 위해 가져온 페이지가 포함됩니다.
python bd-agent-example.py
아무거나 물어보세요: 최신 스페이스X 소식을 알려주세요
================================ 인간 메시지 =================================
최신 스페이스X 소식을 알려주세요
================================== AI 메시지 ==================================
도구 호출:
CleanedBrightDataSearch (call_IKoaponXVrNfVSRTfonU4ewo)
호출 ID: call_IKoaponXVrNfVSRTfonU4ewo
인수:
__arg1: 최신 스페이스X 뉴스
https://api.brightdata.com/request {'zone': 'serp', 'url': 'https://www.google.com/search?q=latest%20SpaceX%20news&gl=us&hl=en&num=5', 'format': 'raw'} {'Authorization': 'Bearer d791e32cedf2d9657eaafd7a76b333f67ce5836c89d85691b4d6c07060b07b84', 'Content-Type': 'application/json'}
================================= 도구 메시지 =================================
이름: CleanedBrightDataSearch
최신 SpaceX 뉴스 - Google 검색
몇 초 이내에 자동으로 이동되지 않으면
여기를
클릭하세요.
접근성 링크
메인 콘텐츠로 건너뛰기
접근성 도움말
접근성 피드백
검색창으로 이동하려면
/
를 누르세요
최신 SpaceX 뉴스
로그인
필터 및 주제
AI 모드
전체
뉴스
동영상
이미지
짧은 동영상
포럼
더 보기
약 85,800,000개 결과
(0.38초)
검색 결과
SpaceX - 업데이트
SpaceX
https://www.spacex.com
› 업데이트
SpaceX
https://www.spacex.com
› 업데이트
올해 초,
팔콘 9는 드래곤의 여섯 번째 상업 우주비행사 임무인 프레임2(Fram2)를 발사할 예정이며, 이는 탐사를 위한 최초의 유인 우주 비행 임무가 될 것입니다...
동영상
12:03
YouTube
·
GREAT SPACEX
시험장 폭발 후 스타쉽 재발사를 위한 스페이스X의 해결책...
YouTube
·
GREAT SPACEX
2일 전
47:39
YouTube
·
GREAT SPACEX
COPV가 스타십 S36을 파괴했다, 다음은? 혼다의 호퍼...
YouTube
·
GREAT SPACEX
1일 전
3:10
YouTube
·
CBS News
영상: 스페이스X 스타십 폭발, 거대한 불꽃 폭발 발생...
YouTube
·
CBS 뉴스
3일 전
피드백
모두 보기
주요 뉴스
USA 투데이
스페이스X 스타십 다시 폭발. 최근 좌절 이후 엘론 머스크 회사의 다음 행보는?
3일 전
소프 센트럴
텍사스 정적 화력 시험 중 발생한 엘론 머스크의 최신 스페이스X 스타십 폭발에 관한 모든 것
3일 전
가디언
스페이스X 스타십, 최근 난항 속 시험에서 인도양 상공에서 분해
4주 전
CBS 뉴스
지난 2회 연속 폭발한 뒤 9번째 시험 비행에서 스페이스X, 스타쉽과 통신 두절
4주 전
더 많은 뉴스
트위터 결과
스페이스X(@SpaceX) · X
X(트위터)
https://x.com/SpaceX
팔콘 9, 드래곤 및 Ax-4를 @Space_Station으로 발사하는 모습 시청하기 x.com/i/broadcasts/1YpJ…
2시간 전
플로리다에서 발사된 팰컨 9, 27개의 @Starlink 위성 궤도 투입
9시간 전
27개의 @Starlink 위성 배치 확인
9시간 전
일론 머스크, 여섯 번째 실패 후 더 위험한 발사 약속...
우주
https://www.space.com
› ... › 민간 우주 비행
우주
https://www.space.com
› ... › 민간 우주 비행
1일 전
—
지난해까지
미국 연방항공청(FAA)은
스페이스X가
스타십 발사를 연간 최대 5회 시도하도록 허용했습니다. 이번 달에는 그 수가 25회로 증가했습니다. 많은 일이 발생할 수 있습니다...
사람들이 함께 검색하는 내용
최신 스페이스X 뉴스
나사
최신 스페이스X 뉴스
실시간
스페이스X
오늘 발사 생중계
스페이스X
스타십
뉴스
오늘
스페이스X
스타십 발사 예정일
스페이스X
오늘 밤 발사
스페이스X
오늘 발사 생중계 카운트다운
스페이스X
최근 착륙
페이지 탐색
1
2
3
4
5
6
7
8
9
10
다음
푸터 링크
Google 앱
모델 출력
아래 스니펫에서 모델이 결과 검토를 완료했습니다. 보시다시피 검색 결과를 깔끔하게 요약했습니다.
================================== AI 메시지 ==================================
스페이스X의 최신 업데이트는 다음과 같습니다:
1. **팔콘 9 발사**: 스페이스X의 팔콘 9 로켓이 최근 플로리다에서 27개의 스타링크 위성을 궤도에 성공적으로 배치했습니다. 이 위성들의 배치 확인은 약 9시간 전에 이루어졌습니다.
2. **스타십 프로그램의 난관**: 스페이스X의 스타십 프로그램은 최근 몇 가지 어려움을 겪었습니다. 스타십이 시험 중 폭발하는 사고가 발생하여 회사에 차질이 생겼습니다. 그럼에도 불구하고 엘론 머스크는 6번째 우주비행사 임무 이후 더 위험한 발사 계획을 시사했습니다.
3. **발사 능력 증대**: 미국 연방항공청(FAA)은 스페이스X가 연간 수행할 수 있는 스타십 발사 횟수를 5회에서 25회로 늘려 더 빈번한 시험 발사를 허용했습니다.
이러한 발전은 스페이스X 운영 내 지속적인 진전과 도전 과제를 보여줍니다.
결론
AI 개발은 점점 더 쉬워지고 있습니다. LangChain과 Bright Data를 사용하면 구글, 빙 등 최고의 검색 엔진을 활용할 수 있습니다! 여기 제시된 예시는 자동화된 검색 어시스턴트라는 매우 기본적인 수준이었습니다.
이 프로젝트를 한 단계 발전시켜 LangChain에 여러 도구를 추가해 볼 수 있습니다. 이제 도구 생성 방법, SERP 결과 정제 방법, 향상된 출력을 위해 AI 에이전트에 결과를 제공하는 방법을 알게 되었습니다. 새로 습득한 기술을 활용하여 무언가를 만들어 보세요.
LangChain은 다음과 같은 도구들과의 통합도 제공합니다.
브라이트 데이터에서는 여러분의 데이터 수집 요구에 맞는 다양한 형태와 규모의 제품을 제공합니다. 무료 체험판에 가입하고 지금 바로 시작해 보세요!