에이전트 실행 과정에서의 인간 입력

에이전트 실행 시나리오에서 인간의 입력은 매우 중요하다. 에이전트는 필요할 때 추가 정보나 명확한 설명을 요청할 수 있다. 이 기능은 복잡한 의사결정 과정이나, 작업을 효과적으로 완료하기 위해 더 많은 세부 정보가 필요한 경우에 특히 유용하다.

CrewAI에서 인간의 입력 활용하기

에이전트 실행에 인간의 입력을 통합하려면, 작업 정의에서 human_input 플래그를 설정한다. 이 기능을 활성화하면 에이전트는 최종 답변을 제공하기 전에 사용자에게 입력을 요청한다. 이 입력은 추가적인 컨텍스트를 제공하거나, 모호한 부분을 명확히 하거나, 에이전트의 출력을 검증하는 데 사용할 수 있다.

pip install crewai
import os
from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool

os.environ["SERPER_API_KEY"] = "Your Key"  # serper.dev API 키
os.environ["OPENAI_API_KEY"] = "Your Key"

# 도구 로드
search_tool = SerperDevTool()

# 역할, 목표, 도구, 추가 속성을 정의해 에이전트 생성
researcher = Agent(
    role='수석 연구 분석가',
    goal='AI와 데이터 과학 분야의 최신 동향 파악',
    backstory=(
        "당신은 선도적인 기술 싱크탱크에서 수석 연구 분석가로 근무한다. "
        "AI와 데이터 과학 분야에서 떠오르는 트렌드와 기술을 파악하는 데 전문성을 갖췄다. "
        "복잡한 데이터를 분석하고 실행 가능한 통찰력을 제시하는 능력이 뛰어나다."
    ),
    verbose=True,
    allow_delegation=False,
    tools=[search_tool]
)
writer = Agent(
    role='기술 콘텐츠 전략가',
    goal='기술 발전에 관한 매력적인 콘텐츠 제작',
    backstory=(
        "당신은 기술과 혁신에 관한 통찰력 있고 매력적인 글을 쓰는 유명한 기술 콘텐츠 전략가다. "
        "기술 산업에 대한 깊은 이해를 바탕으로 복잡한 개념을 매력적인 이야기로 전환한다."
    ),
    verbose=True,
    allow_delegation=True,
    tools=[search_tool],
    cache=False,  # 이 에이전트에 대해 캐시 비활성화
)

# 에이전트를 위한 태스크 생성
task1 = Task(
    description=(
        "2025년 AI 분야의 최신 발전에 대한 종합적인 분석을 수행한다. "
        "주요 트렌드, 획기적인 기술, 잠재적인 산업 영향을 파악한다. "
        "분석 결과를 상세한 보고서로 작성한다. "
        "최종 답변을 확정하기 전에 사람에게 초안을 확인받는다."
    ),
    expected_output='2025년 AI 최신 발전에 대한 종합 보고서, 모든 내용을 빠짐없이 포함',
    agent=researcher,
    human_input=True
)

task2 = Task(
    description=(
        "연구 분석가의 보고서를 바탕으로 가장 중요한 AI 발전을 강조하는 매력적인 블로그 글을 작성한다. "
        "글은 정보 제공적이면서도 접근 가능하도록 작성하며, 기술에 익숙한 독자를 대상으로 한다. "
        "이러한 혁신의 본질과 미래에 대한 함의를 담은 이야기를 만든다."
    ),
    expected_output='2025년 AI 최신 발전에 관한 3단락의 매력적인 블로그 글, 마크다운 형식으로 작성',
    agent=writer,
    human_input=True
)

# 순차적 프로세스로 크루 인스턴스 생성
crew = Crew(
    agents=[researcher, writer],
    tasks=[task1, task2],
    verbose=True,
    memory=True,
    planning=True  # 크루에 대해 계획 기능 활성화
)

# 크루가 작업을 시작하도록 함
result = crew.kickoff()

print("######################")
print(result)