최근 OpenAI는 Generative AI로써 https://github.com/openai/openai-agents-python를 릴리즈하였는데요.
아래 코드처럼 간단하게 툴을 등록할 수 있게 된게 가장 큰 차이점이라고 생각합니다.
@function_tool
def get_weather(city: str) -> str:
return f"The weather in {city} is sunny."
agent = Agent(
name="Hello world",
instructions="You are a helpful agent.",
tools=[get_weather],
)
왜냐하면 기존에는 JsonSchema를 직접 작성하거나, JsonSchema를 만들어주는 라이브러리를 이용해서 직접 작성했습니다.
결국 수기라는 단점과 실제 코드와 인터페이스가 분리되지 못한다는 점을 못 벗어난건데요.
하지만 이번 출시는 꽤나 색다르다고 생각되는 지점이 바로 function_tool
이라는 데코레이터에요
내용을 보면 아래처럼 함수의 메타 정보를 받아와서 JsonSchema 로 만들어주는데요.
# 2. Inspect function signature and get type hints
sig = inspect.signature(func)
type_hints = get_type_hints(func)
params = list(sig.parameters.items())
takes_context = False
filtered_params = []
이러한 기능들은 기존 손으로 작성하던 JsonSchema로부터 노가다를 해방시켜준 것이 아닐까 싶어요.
하지만 여기에는 몇가지 단점이 존재해요
첫째, 사용자가 직접 단 타입 어노테이션만 읽기 때문에 타입을 지정해주지않으면 JsonSchema를 제대로 못만들어줘요.
둘째, 이는 리플렉션을 이용하였기에 제대로 지원되지않는 언어에서는 공통적으로 제공이 안될 수도 있어요. 즉 “언어 종속적”이라는거죠
그럼에도 불구하고 이정도의 편의성이면 훌륭하다고 생각되지만요.
하지만 이런 내용을 한국에서는 일찌감치 감지하고 미리 같은 방향으로 만들어놓은 라이브러리들이 있어요.
무려 1년가량 앞섰다고 볼 수 있는데요.
국내 개발자인 samchon이라는 분이 만드신 typia와 openapi라는 라이브러리에요.
이 둘을 통해서 타입스크립트에서는 컴파일타임에 정보를 읽어서 JsonSchema 및 validation 코드까지 작성해줄 수 있어요.
심지어 함수나 클래스가 아니라 인터페이스, 즉 타입만 넣어줘도 작동하죠.
이러한 typia와 openapi를 이용한 에이전트 예제는 여기서 확인해볼 수 있어요.
이 코드는 해당 레포지토리의 일부인데요.
export const functions = typia.llm.application<Tool, "chatgpt">().functions.map((func): ChatCompletionTool => {
return {
type: "function",
function: {
name: func.name,
description: func.description,
parameters: func.parameters as Record<string, any>,
},
};
});
위처럼 간단하게 Tool list를 JsonSchema로 얻어낼 수 있는거죠.
어떻게 변환되는지 궁금하신 분들은 typia playground에서 확인해볼 수도 있어요.
여기까지 AI Agent 개발 관련 업계 근황을 살펴보았는데요.
각 레포지토리에 스타를 눌러주신다면, 해당 레포지토리 주인들에게 힘이 되지않을까 생각해요.
오홍홍 조와용