스타트업 인턴 일기 [04화]에서 이어집니다..
https://jhklee-coder.tistory.com/95
오늘은 LangChain이라고 하는 유명 AI 프레임워크이자, 툴을 공부하던 중 접했던 Tool과 Agent의 개념에 대해 조금 정리하면서 시작하려 한다. 우선 LangChain에 대해 잘 알지 못하는 이들이라면, 아래 글을 한번 읽고 오자!
LangChain (랭체인)
랭체인(LangChain)은 대규모 언어 모델과 앱의 통합을 간소화하는 SDK*다. 최근 LLM 모델의 부상과 함께 그 활용성의 측면에서 랭체인의 범용성 또한 퍼지고 있다. 새로운 오픈소스 모델의 출시나 상
jhklee-coder.tistory.com
1️⃣ Tool 방식이란?
AI 툴 (Tool) : 특정 작업만을 수행하도록 설계된 프로그램으로, 정해진 범위 내에서 작동한다. 쉽게 자동차 안의 네비게이션과 같은 역할이라고 볼 수 있다. 운전자가 GPS가 탑재된 네비게이션에 원하는 목적지를 입력하면, 친절한 네비 비서는 목적지로 가기 위한 경로와 방향을 화면에 보여준다.
중요한 건 네비게이션이 특정 작업 (ex. 목적지를 가기 위한 방향 안내)을 수행하기 위한 도구라는 점이다. 그럼 여기서 몇 가지 특징을 좀 더 정리해보자.
☑️ 사용자 입력에 완전히 의존한다.
☑️ 분석 실행 (ex. 경로 탐색), 인사이트 생성 (ex. 차가 밀리지 않는 도로 탐색), 규칙 기반의 자동화 작업 (ex. 시간이 가장 단축되는 경로 실시간 탐색)
☑️ 스스로 행동하지는 않는다.
Text-Summarization 예제 코드를 통해 좀 더 심층적인 이해와 응용을 해보겠다!
예시) "내가 특정 URL (Link) 을 입력했을 때 해당 링크의 핵심 주제와 요약문을 알려줘! HuggingFace에 있는 Text- Summarization 모델들 중 어떤 모델을 사용해야 해당 link의 정보를 가장 정확하고 알차게 요약할 수 있을까?"
# tools_example.py [네이버 뉴스 기사를 요약하는 TOOL 정의 예시]
import requests, os
from bs4 import BeautifulSoup
from langchain.tools import tool
from langchain_community.chat_models import ChatOpenAI
from langchain_text_splitters import CharacterTextSplitter
from langchain.prompts import PromptTemplate
from langchain.chains.summarize import load_summarize_chain
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # OpenAI API를 사용한 내용 요약
def extract_news_content(url: str):
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"!!요청 실패: HTTP {response.status_code}")
return None, None
soup = BeautifulSoup(response.text, "html.parser")
article_tag = soup.find("article", id="dic_area")
if not article_tag:
print("!!본문을 찾을 수 없습니다.")
return "제목 없음", None
title_div = article_tag.find("div", style=lambda x: x and 'border-left' in x)
title = title_div.get_text(strip=True) if title_div else "제목 없음"
for tag in article_tag(["script", "style", "img", "figure", "iframe", "table"]):
tag.decompose()
paragraphs = article_tag.find_all(["p", "span", "div"])
content = "\n".join(p.get_text(strip=True) for p in paragraphs if p.get_text(strip=True))
return title, content if content else None
# tool 방식을 적용
@tool
def news_summarization_tool(url: str) -> str:
"""뉴스 URL에서 제목과 본문을 크롤링하고 OpenAI GPT 모델로 요약합니다."""
title, full_text = extract_news_content(url)
if not full_text:
return "!!본문 크롤링 실패 또는 내용 부족"
text_splitter = CharacterTextSplitter(
separator="\n\n",
chunk_size=3000,
chunk_overlap=300,
length_function=len,
is_separator_regex=False,
)
docs = text_splitter.create_documents([full_text])
template = "다음의 내용을 한글로 요약해줘:\n\n{text}"
combine_template = "{text}\n\n요약 결과는 다음의 형식으로 작성해줘:\n- 제목: {title}\n- 주요내용: 한 줄 요약\n- 내용: 불렛 포인트로 주요 내용을 나열"
map_prompt = PromptTemplate(template=template, input_variables=["text"])
combine_prompt = PromptTemplate(template=combine_template, input_variables=["text", "title"])
llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0, api_key = OPENAI_API_KEY)
chain = load_summarize_chain(llm,
chain_type="map_reduce",
map_prompt=map_prompt,
combine_prompt=combine_prompt,
verbose=False)
summary_result = chain.invoke({"input_documents": docs, "title": title})
return summary_result['output_text']
if __name__ == "__main__":
url = "https://n.news.naver.com/mnews/article/016/0002432874"
result = news_summarization_tool.invoke(url)
print(result)
=> 모델의 선정을 위한 Tool 기능 처리 예시다. 실제 네이버 뉴스 기사를 입력하면 해당 기사의 주요 내용을 요약해주며, 해당 2월 24일자 네이버 뉴스 기사의 경우 아래와 같이 요약된다.

- 제목: 비트코인 21일 9만9411달러 찍고 해킹 여파 하락, 이더리움 2839달러까지…지난 6일 이후 최고 치
- 주요내용: 비트코인이 해킹 여파로 하락한 반면, 이더리움은 최근 최고가를 기록했다.
- 내용:
- 비트코인은 21일 9만9411달러에 도달.
- 해킹 사건으로 인해 비트코인 가격 하락.
- 이더리움은 2839달러까지 상승.
- 이더리움은 지난 6일 이후 최고치를 기록.
그럼 Agent의 구조는 어떻게 다를까??
2️⃣ Agent 방식이란?
AI 에이전트는 다양한 도구(Tool)들을 필요에 따라 능동적으로 선택하고 활용하여 지능적으로 사용자의 요청을 수행하는 프로그램이다. 위 Tool의 예시처럼 Agent를 자동차에 비유하면, 자율 주행 자동차의 운전자 같은 역할이라고 볼 수 있다.
운전자는 목적지만 정해주면, 자율 주행 자동차는 스스로 여러 센서와 도구(네비게이션, 장애물 탐지 시스템, 자동 브레이크 등)를 활용하여 목적지까지 스스로 운전해서 데려다 준다. 여기서 중요한 점은, AI 에이전트가 사용자의 목적을 이해하고, 그 목적을 이루기 위해 어떤 도구(Tool)를 어떻게 사용할지 스스로 판단하고 실행한다는 점이다. 그럼 Agent의 특징을 정리해보자.
☑️ 자연어 기반 사용자 요청(query)을 분석하고 이해하여 능동적으로 작동한다.
→ 예시: "회사까지 데려다줘"라는 명령을 이해하고, 목적지를 추론해 경로를 스스로 선택.
☑️ 필요에 따라 적합한 도구(Tool)를 자동으로 선택하고 활용한다.
→ 예시: 목적지까지의 경로 탐색 도구, 실시간 교통정보 조회 도구, 충돌 방지 시스템 등 다양한 도구를 상황에 맞게 활용하여 최적의 운전 경로를 자동으로 결정.
☑️ 복합적이고 상황별 판단이 필요할 때, 여러 도구를 결합하여 지능적으로 작업을 수행한다.
→ 예시: 교통상황이 갑자기 변하면 실시간 교통정보 도구와 길찾기 도구를 동시에 활용하여 새롭게 최적의 경로를 찾아 즉시 반영.
☑️ 최종 결과물을 제공하기 위한 의사결정 및 도구 선택 과정 자체가 AI 모델에 의해 이루어진다.
→ 예시: 주행 도중 도로가 막히거나 예상치 못한 장애물이 나타났을 때, 인간의 개입 없이 AI 에이전트가 자체 판단으로 최적의 대응을 함.
☑️ 사용자 입력 이상의 결과를 제공할 수 있으며, 스스로 행동하는 주체로서 작동한다.
→ 예시: 사용자가 구체적인 지시 없이 단순히 "빠르게 목적지까지 가줘"라고 요청하면, 스스로 가장 적합한 도구를 사용하여 가장 빠른 길로 사용자를 안내하고 운행.
그럼 위 Text-Summarization tool 예제 코드를 활용해서 agent 기능의 구현을 시도해보자.
# Agent_example.py [기존에 정의된 tool을 활용해 agent 기능을 구현한 예시]
from langchain.agents import initialize_agent, AgentType
from langchain_community.chat_models import ChatOpenAI
from tools_example import news_summarization_tool
# OpenAI 모델 초기화
llm = ChatOpenAI(model_name="gpt-4-mini", temperature=0)
# 사용할 Tool 정의
tools = [news_summarization_tool, ...] # youtube 요약, 영화 요약 등 기타 tool 기능들 추가 가능
# Agent 초기화 (Agent가 Tool을 선택하고 실행)
agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True,
handle_parsing_errors=True
)
if __name__ == "__main__":
# 사용자 입력 (요약 요청)
query = "이 뉴스 기사를 요약해줘: https://n.news.naver.com/mnews/article/016/0002432874"
# Agent를 통한 자동화된 Tool 실행 및 결과 얻기
result = agent.invoke(query)
# print("\n📌 [Agent의 최종 요약 결과]\n")
print(result['output'])
결과(로그 확인)는 다음과 같다.
> Entering new AgentExecutor chain...
Invoking: `news_summarization_tool` with `{'url': '
https://n.news.naver.com/mnews/article/016/0002432874'
}`
- 제목: 비트코인 21일 9만9411달러 찍고 해킹 여파 하락, 이더리움 2839달러까지…지난 6일 이후 최고
치
- 주요내용: 비트코인이 해킹 여파로 하락한 반면, 이더리움은 최고치를 기록했다.
- 내용:
- 비트코인은 21일 9만9411달러에 도달.
- 해킹 사건으로 인해 비트코인 가격 하락.
- 이더리움은 2839달러까지 상승.
- 이더리움은 지난 6일 이후 최고치를 기록.
제목: 비트코인 21일 9만9411달러 찍고 해킹 여파 하락, 이더리움 2839달러까지…지난 6일 이후 최고치
주요내용: 비트코인이 해킹 여파로 하락한 반면, 이더리움은 최고치를 기록했습니다.
- 비트코인은 21일 9만9411달러에 도달했으나, 해킹 사건으로 인해 가격이 하락했습니다.
- 이더리움은 2839달러까지 상승하며, 지난 6일 이후 최고치를 기록했습니다.
전체 Agent_example.py 파이프라인의 흐름은 다음과 같다.
- 사용자가 특정 뉴스기사의 URL을 제공하고, "오늘의 주요 뉴스를 요약해서 알려줘"라고 요청하면,
- AI 에이전트는 다음과 같이 작업을 수행한다:
- 뉴스기사 크롤링 Tool을 활용하여 기사의 제목과 본문을 자동으로 추출.
- 추출된 내용을 적절한 요약 Tool(OpenAI의 GPT 등)을 사용하여 자동으로 요약.
- 결과가 충분치 않거나 애매할 경우, 다른 추가적인 Tool(웹 검색 Tool 등)을 활용해 보완하고, 보다 정확한 정보를 제공.
📌 한눈에 비교하기
Tool (도구) Vs Agent (에이전트)
구분 | TOOL (도구) | AGENT (에이전트) |
역할 | 특정 작업 수행 (단순 명령) | 작업 판단 및 Tool 활용 (지능적 명령 수행) |
작업방식 | 입력-출력 고정 | 사용자의 자연어 쿼리 분석 및 Tool 동적 선택 |
예시 | 뉴스 요약, 웹 크롤링 등 | "비트코인 시세 알려줘", "오늘 날씨는?" 등 |
구성요소 | 개별 기능 | Tool들의 조합 + 언어모델 |
복잡도 | 단순하고 구체적인 형태 | 복합적이고 동적인 형태 |
확장성 | 단일 목적에 국한 | 복합적이고 다양한 목적 수행 가능 |
이번 인턴 일기는 LangChain과 LangGraph의 또다른 핵심 모듈이자 기능인 Tool과 Agent의 차이에 대해 실습을 통해 공부했다. 간단한 예시이지만, 해당 요약을 위해 Tool 구조를 더 복잡하게 구성하여 요약 코드를 구현하는 것도 가능하다. 링크 형태에 따라 요약 모델을 다르게 한다던지 (ex. youtube 영상 요약 모델 , Stock 뉴스 요약 모델), 등 기타 tool 기능들 간의 결합도 가능하다.
이처럼 실제 Tool만으로도 핵심 로직들을 구현하기 용이할 수 있으나, AI의 자율성과 함께 더 복잡하고 다양한 목적을 수행 가능하게 하기 위해선 Agent 의 기능이 필수적이다. 왜냐? Tool은 주어진 명확한 작업만 수행하는 네비게이션과 같고, Agent는 자율 주행 자동차 운전자처럼 스스로 필요에 따라 여러 도구를 능숙하게 사용하고 판단하여 목적지까지 안내하는 역할이기 때문!!
3️⃣ Reference
Build an Agent | 🦜️🔗 LangChain
By themselves, language models can't take actions - they just output text.
python.langchain.com
Agents vs. chains vs. tools
Hello, I have a theoretical question. I don’t quite understand what the difference is between using an agent or several chains. Chains contain LLM, so what function do agents have that is different from the concatenation of several chains? If an agent ca
community.deeplearning.ai
☑️ 두 달 간의 여정을 끝으로.. ?

이번 인턴 일기 5화를 기점으로 퓨처워크랩 공식 인턴 일정은 끝이 났다!! 6주라는 짧은 기간 동안 정말 양질의 업무와 즐거운 회사 경험을 쌓을 수 있게 다방면으로 기회를 주신 퓨처워크랩 사내 직원 분들께 감사드린다!! LinkBrain이라는 초기 프로젝트의 기여자가 될 수도 있는 만큼, 노트북 앞에 앉을 때마다 많은 고민을 거듭했던 기억이 남는다 ㅎㅋㅋㅋㅋ 재택+대면 혼합근무라는 업무 특성 상 회사 분들을 자주 뵐 일은 없었지만, 개인적으로 정말 뜻깊고 재밌는 인턴 생활이었다.
하지만 아직 끝이 아니다..!! 약 6주 간의 짧고도 긴 인턴 생활이었으나, 개인적으로도 아쉬움이 많이 남았던 경험이었다. 그래서인지 기회를 주셨을 때 남은 학기 일정을 염두에 두고 정말 고민을 많이 했다. 지난 아쉬움과 고민은 뒤로 하고, 선뜻 대표님께서 인턴직을 지속할 수 있겠냐는 제의를 주셨다. 그리고 계속 하고 싶다는 내 의사와 함께 파트타임으로 AI Engineer Intern 직을 맡게 되었다. 인턴 일기를 계속할 수 있을지는 의문이지만... 그래도 항상 틈틈히 새로운 개념과 경험에 대한 기록은 꾸준히 남겨보려 한다! 다시 한 번 만나서 반갑습니다 futureworklab!!
My Framer Site
Made with Framer
www.futureworklab.co.kr
(인턴 일기는 앞으로도 계속됩니다..!!)
'Experience' 카테고리의 다른 글
스타트업 인턴 일기 [04화] (0) | 2025.02.14 |
---|---|
스타트업 인턴 일기 [03화] (1) | 2025.02.06 |
스타트업 인턴 일기 [02화] (1) | 2025.01.22 |
스타트업 인턴 일기 [01화] (0) | 2025.01.15 |
경희대학교 데이터 분석 & AI 동아리 KHUDA 4th [교내활동] (1) | 2023.12.26 |
스타트업 인턴 일기 [04화]에서 이어집니다..
https://jhklee-coder.tistory.com/95
오늘은 LangChain이라고 하는 유명 AI 프레임워크이자, 툴을 공부하던 중 접했던 Tool과 Agent의 개념에 대해 조금 정리하면서 시작하려 한다. 우선 LangChain에 대해 잘 알지 못하는 이들이라면, 아래 글을 한번 읽고 오자!
LangChain (랭체인)
랭체인(LangChain)은 대규모 언어 모델과 앱의 통합을 간소화하는 SDK*다. 최근 LLM 모델의 부상과 함께 그 활용성의 측면에서 랭체인의 범용성 또한 퍼지고 있다. 새로운 오픈소스 모델의 출시나 상
jhklee-coder.tistory.com
1️⃣ Tool 방식이란?
AI 툴 (Tool) : 특정 작업만을 수행하도록 설계된 프로그램으로, 정해진 범위 내에서 작동한다. 쉽게 자동차 안의 네비게이션과 같은 역할이라고 볼 수 있다. 운전자가 GPS가 탑재된 네비게이션에 원하는 목적지를 입력하면, 친절한 네비 비서는 목적지로 가기 위한 경로와 방향을 화면에 보여준다.
중요한 건 네비게이션이 특정 작업 (ex. 목적지를 가기 위한 방향 안내)을 수행하기 위한 도구라는 점이다. 그럼 여기서 몇 가지 특징을 좀 더 정리해보자.
☑️ 사용자 입력에 완전히 의존한다.
☑️ 분석 실행 (ex. 경로 탐색), 인사이트 생성 (ex. 차가 밀리지 않는 도로 탐색), 규칙 기반의 자동화 작업 (ex. 시간이 가장 단축되는 경로 실시간 탐색)
☑️ 스스로 행동하지는 않는다.
Text-Summarization 예제 코드를 통해 좀 더 심층적인 이해와 응용을 해보겠다!
예시) "내가 특정 URL (Link) 을 입력했을 때 해당 링크의 핵심 주제와 요약문을 알려줘! HuggingFace에 있는 Text- Summarization 모델들 중 어떤 모델을 사용해야 해당 link의 정보를 가장 정확하고 알차게 요약할 수 있을까?"
# tools_example.py [네이버 뉴스 기사를 요약하는 TOOL 정의 예시]
import requests, os
from bs4 import BeautifulSoup
from langchain.tools import tool
from langchain_community.chat_models import ChatOpenAI
from langchain_text_splitters import CharacterTextSplitter
from langchain.prompts import PromptTemplate
from langchain.chains.summarize import load_summarize_chain
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # OpenAI API를 사용한 내용 요약
def extract_news_content(url: str):
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"!!요청 실패: HTTP {response.status_code}")
return None, None
soup = BeautifulSoup(response.text, "html.parser")
article_tag = soup.find("article", id="dic_area")
if not article_tag:
print("!!본문을 찾을 수 없습니다.")
return "제목 없음", None
title_div = article_tag.find("div", style=lambda x: x and 'border-left' in x)
title = title_div.get_text(strip=True) if title_div else "제목 없음"
for tag in article_tag(["script", "style", "img", "figure", "iframe", "table"]):
tag.decompose()
paragraphs = article_tag.find_all(["p", "span", "div"])
content = "\n".join(p.get_text(strip=True) for p in paragraphs if p.get_text(strip=True))
return title, content if content else None
# tool 방식을 적용
@tool
def news_summarization_tool(url: str) -> str:
"""뉴스 URL에서 제목과 본문을 크롤링하고 OpenAI GPT 모델로 요약합니다."""
title, full_text = extract_news_content(url)
if not full_text:
return "!!본문 크롤링 실패 또는 내용 부족"
text_splitter = CharacterTextSplitter(
separator="\n\n",
chunk_size=3000,
chunk_overlap=300,
length_function=len,
is_separator_regex=False,
)
docs = text_splitter.create_documents([full_text])
template = "다음의 내용을 한글로 요약해줘:\n\n{text}"
combine_template = "{text}\n\n요약 결과는 다음의 형식으로 작성해줘:\n- 제목: {title}\n- 주요내용: 한 줄 요약\n- 내용: 불렛 포인트로 주요 내용을 나열"
map_prompt = PromptTemplate(template=template, input_variables=["text"])
combine_prompt = PromptTemplate(template=combine_template, input_variables=["text", "title"])
llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0, api_key = OPENAI_API_KEY)
chain = load_summarize_chain(llm,
chain_type="map_reduce",
map_prompt=map_prompt,
combine_prompt=combine_prompt,
verbose=False)
summary_result = chain.invoke({"input_documents": docs, "title": title})
return summary_result['output_text']
if __name__ == "__main__":
url = "https://n.news.naver.com/mnews/article/016/0002432874"
result = news_summarization_tool.invoke(url)
print(result)
=> 모델의 선정을 위한 Tool 기능 처리 예시다. 실제 네이버 뉴스 기사를 입력하면 해당 기사의 주요 내용을 요약해주며, 해당 2월 24일자 네이버 뉴스 기사의 경우 아래와 같이 요약된다.

- 제목: 비트코인 21일 9만9411달러 찍고 해킹 여파 하락, 이더리움 2839달러까지…지난 6일 이후 최고 치
- 주요내용: 비트코인이 해킹 여파로 하락한 반면, 이더리움은 최근 최고가를 기록했다.
- 내용:
- 비트코인은 21일 9만9411달러에 도달.
- 해킹 사건으로 인해 비트코인 가격 하락.
- 이더리움은 2839달러까지 상승.
- 이더리움은 지난 6일 이후 최고치를 기록.
그럼 Agent의 구조는 어떻게 다를까??
2️⃣ Agent 방식이란?
AI 에이전트는 다양한 도구(Tool)들을 필요에 따라 능동적으로 선택하고 활용하여 지능적으로 사용자의 요청을 수행하는 프로그램이다. 위 Tool의 예시처럼 Agent를 자동차에 비유하면, 자율 주행 자동차의 운전자 같은 역할이라고 볼 수 있다.
운전자는 목적지만 정해주면, 자율 주행 자동차는 스스로 여러 센서와 도구(네비게이션, 장애물 탐지 시스템, 자동 브레이크 등)를 활용하여 목적지까지 스스로 운전해서 데려다 준다. 여기서 중요한 점은, AI 에이전트가 사용자의 목적을 이해하고, 그 목적을 이루기 위해 어떤 도구(Tool)를 어떻게 사용할지 스스로 판단하고 실행한다는 점이다. 그럼 Agent의 특징을 정리해보자.
☑️ 자연어 기반 사용자 요청(query)을 분석하고 이해하여 능동적으로 작동한다.
→ 예시: "회사까지 데려다줘"라는 명령을 이해하고, 목적지를 추론해 경로를 스스로 선택.
☑️ 필요에 따라 적합한 도구(Tool)를 자동으로 선택하고 활용한다.
→ 예시: 목적지까지의 경로 탐색 도구, 실시간 교통정보 조회 도구, 충돌 방지 시스템 등 다양한 도구를 상황에 맞게 활용하여 최적의 운전 경로를 자동으로 결정.
☑️ 복합적이고 상황별 판단이 필요할 때, 여러 도구를 결합하여 지능적으로 작업을 수행한다.
→ 예시: 교통상황이 갑자기 변하면 실시간 교통정보 도구와 길찾기 도구를 동시에 활용하여 새롭게 최적의 경로를 찾아 즉시 반영.
☑️ 최종 결과물을 제공하기 위한 의사결정 및 도구 선택 과정 자체가 AI 모델에 의해 이루어진다.
→ 예시: 주행 도중 도로가 막히거나 예상치 못한 장애물이 나타났을 때, 인간의 개입 없이 AI 에이전트가 자체 판단으로 최적의 대응을 함.
☑️ 사용자 입력 이상의 결과를 제공할 수 있으며, 스스로 행동하는 주체로서 작동한다.
→ 예시: 사용자가 구체적인 지시 없이 단순히 "빠르게 목적지까지 가줘"라고 요청하면, 스스로 가장 적합한 도구를 사용하여 가장 빠른 길로 사용자를 안내하고 운행.
그럼 위 Text-Summarization tool 예제 코드를 활용해서 agent 기능의 구현을 시도해보자.
# Agent_example.py [기존에 정의된 tool을 활용해 agent 기능을 구현한 예시]
from langchain.agents import initialize_agent, AgentType
from langchain_community.chat_models import ChatOpenAI
from tools_example import news_summarization_tool
# OpenAI 모델 초기화
llm = ChatOpenAI(model_name="gpt-4-mini", temperature=0)
# 사용할 Tool 정의
tools = [news_summarization_tool, ...] # youtube 요약, 영화 요약 등 기타 tool 기능들 추가 가능
# Agent 초기화 (Agent가 Tool을 선택하고 실행)
agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True,
handle_parsing_errors=True
)
if __name__ == "__main__":
# 사용자 입력 (요약 요청)
query = "이 뉴스 기사를 요약해줘: https://n.news.naver.com/mnews/article/016/0002432874"
# Agent를 통한 자동화된 Tool 실행 및 결과 얻기
result = agent.invoke(query)
# print("\n📌 [Agent의 최종 요약 결과]\n")
print(result['output'])
결과(로그 확인)는 다음과 같다.
> Entering new AgentExecutor chain...
Invoking: `news_summarization_tool` with `{'url': '
https://n.news.naver.com/mnews/article/016/0002432874'
}`
- 제목: 비트코인 21일 9만9411달러 찍고 해킹 여파 하락, 이더리움 2839달러까지…지난 6일 이후 최고
치
- 주요내용: 비트코인이 해킹 여파로 하락한 반면, 이더리움은 최고치를 기록했다.
- 내용:
- 비트코인은 21일 9만9411달러에 도달.
- 해킹 사건으로 인해 비트코인 가격 하락.
- 이더리움은 2839달러까지 상승.
- 이더리움은 지난 6일 이후 최고치를 기록.
제목: 비트코인 21일 9만9411달러 찍고 해킹 여파 하락, 이더리움 2839달러까지…지난 6일 이후 최고치
주요내용: 비트코인이 해킹 여파로 하락한 반면, 이더리움은 최고치를 기록했습니다.
- 비트코인은 21일 9만9411달러에 도달했으나, 해킹 사건으로 인해 가격이 하락했습니다.
- 이더리움은 2839달러까지 상승하며, 지난 6일 이후 최고치를 기록했습니다.
전체 Agent_example.py 파이프라인의 흐름은 다음과 같다.
- 사용자가 특정 뉴스기사의 URL을 제공하고, "오늘의 주요 뉴스를 요약해서 알려줘"라고 요청하면,
- AI 에이전트는 다음과 같이 작업을 수행한다:
- 뉴스기사 크롤링 Tool을 활용하여 기사의 제목과 본문을 자동으로 추출.
- 추출된 내용을 적절한 요약 Tool(OpenAI의 GPT 등)을 사용하여 자동으로 요약.
- 결과가 충분치 않거나 애매할 경우, 다른 추가적인 Tool(웹 검색 Tool 등)을 활용해 보완하고, 보다 정확한 정보를 제공.
📌 한눈에 비교하기
Tool (도구) Vs Agent (에이전트)
구분 | TOOL (도구) | AGENT (에이전트) |
역할 | 특정 작업 수행 (단순 명령) | 작업 판단 및 Tool 활용 (지능적 명령 수행) |
작업방식 | 입력-출력 고정 | 사용자의 자연어 쿼리 분석 및 Tool 동적 선택 |
예시 | 뉴스 요약, 웹 크롤링 등 | "비트코인 시세 알려줘", "오늘 날씨는?" 등 |
구성요소 | 개별 기능 | Tool들의 조합 + 언어모델 |
복잡도 | 단순하고 구체적인 형태 | 복합적이고 동적인 형태 |
확장성 | 단일 목적에 국한 | 복합적이고 다양한 목적 수행 가능 |
이번 인턴 일기는 LangChain과 LangGraph의 또다른 핵심 모듈이자 기능인 Tool과 Agent의 차이에 대해 실습을 통해 공부했다. 간단한 예시이지만, 해당 요약을 위해 Tool 구조를 더 복잡하게 구성하여 요약 코드를 구현하는 것도 가능하다. 링크 형태에 따라 요약 모델을 다르게 한다던지 (ex. youtube 영상 요약 모델 , Stock 뉴스 요약 모델), 등 기타 tool 기능들 간의 결합도 가능하다.
이처럼 실제 Tool만으로도 핵심 로직들을 구현하기 용이할 수 있으나, AI의 자율성과 함께 더 복잡하고 다양한 목적을 수행 가능하게 하기 위해선 Agent 의 기능이 필수적이다. 왜냐? Tool은 주어진 명확한 작업만 수행하는 네비게이션과 같고, Agent는 자율 주행 자동차 운전자처럼 스스로 필요에 따라 여러 도구를 능숙하게 사용하고 판단하여 목적지까지 안내하는 역할이기 때문!!
3️⃣ Reference
Build an Agent | 🦜️🔗 LangChain
By themselves, language models can't take actions - they just output text.
python.langchain.com
Agents vs. chains vs. tools
Hello, I have a theoretical question. I don’t quite understand what the difference is between using an agent or several chains. Chains contain LLM, so what function do agents have that is different from the concatenation of several chains? If an agent ca
community.deeplearning.ai
☑️ 두 달 간의 여정을 끝으로.. ?

이번 인턴 일기 5화를 기점으로 퓨처워크랩 공식 인턴 일정은 끝이 났다!! 6주라는 짧은 기간 동안 정말 양질의 업무와 즐거운 회사 경험을 쌓을 수 있게 다방면으로 기회를 주신 퓨처워크랩 사내 직원 분들께 감사드린다!! LinkBrain이라는 초기 프로젝트의 기여자가 될 수도 있는 만큼, 노트북 앞에 앉을 때마다 많은 고민을 거듭했던 기억이 남는다 ㅎㅋㅋㅋㅋ 재택+대면 혼합근무라는 업무 특성 상 회사 분들을 자주 뵐 일은 없었지만, 개인적으로 정말 뜻깊고 재밌는 인턴 생활이었다.
하지만 아직 끝이 아니다..!! 약 6주 간의 짧고도 긴 인턴 생활이었으나, 개인적으로도 아쉬움이 많이 남았던 경험이었다. 그래서인지 기회를 주셨을 때 남은 학기 일정을 염두에 두고 정말 고민을 많이 했다. 지난 아쉬움과 고민은 뒤로 하고, 선뜻 대표님께서 인턴직을 지속할 수 있겠냐는 제의를 주셨다. 그리고 계속 하고 싶다는 내 의사와 함께 파트타임으로 AI Engineer Intern 직을 맡게 되었다. 인턴 일기를 계속할 수 있을지는 의문이지만... 그래도 항상 틈틈히 새로운 개념과 경험에 대한 기록은 꾸준히 남겨보려 한다! 다시 한 번 만나서 반갑습니다 futureworklab!!
My Framer Site
Made with Framer
www.futureworklab.co.kr
(인턴 일기는 앞으로도 계속됩니다..!!)
'Experience' 카테고리의 다른 글
스타트업 인턴 일기 [04화] (0) | 2025.02.14 |
---|---|
스타트업 인턴 일기 [03화] (1) | 2025.02.06 |
스타트업 인턴 일기 [02화] (1) | 2025.01.22 |
스타트업 인턴 일기 [01화] (0) | 2025.01.15 |
경희대학교 데이터 분석 & AI 동아리 KHUDA 4th [교내활동] (1) | 2023.12.26 |