Crew 내에서 작동하는 자체 에이전트를 가져오는 방법을 알아보세요.
def configure_tools
def configure_structured_output
BaseAgentAdapter
를 상속하여 커스텀 adapter를 생성해야 합니다. 이 adapter는 호환성 계층 역할을 하며 CrewAI 인터페이스와 외부 agent의 특정 요구사항 사이를 변환합니다.
커스텀 adapter를 구현하는 방법은 다음과 같습니다:
BaseAgentAdapter
상속하기:
__init__
구현하기:
생성자는 부모 클래스 생성자 super().__init__(**kwargs)
를 호출하고, 외부 agent에 특화된 초기화를 수행해야 합니다. CrewAI의 Agent
초기화 시 사용할 수 있는 선택적 agent_config
딕셔너리를 이용하여 adapter와 하위 agent를 구성할 수 있습니다.
configure_tools
구현하기:
이 추상 메서드는 매우 중요합니다. CrewAI BaseTool
인스턴스 리스트를 받습니다. 구현 시, 이 도구들을 외부 agent 프레임워크에서 기대하는 형식으로 변환 또는 적응시켜야 합니다. 래핑하거나, 특정 속성 추출, 혹은 외부 agent 인스턴스에 등록하는 작업이 필요할 수 있습니다.
configure_structured_output
구현하기:
CrewAI Agent
가 구조화된 출력 요구사항(예: output_json
또는 output_pydantic
)으로 구성될 때 이 메서드가 호출됩니다. adapter에서 외부 agent가 이러한 요구사항을 준수하도록 설정해야 합니다. 이는 외부 agent에 특정 파라미터를 설정하거나, 해당 모델이 요청된 형식을 지원하는지 확인하는 것이 포함될 수 있습니다. 외부 agent가 CrewAI의 기대에 맞는 방식으로 구조화된 출력을 지원하지 않을 경우, 변환 처리를 하거나 적절한 오류를 발생시켜야 할 수 있습니다.
MyCustomAgentAdapter
는 커스텀 agent 구현이 CrewAI crew 내에서 올바로 동작할 수 있도록 하여, task 및 도구들과 매끄럽게 상호작용할 수 있게 됩니다. 예시 주석 및 print문은 실제로 통합하려는 외부 agent 프레임워크에 맞춘 로직으로 교체해야 한다는 점을 기억하세요.
BaseToolAdapter
클래스는 CrewAI의 기본 BaseTool
객체를 외부 에이전트 프레임워크가 이해하고 활용할 수 있는 형식으로 변환하는 역할을 합니다. 각각의 에이전트 프레임워크(LangGraph, OpenAI Assistants 등)는 도구를 정의하고 처리하는 고유한 방식을 가지고 있으며, BaseToolAdapter
는 이들 간의 변환자 역할을 합니다.
사용자 정의 툴 어댑터를 구현하는 방법은 다음과 같습니다:
BaseToolAdapter
를 상속하세요:
configure_tools
구현:
이 메소드는 반드시 구현해야 하는 핵심 추상 메소드입니다. 에이전트에 제공된 CrewAI BaseTool
인스턴스의 리스트를 인자로 받으며, 각 리스트를 순회하면서 각 BaseTool
을 외부 프레임워크가 기대하는 형식으로 변환하고, 변환된 도구들을 self.converted_tools
리스트(기본 클래스 생성자에서 초기화됨)에 담아야 합니다.
MyCustomAgentAdapter
의 configure_tools
메소드 내에서 MyCustomToolAdapter
를 인스턴스화하여 도구를 처리하고, 외부 에이전트를 구성하기 전에 도구들을 변환합니다.
BaseToolAdapter
를 생성하면 도구 변환 로직을 에이전트 어댑테이션과 분리할 수 있어, 통합 작업을 더 깔끔하고 모듈화된 구조로 만들 수 있습니다. 반드시 예시 부분을 실제로 요구되는 외부 에이전트 프레임워크의 변환 로직으로 대체해야 함을 명심하세요.
BaseConverterAdapter
는 CrewAI의 Task
에서 에이전트가 JSON이나 Pydantic 모델과 같이 특정 구조화된 포맷으로 최종 출력을 반환해야 할 때 중요한 역할을 합니다. 이 어댑터는 CrewAI의 구조화된 출력 요구사항과 외부 에이전트의 기능 사이를 이어주는 다리 역할을 합니다.
주요 책임은 다음과 같습니다:
Task
의 요구사항(output_json
또는 output_pydantic
)에 따라 연결된 BaseAgentAdapter
(그리고 간접적으로 외부 에이전트)에게 어떤 포맷이 요구되는지 지시합니다.BaseConverterAdapter
상속:
__init__
구현:
생성자는 함께 사용할 agent_adapter
인스턴스를 받아야 합니다.
configure_structured_output
구현:
이 메서드는 CrewAI Task
객체를 받습니다. 작업의 output_json
및 output_pydantic
속성을 확인하여 요구되는 출력 구조를 결정해야 합니다. 해당 정보(예: _output_type
및 _output_schema
)를 저장하고, 필요하다면 외부 에이전트가 구조화된 출력에 대해 별도의 설정이 필요한 경우 self.agent_adapter
에 구성 메서드를 호출할 수 있습니다(일부는 agent adapter의 configure_structured_output
에서 이미 부분적으로 처리되었을 수 있습니다).
enhance_system_prompt
구현:
이 메서드는 에이전트의 기본 시스템 프롬프트 문자열을 받아, 현재 구성된 _output_type
및 _output_schema
에 맞춘 지침을 추가해야 합니다. 목적은 에이전트를 구동하는 LLM이 올바른 포맷으로 출력을 생성하도록 안내하는 것입니다.
post_process_result
구현:
이 메서드는 에이전트로부터 받은 원시 문자열 출력을 받습니다. 구조화된 출력(json
또는 pydantic
)이 요청된 경우, 문자열을 예상되는 포맷으로 파싱을 시도해야 합니다. 파싱 오류를 처리(예: 로그 남기기, 간단한 수정 시도, 예외 발생 등)해야 하며, 이 메서드는 항상 문자열을 반환해야 합니다. 중간 형식이 딕셔너리나 Pydantic 객체라도 이를 다시 JSON 문자열로 변환하여 반환해야 합니다.
MyCustomConverterAdapter
는 CrewAI 작업의 구조화된 출력 요청이 통합된 외부 에이전트에서 올바르게 처리될 수 있게 하여, 사용자가 CrewAI 프레임워크 내에서 맞춤형 에이전트를 더욱 신뢰성 있고 유용하게 사용할 수 있도록 합니다.