from crewai import Agent, Crew, Process, Task
from crewai_tools import SerperDevTool
from openinference.instrumentation.crewai import CrewAIInstrumentor
from phoenix.otel import register
# crew에 대한 모니터링 설정
tracer_provider = register(
endpoint="http://localhost:6006/v1/traces")
CrewAIInstrumentor().instrument(skip_dep_check=True, tracer_provider=tracer_provider)
search_tool = SerperDevTool()
# 역할과 목표가 설정된 에이전트 정의
researcher = Agent(
role="Senior Research Analyst",
goal="AI 및 데이터 과학의 최첨단 발전 사항 발견",
backstory="""당신은 최고 수준의 기술 싱크탱크에서 근무합니다.
새로운 트렌드를 식별하는 데 전문성이 있습니다.
복잡한 데이터를 분석하고 실행 가능한 인사이트로 제시하는 데 뛰어납니다.""",
verbose=True,
allow_delegation=False,
# 원하는 모델을 지정할 수 있는 optional llm 속성을 전달할 수 있습니다.
# llm=ChatOpenAI(model_name="gpt-3.5", temperature=0.7),
tools=[search_tool],
)
writer = Agent(
role="Tech Content Strategist",
goal="기술 발전에 대한 매력적인 콘텐츠 작성",
backstory="""당신은 통찰력 있고 흥미로운 기사로 유명한 콘텐츠 전략가입니다.
복잡한 개념을 매력적인 스토리로 전환합니다.""",
verbose=True,
allow_delegation=True,
)
# 에이전트를 위한 task 생성
task1 = Task(
description="""2024년 AI 분야의 최신 발전 상황에 대한 포괄적인 분석을 수행하세요.
주요 트렌드, 획기적 기술, 산업에 미칠 잠재적 영향을 식별하세요.""",
expected_output="주요 내용을 불릿 포인트로 정리한 전체 분석 보고서",
agent=researcher,
)
task2 = Task(
description="""제공된 인사이트를 활용하여
가장 중요한 AI 발전 내용을 강조하는 흥미로운 블로그 글을 작성하세요.
글은 정보성 있고, 기술에 밝은 독자를 대상으로 하면서 읽기 쉽게 써야 합니다.
멋지게 들리도록 쓰되, 복잡한 단어는 피하여 AI처럼 들리지 않게 하세요.""",
expected_output="최소 4개의 단락으로 구성된 전체 블로그 글",
agent=writer,
)
# 순차 프로세스 방식으로 crew 인스턴스화
crew = Crew(
agents=[researcher, writer], tasks=[task1, task2], verbose=1, process=Process.sequential
)
# crew에게 작업 시작 지시!
result = crew.kickoff()
print("######################")
print(result)