파일 구성
project-root/
├── third_parties/
│ └── linkedin.py # LinkedIn 스크래핑 로직
├── program.py # 메인 애플리케이션 로직
├── .env # API 키 저장
└── ... # 기타 LangChain 설정 등
.env
PROXYCURL_API_KEY=your_api_key_here
linkedin 스크래핑
import os import requests from dotenv import load_dotenv load_dotenv() def scrape_linkedin_profile(linkedin_profile_url: str, mock: bool = False): if mock: # GitHub Gist에 있는 JSON에서 로드 url = "https://gist.githubusercontent.com/사용자명/파일/raw" response = requests.get(url, timeout=10) else: api_key = os.getenv("PROXYCURL_API_KEY") headers = {"Authorization": f"Bearer {api_key}"} params = {"url": linkedin_profile_url} response = requests.get("https://nubela.co/proxycurl/api/v2/linkedin", headers=headers, params=params, timeout=10) data = response.json() filtered = {k: v for k, v in data.items() if v} return filtered |
실행프로그램
from third_parties.linkedin import scrape_linkedin_profile if __name__ == "__main__": linkedin_data = scrape_linkedin_profile("https://www.linkedin.com/in/예시", mock=True) # 여기서 LangChain or LLM에 전달 print(linkedin_data) |
1. 왜 에이전트가 필요한가?
- LLM은 훈련 시점 이후의 최신 정보를 모름
- 예: 오늘의 날씨, 최신 뉴스, 실시간 데이터 등
- 외부 데이터에 접근하거나 API 호출이 필요할 때는 한계가 있음
- 👉 **에이전트(Agent)**를 사용하면 LLM이 외부 작업까지 수행 가능!
2. 에이전트란?
사용자를 대신해 작업을 수행하는 지능형 보조 봇
- LLM의 “두뇌” + 외부 툴(도구들)을 활용하여 추론 + 행동을 수행
- 요청을 분석하고 적절한 **하위 작업(task)**을 자동으로 계획하고 실행
- 외부 API 호출, 데이터베이스 접근, 웹 검색 등도 가능
3. 툴(Tool)이란?
에이전트가 사용하는 "팔과 다리" 같은 것
- 특정 기능을 수행하는 래퍼 (ex: 뉴스 검색, DB 조회, 계산기 등)
- 에이전트는 적절한 툴을 선택해 작업을 처리
4. 에이전트의 내부 작동 방식
- 입력 받기: 사용자 질문 (예: “이 사람의 링크드인 찾아줘”)
- 추론(Reasoning): 어떤 작업들이 필요한지 LLM이 분석
- 행동(Acting): 툴을 호출하여 작업 수행
- 응답 생성: 모든 하위 작업 결과를 조합하여 응답 반환
이것이 바로 ReAct(Reasoning + Acting) 패턴
📌 LangChain에서 아주 중요한 프롬프트 테크닉 중 하나입니다
예시 에이전트 구성
이름을 입력하면 → 그 사람의 LinkedIn URL을 찾아주는 에이전트
- 입력: "Elon Musk"
- 동작:
- 구글 검색 API 툴 호출
- site:linkedin.com 필터로 LinkedIn URL 추출
- 출력: https://www.linkedin.com/in/elonmusk
LangChain 에이전트는:
- LLM의 한계를 보완해주는 핵심 컴포넌트이며
- 외부 세계와 소통할 수 있게 해주는 강력한 인프라
- 필수 모듈 임포트
import os from dotenv import load_dotenv from langchain.chat_models import ChatOpenAI from langchain.agents import Tool, create_react_agent, AgentExecutor from langchain.prompts import PromptTemplate from langchain import hub |
2. .env 파일 로딩 및 API 키 설정
load_dotenv()
3. LLM 및 검색 Tool 정의
-
def search_web(query: str) -> str:# 예: SerpAPI, DuckDuckGo 등 사용return "검색 결과 URL"search_tool = Tool(name="web-search",func=search_web,description="이름에 대한 LinkedIn 프로필을 검색합니다.")4. Agent 생성llm = ChatOpenAI(temperature=0)agent = create_react_agent(llm=llm,tools=[search_tool],prompt=hub.pull("example-prompt"))executor = AgentExecutor(agent=agent, tools=[search_tool], verbose=True)5. Lookup 함수구현def lookup(name: str) -> str:return executor.invoke({"input": f"{name}의 LinkedIn 프로필을 찾아줘"})
ReAct 에이전트 | 생각 + 행동을 반복하며 작업 수행 |
Tool | LLM이 호출할 수 있는 외부 기능 (ex. 검색) |
AgentExecutor | 실제 에이전트를 실행시켜 결과 출력 |
Prompt from hub | 미리 구성된 프롬프트를 LangChain Hub에서 로드 |