23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요.
SK AX 의 송영목 매니저입니다.
CrewAI 는 LangChain 이나 기타 agent 프레임워크에 의존하지 않고, 완전히 독립적으로 개발 가능한 Python 프레임워크입니다.
에이전트(Agents) : 특정 역할(Role)과 목표(Goal), 배경 설정(Backstory)을 가진 가상의 팀원. 예를 들어, '시장 조사 전문가','항공권 예약 담당자' 등의 역할을 부여받습니다.
작업(Task) : 에이전트가 수행해야 할 구체적인 과제입니다. 실행에 필요한 도구와 기대 결과물(Expected Output)을 정의합니다.
도구(Tools) : 에이전트가 검색, 데이터 분석, 파일 작성 등을 위해 사용하는 외부 API나 기능입니다.
프로세스(Process) : 작업의 진행 방식(순차적, 계층적 등)을 결정합니다. 에이전트 간의 협업 방식과 작업 위임 흐름을 관리합니다.
구성 요소 | 설명 | 주요 특징 |
|---|---|---|
Crew | 최상위 조직 | - AI agent 팀 관리 / workflow 감독 / 협업 보장 / 결과 전달 |
AI agents | 전문 팀원 | - 특정 역할 보유(Researcher, Writer 등) / 지정된 도구 사용 / 작업 위임 가능 / 자율적 의사결정 기능 |
Process | workflow 관리 시스템 | - 협업 패턴 정의 / 작업 할당 제어 / 상호작용 관리 / 효율적 실행 보장 |
Task | 개별 할당 | - 명확한 목표 보유 / 특정 도구 사용 / 더 큰 프로세스에 기여 / 실행 가능한 결과 도출 |
Python : 3.x (VS Code)
CrewAI 라이브러리 및 필요 패키지 설치: pip install crewai python-dotenv
OpenAI API 키 발급 및 환경 설정:
프로젝트 디렉토리에 .env 파일을 생성하고 OPENAI_API_KEY 저장
OPENAI_API_KEY=your-key
role: 에이전트의 역할이나 직책을 정의
goal: 에이전트가 궁극적으로 달성해야 할 목표임.
"사용자에게 AI 전문 어시스턴트에 맞는 인사를 제공"로 설정하여, 이 에이전트의 목표는 사용자에게 환영 메시지를 제공하는 것으로 명시하였습니다.
backstory: 에이전트의 배경 이야기나 성격을 서술함.
에이전트의 말투나 행동 방식에 영향을 주는 설정이며, 입니다. "당신은 친절한 AI 전문 비서로, 언제나 정중하고 도움이 되는 AI 정보를 전달합니다."라고 정의하여, 이 에이전트가 항상 친절하게 정보를 전달하도록 하였습니다.
# 1. Agent 생성: role, goal, backstory 설정
agent = Agent(
role="AI 전문 어시스턴트", # 에이전트의 역할
goal="사용자에게 AI 전문 어시스턴트에 맞는 인사를 제공", # 에이전트가 달성할 목표
backstory="당신은 친절한 AI 전문 비서로, 언제나 정중하고 도움이 되는 AI 정보를 전달합니다." # 에이전트의 성격/배경
)description: 에이전트가 수행할 작업 지시를 서술합니다.
"사용자에게 AI 전문 어시스턴트로써 인사 한 마디를 해 주세요."라고 명령하여, AI 모델에게 전달되는 프롬프트의 핵심 내용으로 전달됩니다.
expected_output:: 기대하는 출력 결과 형태를 설명.
"한 줄의 환영 메시지"라고 작성하여, 결과가 어떻게 나오길 원하는지를 설명합니다.
이 필드는 주로 개발자나 사용자가 결과물을 예상하는 데 도움을 줍니다.
agent:: 이 작업을 어떤 에이전트가 수행할지를 지정
# 2. Task 생성: description, expected_output, agent 지정
task = Task(
description="사용자에게 AI 전문 어시스턴트로써 인사 한 마디를 해 주세요.", # 에이전트가 수행할 작업 내용
expected_output="한 줄의 환영 메시지", # 기대하는 출력 결과물
agent=agent # 이 태스크를 수행할 에이전트
)Crew는 하나 이상의 에이전트와 하나 이상의 태스크를 묶어 하나의 팀이나 프로젝트로 구성한 것입니다.
Crew 객체에는 작업을 수행할 에이전트 목록, 해결해야 할 태스크 목록, 그리고 태스크들을 어떻게 진행할지 결정하는 프로세스(Process) 전략이 포함됩니다:
agents=[agent]: 이 Crew에 소속된 에이전트 리스트를 지정
tasks=[task]: Crew가 수행할 태스크들의 리스트를 지정
process=Process.sequential: 프로세스는 Crew가 태스크를 실행하는 방식이나 전략을 정의.Process.sequential로 지정하면 태스크들을 순차적으로 실행함. 즉, tasks 리스트에 주어진 순서대로 하나씩 차례로 수행합니다.
verbose=True: 실행 과정을 자세히 출력할지 여부를 설정.
True로 설정하면 에이전트가 작업을 수행하면서 주고받는 메시지나 내부 로그를 콘솔에 상세히 출력합니다.
# 3. Crew 생성: 에이전트와 태스크를 크루로 구성 (순차 프로세스 설정)
crew = Crew(
agents=[agent], # 크루에 속한 에이전트 목록 (여기서는 1개, 단일 에이전트)
tasks=[task], # 크루가 수행할 태스크 목록 (여기서는 1개)
process=Process.sequential, # 순차적 진행 방식으로 태스크 실행
verbose=True # 실행 중 상세한 로그 출력 여부
)# 4. Crew 실행: kickoff() 메서드로 태스크 수행 시작
result = crew.kickoff()
# 5. 실행 결과 출력
print("최종 결과:", result)두 개의 Agent를 정의하고, 각 에이전트에게 서로 다른 역할과 목표를 정의하고, 협업을 위해 순차적으로 사용함.
# 2. 에이전트 정의 (연구원, 작가)
researcher = Agent(
role="AI Researcher",
goal="피지컬 AI 에이전트의 주요 장점을 5가지 조사하여 설명합니다.",
backstory="AI를 연구해온 전문가입니다."
)
writer = Agent(
role="Technical Writer",
goal="연구 결과를 바탕으로 간략한 결론을 작성합니다.",
backstory="복잡한 정보를 쉽게 요약하는 기술 요약 전문가입니다."
)두 에이전트에게 각각 할 일을 부여하는 Task를 정의하고, 첫 번째 태스크는 AI Researcher 에이전트가 수행할 작업이고, 두 번째 태스크는 Technical Writer 에이전트가 수행할 작업입니다.
특히 두 번째 태스크에는 첫 번째 태스크의 결과를 참고하도록 컨텍스트를 전달합니다.
# 3. 태스크 정의 (조사 태스크, 작성 태스크)
research_task = Task(
description="피지컬 AI 에이전트 시스템의 주요 장점 5가지를 조사하고 각 장점을 간략히 설명하세요.",
expected_output="5가지 장점에 대한 간단한 설명 (bullet point 목록)",
agent=researcher
)
write_task = Task(
description="위 조사 결과를 참고하여, 피지컬 AI 에이전트 시스템의 장점에 대한 짧은 결론을 작성하세요.",
expected_output="3~4문장으로 구성하고 결론으로 마무리",
agent=writer,
context=[research_task] # 이전 태스크의 결과를 활용
)두 에이전트와 두 태스크를 종합하여 하나의 Crew로 구성.
# 4. 크루 생성 (순차적 프로세스 설정)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential,
verbose=True
)# 5. 크루 실행 및 결과 출력
crew_output = crew.kickoff()
# 6. 각 태스크의 결과를 순차적으로 출력
for idx, task_output in enumerate(crew_output.tasks_output, start=1):
print(f"\n[Task {idx} Output]\n{task_output}\n")# CrewAI 기본 구조 실습: 단일 에이전트로 환영 인사 생성
# Agent, Task, Crew의 기본 동작 확인
from crewai import Agent, Task, Crew, Process
from dotenv import load_dotenv
import os
# 0. 환경 변수 로드 (.env에서 OPENAI_API_KEY 불러오기)
load_dotenv() # .env 파일에 정의된 환경변수를 로드합니다.
# OPENAI_API_KEY가 환경변수로 설정되었다면, openai 패키지가 이를 자동으로 사용합니다.
# 1. Agent 생성: role, goal, backstory 설정
agent = Agent(
role="AI 전문 어시스턴트", # 에이전트의 역할
goal="사용자에게 AI 전문 어시스턴트에 맞는 인사를 제공", # 에이전트가 달성할 목표
backstory="당신은 친절한 AI 전문 비서로, 언제나 정중하고 도움이 되는 AI 정보를 전달합니다." # 에이전트의 성격/배경
)
# 2. Task 생성: description, expected_output, agent 지정
task = Task(
description="사용자에게 AI 전문 어시스턴트로써 인사 한 마디를 해 주세요.", # 에이전트가 수행할 작업 내용
expected_output="한 줄의 환영 메시지", # 기대하는 출력 결과물
agent=agent # 이 태스크를 수행할 에이전트
)
# 3. Crew 생성: 에이전트와 태스크를 크루로 구성 (순차 프로세스 설정)
crew = Crew(
agents=[agent], # 크루에 속한 에이전트 목록 (여기서는 1개, 단일 에이전트)
tasks=[task], # 크루가 수행할 태스크 목록 (여기서는 1개)
process=Process.sequential, # 순차적 진행 방식으로 태스크 실행
verbose=True # 실행 중 상세한 로그 출력 여부
)
# 4. Crew 실행: kickoff() 메서드로 태스크 수행 시작
result = crew.kickoff()
# 5. 실행 결과 출력
print("최종 결과:", result)# CrewAI 멀티 에이전트 협업 실습: 연구원-작가 협업으로 멀티에이전트 장점 분석
# 태스크 간 컨텍스트 연계 및 순차 실행 확인
import os
from dotenv import load_dotenv
from crewai import Agent, Task, Crew, Process
# 1. .env 파일에서 OpenAI API 키 불러오기
load_dotenv()
openai_api_key = os.getenv('OPENAI_API_KEY')
if openai_api_key is None:
raise EnvironmentError("OPENAI_API_KEY is not set in .env file. Please add your OpenAI API key to .env.")
# 2. 에이전트 정의 (연구원, 작가)
researcher = Agent(
role="AI Researcher",
goal="피지컬 AI 에이전트의 주요 장점을 5가지 조사하여 설명합니다.",
backstory="AI를 연구해온 전문가입니다."
)
writer = Agent(
role="Technical Writer",
goal="연구 결과를 바탕으로 간략한 결론을 작성합니다.",
backstory="복잡한 정보를 쉽게 요약하는 기술 요약 전문가입니다."
)
# 3. 태스크 정의 (조사 태스크, 작성 태스크)
research_task = Task(
description="피지컬 AI 에이전트 시스템의 주요 장점 5가지를 조사하고 각 장점을 간략히 설명하세요.",
expected_output="5가지 장점에 대한 간단한 설명 (bullet point 목록)",
agent=researcher
)
write_task = Task(
description="위 조사 결과를 참고하여, 피지컬 AI 에이전트 시스템의 장점에 대한 짧은 결론을 작성하세요.",
expected_output="3~4문장으로 구성하고 결론으로 마무리",
agent=writer,
context=[research_task] # 이전 태스크의 결과를 활용
)
# 4. 크루 생성 (순차적 프로세스 설정)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential,
verbose=True
)
# 5. 크루 실행 및 결과 출력
crew_output = crew.kickoff()
# 6. 각 태스크의 결과를 순차적으로 출력
for idx, task_output in enumerate(crew_output.tasks_output, start=1):
print(f"\n[Task {idx} Output]\n{task_output}\n")
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.