카테고리 없음

langchain 기초(3)

도그사운드 2025. 4. 16. 14:52

파일 구성

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. 에이전트의 내부 작동 방식

  1. 입력 받기: 사용자 질문 (예: “이 사람의 링크드인 찾아줘”)
  2. 추론(Reasoning): 어떤 작업들이 필요한지 LLM이 분석
  3. 행동(Acting): 툴을 호출하여 작업 수행
  4. 응답 생성: 모든 하위 작업 결과를 조합하여 응답 반환

이것이 바로 ReAct(Reasoning + Acting) 패턴
📌 LangChain에서 아주 중요한 프롬프트 테크닉 중 하나입니다

 

 

예시 에이전트 구성

이름을 입력하면 → 그 사람의 LinkedIn URL을 찾아주는 에이전트

 

LangChain 에이전트는:

  • LLM의 한계를 보완해주는 핵심 컴포넌트이며
  • 외부 세계와 소통할 수 있게 해주는 강력한 인프라
  1. 필수 모듈 임포트
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 정의
  1.  
     
     
    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에서 로드