티스토리 뷰

반응형

Ollama + CrewAI + FastAPI를 활용한 한국 주식 분석 블로그 -

 

📌 1단계: CrewAI 분석 에이전트 구성 최적화

이 글에서는 CrewAI의 분석 에이전트를 최적화하여 다양한 관점에서 한국 주식 시장을 분석하는 방법을 다룹니다.
이를 위해 긍정(Positive), 부정(Negative), 중립(Neutrality) 3명 + 의견 종합 분석 1명, 총 4개의 투자 전문가 에이전트를 구성합니다.

CrewAI의 멀티 에이전트 방식 이해
각 에이전트의 역할 정의 및 agents.yaml 설정
CrewAI 작업(Task) 정의 및 tasks.yaml 설정
crew.py에서 CrewAI 실행 방식 설정 (@agent, @task, @crew 적용, Process.sequential 사용)
main.py에서 CrewAI 실행 및 최종 분석 결과 확인


1.1 CrewAI의 역할 및 분석 방식

1.1.1 CrewAI의 멀티 에이전트 협업 방식

CrewAI는 여러 개의 에이전트가 협업하여 특정 작업을 수행하는 구조입니다.
이 프로젝트에서는 긍정, 부정, 중립 분석을 수행한 후, 최종적으로 이를 종합하여 리포트를 작성하는 방식을 사용합니다.

1.1.2 기존 단일 분석 방식과 CrewAI 방식의 차이점

구분 기존 단일 AI 분석 CrewAI 멀티 에이전트 분석

분석 방식 단일 LLM이 전체 분석 수행 여러 LLM이 개별 분석 후 최종 종합
의견 수렴 하나의 관점에서 분석 다양한 관점을 반영
결과의 신뢰성 단일 관점으로 편향 가능 긍정, 부정, 중립적 분석을 종합하여 균형 잡힌 결과 제공

1.2 CrewAI 에이전트 구성 및 역할 정의

이제 CrewAI의 4개 에이전트를 구성하고, 각 역할을 정의합니다.
모든 에이전트는 **투자 전문가(Investment Expert)**로 설정됩니다.

에이전트 역할 분석 방식

긍정적(Positive) 분석 에이전트 시장의 긍정적 요소 분석 강세장, 긍정적 뉴스, 투자 기회 탐색
부정적(Negative) 분석 에이전트 시장의 부정적 요소 분석 약세장, 위험 요소, 하락 위험 평가
중립적(Neutrality) 분석 에이전트 전체적인 시장 상황 분석 긍정과 부정 요소를 균형 있게 평가
의견 종합(Summary) 분석 에이전트 3명의 분석 내용을 종합하여 최종 리포트 작성 긍정, 부정, 중립 의견을 반영한 균형 잡힌 분석

1.3 CrewAI 실행 코드 (crew.py)

CrewAI 실행을 위한 crew.py 파일을 작성합니다.
이 파일에서 @agent, @task, @crew를 정의하며 실행은 main.py에서 수행됩니다.
또한, 에이전트의 실행 순서를 유지하기 위해 Process.sequential을 사용합니다.

from crewai import Agent, Crew, Process, Task, LLM
from crewai.project import CrewBase, agent, crew, task

@CrewBase
class StockAnalysisCrew():
    """Stock Analysis Crew"""

    def __init__(self):
        self.llm = LLM(
            model="ollama/deepseek-r1:8b",
            base_url="http://localhost:11434"
        )

    @agent
    def positive_analyst(self) -> Agent:
        return Agent(config=self.agents_config['positive_analyst'], llm=self.llm)

    @agent
    def negative_analyst(self) -> Agent:
        return Agent(config=self.agents_config['negative_analyst'], llm=self.llm)

    @agent
    def neutrality_analyst(self) -> Agent:
        return Agent(config=self.agents_config['neutrality_analyst'], llm=self.llm)

    @agent
    def summary_analyst(self) -> Agent:
        return Agent(config=self.agents_config['summary_analyst'], llm=self.llm)

    @task
    def positive_analysis(self) -> Task:
        return Task(config=self.tasks_config['positive_analysis'])

    @task
    def negative_analysis(self) -> Task:
        return Task(config=self.tasks_config['negative_analysis'])

    @task
    def neutrality_analysis(self) -> Task:
        return Task(config=self.tasks_config['neutrality_analysis'])

    @task
    def summary_analysis(self) -> Task:
        return Task(config=self.tasks_config['summary_analysis'], output_file="daily_korean_stock_report.md")

    @crew
    def crew(self) -> Crew:
        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,  # 순차 실행 방식 적용
            verbose=True,
        )

1.4 CrewAI 실행 (main.py)

이제 main.py에서 CrewAI를 실행합니다.

반응형
from crew import StockAnalysisCrew

def run():
    inputs = {
        'topic': 'Korean Stock Market Analysis'
    }
    
    StockAnalysisCrew().crew().kickoff(inputs=inputs)

if __name__ == "__main__":
    run()

📌 정리 및 다음 단계

이제 CrewAI 분석 에이전트 구성을 최적화하고 실행할 준비를 마쳤습니다.

✅ CrewAI 분석 방식 및 멀티 에이전트 구조 이해
✅ agents.yaml을 활용한 투자 전문가 에이전트 설정
✅ tasks.yaml을 활용한 CrewAI 작업 정의
✅ crew.py에서 @agent, @task, @crew 설정 (Process.sequential 적용)
✅ main.py에서 CrewAI 실행 테스트 완료


🔜 다음 글 예고: 2단계 - 주식 데이터 수집 및 CrewAI 활용

다음 글에서는 FinanceDataReader를 활용하여 CrewAI에서 사용할 한국 주식 데이터를 수집하는 방법을 다룹니다. 🚀

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함
반응형