FAQ — 자주 묻는 질문
FAQ — 자주 묻는 질문 (FAQs)
AutoGen으로 에이전트를 다루다 보면 "에이전트 인스턴스에 직접 접근해서 함수를 호출하면 안 되나?" 같은 궁금증이 생겨요. 이 질문들은 단순해 보이지만, AutoGen의 분산 설계 원리를 이해하는 데 핵심이에요. 자주 나오는 질문들을 하나씩 살펴볼게요.
기본 에이전트 인스턴스는 어떻게 얻나요?
에이전트는 여러 머신에 분산되어 있을 수 있기 때문에, 기본 에이전트 인스턴스에 접근하는 것은 의도적으로 권장되지 않아요. 만약 에이전트가 확실히 같은 머신에서 실행 중이라면, AgentRuntime의 try_get_underlying_agent_instance를 호출해서 접근할 수 있어요. 에이전트를 사용할 수 없으면 예외가 발생해요.
에이전트의 함수를 호출하려면 어떻게 하나요?
인스턴스 자체에 접근할 수 없으므로, 에이전트 함수를 직접 호출할 수는 없어요. 대신 함수 호출과 인자를 나타내는 타입을 만들고, 그 메시지를 에이전트에게 전송해야 해요. 그러고 나서 에이전트 안에서 그 메시지 타입에 대한 핸들러를 만들어 로직을 구현해요. 이 방식은 호출자에게 응답을 돌려주는 것도 지원해요.
이렇게 하면 에이전트가 분산 환경에서도, 로컬 환경에서도 똑같이 동작할 수 있어요.
에이전트 등록에 팩토리를 써야 하는 이유가 무엇인가요?
AgentId는 type과 key로 구성돼요. type은 에이전트를 만든 팩토리에 해당하고, key는 이 인스턴스를 식별하는 런타임·데이터 의존 키예요.
key는 사용자 id, 세션 id일 수도 있고, 인스턴스를 구분할 필요가 없다면 "default"를 써도 돼요. 각 고유한 key는 제공된 팩토리에 기반해 새 에이전트 인스턴스를 만들어요. 이 덕분에 시스템이 같은 에이전트의 여러 인스턴스로 자동 확장하고, 애플리케이션에서 key를 어떻게 다루느냐에 따라 각 인스턴스의 생명주기를 독립적으로 관리할 수 있어요.
gRPC 메시지 크기를 늘리려면 어떻게 하나요?
max_send_message_length와 max_receive_message_length를 재정의하는 등 커스텀 gRPC 옵션이 필요하다면, extra_grpc_config 변수를 정의해 GrpcWorkerAgentRuntimeHost와 GrpcWorkerAgentRuntime 인스턴스 양쪽에 전달하면 돼요.
# Define custom gRPC options
extra_grpc_config = [
("grpc.max_send_message_length", new_max_size),
("grpc.max_receive_message_length", new_max_size),
]
# Create instances of GrpcWorkerAgentRuntimeHost and GrpcWorkerAgentRuntime with the custom gRPC options
host = GrpcWorkerAgentRuntimeHost(address=host_address, extra_grpc_config=extra_grpc_config)
worker1 = GrpcWorkerAgentRuntime(host_address=host_address, extra_grpc_config=extra_grpc_config)
참고: GrpcWorkerAgentRuntime이 클라이언트용 호스트 연결을 만들 때 HostConnection 클래스의 DEFAULT_GRPC_CONFIG를 기본값 집합으로 사용해요. extra_grpc_config로 같은 이름의 파라미터를 전달하면 기본값을 재정의할 수 있어요.
모델 캐퍼빌리티(model capabilities)란 무엇이며 어떻게 지정하나요?
모델 캐퍼빌리티는 표준 자연어 기능 외에 LLM이 가질 수 있는 추가 능력이에요. 현재 AutoGen에서 지정할 수 있는 추가 능력은 3가지예요.
- vision: 모델이 이미지 데이터를 처리·해석할 수 있는 능력
- function_calling: 함수 이름·목적·입력 파라미터 등 함수 설명을 받아들이고, 필요한 파라미터를 포함한 적절한 함수를 호출하도록 응답할 수 있는 능력
- json_output: 지정된 JSON 형식에 맞춰 응답을 출력할 수 있는 능력
모델 캐퍼빌리티를 모델에 전달하면 기본 정의를 재정의할 수 있어요. 이 캐퍼빌리티는 기본 모델이 실제로 할 수 있는지에는 영향을 주지 않지만, 그와 연관된 동작을 허용하거나 금지해요. 이는 특히 로컬 LLM 사용 시에 유용해요.
from autogen_ext.models.openai import OpenAIChatCompletionClient
client = OpenAIChatCompletionClient(
model="gpt-4o",
api_key="YourApiKey",
model_capabilities={
"vision": True,
"function_calling": False,
"json_output": False,
}
)