xemantic/xemantic-ai-tool-schema
요약
xemantic-ai-tool-schema는 Kotlin 멀티플랫폼 라이브러리로, `@Serializable`로 표시된 모든 Kotlin 클래스에서 JSON Schema를 자동으로 생성합니다. 이 기능은 LLM의 도구 사용(function calling) 입력으로부터 복잡한 데이터 구조를 오류 없이 빠르고 정확하게 인스턴스화할 수 있게 합니다. 이 라이브러리는 Anthropic SDK나 AI 에이전트와 같은 프로젝트에 필수적이며, 개발자가 JSON 스키마 정의에 필요한 수동 단계를 생략하고 안정적인 AI 에이전트 개발을 할 수 있도록 돕습니다.
핵심 포인트
- Kotlin `@Serializable` 클래스 기반의 자동 JSON Schema 생성 기능 제공
- LLM의 도구 사용(function calling) 입력으로부터 Kotlin 객체를 직접 역직렬화 가능하게 함
- AI 에이전트 및 Anthropic SDK 등 최신 AI 개발 프로젝트에 필수적인 인프라를 제공함
- Pydantic과 유사하지만, 표준 Kotlin 직렬화 메커니즘을 활용하여 오해의 소지를 줄임
AI/LLM 도구 사용 (function calling) JSON Schema 생성기 - Kotlin @Serializable 클래스를 위한 JSON Schema를 생성하는 Kotlin 멀티플랫폼 (multiplatform) 라이브러리입니다.
이 라이브러리는 xemantic에서 제작한 에이전트형 AI (agentic AI) 프로젝트들의 필요성을 충족하기 위해 만들어졌습니다. 특히 다음과 같은 프로젝트들이 있습니다:
- anthropic-sdk-kotlin - Anthropic SDK의 비공식 Kotlin 멀티플랫폼 (multiplatform) 변형 버전.
- claudine - 이 SDK를 기반으로 구축된 AI 에이전트 (AI Agent).
이 프로젝트들은 많은 대규모 언어 모델 (Large Language Models, LLM)이 제공하는 도구 사용 (function calling) 기능에 크게 의존합니다. xemantic-ai-tool-schema 덕분에, 추가적인 제약 조건이 포함될 수 있는 Kotlin 클래스를 LLM이 제공하는 JSON 도구 사용 입력으로부터 자동으로 인스턴스화할 수 있습니다. 이러한 방식을 통해 모델을 위한 JSON 스키마 (JSON schema)를 정의하는 모든 수동 단계를 피할 수 있어, 과정 중의 오류 가능성을 줄이고 AI 에이전트에게 전달되는 복잡한 데이터 구조도 빠르게 개발할 수 있습니다.
요약하자면, xemantic-ai-tool-schema 라이브러리는 kotlinx.serialization에 따라 @Serializable로 표시된 모든 Kotlin 클래스로부터 JSON 스키마 (JSON Schema)를 생성할 수 있습니다.
팁 (Tip)
Python의 Pydantic 라이브러리의 유사한 기능에 익숙하실 수도 있지만, 표준 Kotlin 직렬화 (serialization)가 이미 모델 메타데이터 제공 기능을 수행하고 있으므로 이 비유는 오해를 불러일으킬 수 있습니다.
build.gradle.kts에 다음을 추가하세요:
plugins {
kotlin("multiplatform") version "2.2.20" // (또는 jvm 전용 프로젝트의 경우 jvm)
kotlin("plugin.serialization") version "2.2.20"
...
}
그 다음 코드에서 다음과 같이 엔티티 (entities)를 정의할 수 있습니다:
@Serializable
@SerialName("address")
@Title("The full address")
...
그리고 jsonSchemaOf() 함수가 호출될 때:
val schema = jsonSchemaOf<Address>()
다음과 같이 직렬화되는 JsonSchema 인스턴스를 생성합니다:
{
"type": "object",
"title": "The full address",
...
그리고 이것은 OpenAI API 및 Anthropic API와 같은 대규모 언语言 모델 (Large Language Model, LLM) API가 수용하는 입력입니다.
도구 사용 (tool use)을 요청할 때, 이러한 LLM들은 이 스키마 (schema)를 준수하는 JSON 페이로드 (payload)를 전송하며, 따라서 원래의 @Serializable Kotlin 클래스로 즉시 역직렬화 (deserializable)될 수 있습니다.
자세한 내용과 사용 사례는 JsonSchemaGeneratorTest에서 확인할 수 있습니다.
참고
JsonSchema의 어떤 인스턴스에 대해서든 toString() 함수를 호출하면, 유효한 JSON 스키마의 보기 좋게 출력된 (pretty printed) String 표현이 생성되며, 이는 결과적으로 Kotlin 클래스를 직렬화된 JSON으로 설명합니다. 이 기능은 테스트 및 디버깅에 유용합니다.
JVM 전용 프로젝트의 경우, java.math.BigDecimal 직렬화를 지정할 수 있습니다. 이는 소수 (decimal) 숫자를 문자열로 직렬화하고, BigDecimal 속성의 생성된 JSON 스키마에 description 및 pattern 속성을 추가합니다.
자세한 내용은 JavaBigDecimalToSchemaTest를 참조하십시오.
이 프로젝트의 테스트에는 Money라고 정의된 인터페이스가 있습니다. 이는 기본 소수 숫자 및 산술 제공자 (arithmetics provider)와 독립적으로 통화 금액을 정의하고 직렬화하는 방법을 설명합니다.
라이브러리로 패키징된 완성된 솔루션은 xemantic-ai-money 프로젝트를 참조하십시오.
이 저장소를 클론(Clone)한 후 프로젝트 디렉토리에서 다음을 실행하십시오:
./gradlew build
경고
이 라이브러리는 JSON 스키마의 기본적인 직렬화 가능한 표현을 제공하지만, 범용 JSON 스키마를 완전히 모델링하기 위한 용도는 아닙니다. 특히, JSON으로부터 기존 스키마를 역직렬화 (deserializing)하는 용도로 사용해서는 안 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기