Coordinate(Orchestrate) Agents - agno 의 기능을 똑같이 crewai 에서 구현하고자 한다.
먼저 crewai 의 동작원리를 보자

Agent 와 Task 클래스를 분리하여 정의한 다음에 Crew클래스에 정리해서 Crew인스턴스를 kickoff() 해서 결과를 얻는다.
agno 에서의 instructions 은 Task의 description 과 expected_output 에 해당된다.
그럼 Coordinate(Orchestrate) Agents 를 구현해 보자

agno의 agent_team 역할을 Manager agent가 담당하게 된다.
이때 중요한 것은 Agent의 allow_delegation 파라미터를 Manager 에만 True 를 설정하고 나머지는 False로 본연의 Agent역할만 집중할 수 있게 해야 한다.
pip install crewai crewai-tools langchain langchain-community duckduckgo_search yfinance
from langchain.agents import tools
from langchain.agents import load_tools
from crewai import Agent, Task, Process, Crew
from langchain.tools import DuckDuckGoSearchRun
from crewai_tools import toolimport yfinance as yf
crewai는 직접적으로 DuckDuckGo 와 YFinance를 지원하지 않기 때문에 아래와 같이 tool 을 정의하여 Agent에 등록
@tool('DuckDuckGoSearch')
def web_search
(search_query: str):
(search_query: str):
return DuckDuckGoSearchRun(backend="news", num_results=5 , verbose=True).run(search_query)
@tool("YFinanceSearch")
def fin_searchl(ticker):
stock = yf.Ticker(ticker)
return str(stock.info)
Agent 정의
agent_web = Agent(
role="Research Specialist",
goal="Find accurate, up-to-date information on any topic",
backstory="""당신은 숙련된 웹 리서처이자 뉴스 분석가입니다!""",
allow_delegation=False, # Specialists focus on their expertise
tools=[web_search],
#llm= default=“gpt-4”. 또는 langchain.llms로 정의해서 사용가능
verbose=True,
)
agent_finance = Agent(
role="Finance Agent",
goal="Provide accurate research and analysis",
backstory="당신은 시장 데이터를 전문적으로 다루는 숙련된 금융 분석가입니다!",
allow_delegation=False, # Specialists focus on their expertise
tools=[ fin_searchl ],
#llm= default=“gpt-4”. 또는 langchain.llms로 정의해서 사용가능
verbose=True
)
agent_manager = Agent(
role="Project Manager",
goal="Coordinate team efforts and ensure project success",
backstory="당신은 명성 있는 금융 뉴스 데스크의 수석 편집장입니다!",
allow_delegation=True,
verbose=True
)
Task 정의
task_manager = Task(
description=f"""
당신의 역할:
1. 웹 리서처와 금융 분석가 간의 협업을 조정하세요.
2. 그들의 분석 결과를 통합해 설득력 있는 스토리로 구성하세요.
3. 모든 정보가 적절히 출처 표기되고 검증되었는지 확인하세요.
4. 뉴스와 데이터를 균형 있게 제시하세요.
5. 주요 리스크와 기회를 강조하세요.
""",
expected_output=f"""
스타일 가이드:
- 주목을 끄는 헤드라인으로 시작하세요.
- 강렬한 임원 요약(Executive Summary)으로 서두를 여세요.
- 재무 데이터를 먼저 제시하고, 그 다음에 뉴스 배경을 설명하세요.
- 정보 유형별로 명확한 구분 섹션을 두세요.
- 가능한 경우 관련 차트나 표를 포함하세요.
- 현재 시장 분위기를 담은 ‘시장 심리(Market Sentiment)’ 섹션을 추가하세요.
- 문서 말미에 ‘핵심 요약(Key Takeaways)’ 섹션을 넣으세요.
- 필요할 경우 ‘리스크 요인(Risk Factors)’으로 마무리하세요.
- 마지막에는 ‘Market Watch Team’과 현재 날짜로 서명하세요.\
""",
agent=agent_manager,
)
task_web = Task(
description=f"""
search news tool를 사용하여 NVIDIA사에 관한 최근 10개의 뉴스를 출력하세요.
정보를 검색할 때는 다음 단계를 따르세요:
1. 가장 최근이고 관련성 높은 자료부터 확인하세요.
2. 여러 출처의 정보를 교차 검증하세요.
3. 신뢰할 수 있는 언론사와 공식 출처를 우선시하세요.
4. 항상 출처를 링크와 함께 명시하세요.
5. 시장에 영향을 미치는 뉴스나 주요 동향에 집중하세요.
""",
expected_output=f"""
스타일 가이드:
- 명확하고 저널리즘적인 문체로 정보를 전달하세요.
- 핵심 요점을 불릿 포인트로 정리하세요.
- 가능한 경우 관련된 인용문을 포함하세요.
- 각 뉴스 항목의 날짜와 시간을 명시하세요.
- 시장 분위기와 산업 동향을 강조하세요.
- 전체적인 흐름에 대한 간단한 분석으로 마무리하세요.
- 규제 관련 뉴스, 실적 보고, 전략 발표에 특히 주의를 기울이세요.
""",
agent=agent_web,
)
task_finance = Task(
description=f"""
financial data를 근거로 하여 NVIDIA사의 주식을 분석하세요.
재무 데이터를 분석할 때는 다음 단계를 따르세요:
1. 최신 주가, 거래량, 일일 변동 범위부터 확인하세요.
2. 애널리스트들의 상세한 투자 의견과 컨센서스 목표 주가를 제시하세요.
3. 주요 지표(P/E 비율, 시가총액, 52주 변동 범위)를 포함하세요.
4. 거래 패턴과 거래량 추세를 분석하세요.
5. 관련 업종 지수와의 성과를 비교하세요.
""",
expected_output=f"""
스타일 가이드:
- 구조화된 데이터는 표로 제시하세요.
- 각 데이터 섹션에는 명확한 제목을 달아주세요.
- 기술 용어에는 간단한 설명을 추가하세요.
- 주목할 만한 변화를 이모지(📈 📉)로 강조하세요.
- 핵심 인사이트는 불릿 포인트로 정리하세요.
- 현재 수치를 과거 평균과 비교하세요.
- 데이터 기반의 금융 전망으로 마무리하세요.
""",
agent=agent_finance,
)
Crew 의 정의
crew = Crew(
agents=[agent_manager, agent_web, agent_finance],
tasks=[task_manager, task_web, task_finance],
process=Process.hierarchical, # Manager coordinates everything
manager_llm="gpt-4o", # Specify LLM for manager
verbose=True
)
실행
crew.kickoff()
'data science > AI Agents' 카테고리의 다른 글
| agno - 웹사이트 정보 취득후 블로그 컨텐츠 제작 Agent (0) | 2025.10.16 |
|---|---|
| agno vs crewai framework (0) | 2025.10.12 |
| Coordinate(Orchestrate) Agents - agno (0) | 2025.10.12 |
| Multi-Agents : 채용 에이전트 (0) | 2025.10.12 |
| memory - mem0 ("mem-zero") (0) | 2025.10.11 |