Using the GitHub Copilot SDK for Java
개요
GitHub Copilot SDK for Java는 Java 엔터프라이즈 개발자가 IDE 없이도 GitHub Copilot의 기능을 Java 코드에서 직접 활용할 수 있도록 지원하는 프레임워크 비종속적인 클라이언트 라이브러리입니다.
주요 내용
* 프레임워크 비종속적 AI 연동: Langchain4j나 Spring AI와 달리 특정 AI 벤더나 프레임워크에 종속되지 않고 OpenAI, Azure, Anthropic 등 다양한 모델 프로바이더와 호환됩니다. BYOK(Bring Your Own Key)를 지원하여 자체 API 키로 직접 모델 프로바이더에 연결할 수 있습니다.
* Java idiomatic API: CompletableFuture, 어노테이션, 람다, 가상 스레드 등 Java 개발자에게 익숙한 방식으로 SDK를 사용할 수 있어 학습 곡선이 낮습니다.
* 다양한 도구 정의 방식:
* @CopilotTool 어노테이션을 사용하여 Java 메서드를 Copilot 에이전트가 호출할 수 있는 도구로 쉽게 등록할 수 있습니다.
* ToolDefinition.from(...)을 사용하여 인라인 람다 형태로 도구를 정의할 수 있습니다.
* JSON 스키마를 통해 도구를 정의할 수도 있습니다.
* 컴파일 시 도구 메타데이터 생성: @CopilotTool 어노테이션을 사용하려면 Maven 빌드 시 copilot.experimental.allowed=true 플래그를 활성화하고 SDK를 어노테이션 프로세서로 등록해야 합니다.
* 시스템 메시지 커스터마이징: SystemMessageMode.CUSTOMIZE를 통해 시스템 메시지의 특정 섹션을 재정의하거나 SystemMessageMode.APPEND로 내용을 추가하여 에이전트의 행동을 세밀하게 제어할 수 있습니다.
* 간결한 에이전트 루프: session.sendAndWait(...) 메서드 한 줄로 프롬프트 전송, 도구 호출, 응답 수신 등 에이전트의 전체 루프를 실행할 수 있습니다.
* 실시간 이벤트 처리: session.on(...)을 통해 세션 이벤트를 구독하여 UI 업데이트, 로깅 등 실시간 반응형 애플리케이션을 구축할 수 있습니다. AssistantMessageEvent, ToolExecutionStartEvent 등 다양한 이벤트 타입을 처리할 수 있습니다.
* 서버사이드 및 헤드리스 모드: IDE 통합 없이 서버 환경에서 작동하며, CopilotClientMode.EMPTY 설정을 통해 Copilot CLI와 직접 통신할 수 있습니다.
* Jakarta EE 통합: Jakarta EE의 ManagedThreadFactory를 통한 가상 스레드 관리, CDI, Jakarta Data, WebSocket 등과 자연스럽게 통합되어 컨텍스트 전파 및 리소스 관리가 용이합니다.
* 세분화된 도구 접근 제어: SessionConfig의 ToolSet을 사용하여 에이전트 세션별로 접근 가능한 도구를 명시적으로 지정하여 보안을 강화할 수 있습니다.
시사점
GitHub Copilot SDK for Java는 엔터프라이즈 Java 개발자에게 AI 기능을 네이티브 Java 경험으로 통합할 수 있는 강력하고 유연한 방법을 제공하며, 이를 통해 복잡한 AI 기반 애플리케이션 개발을 간소화하고 생산성을 향상시킬 수 있습니다.
댓글
GitHub Discussions