구조화된 데이터를 가능하게 하는 Function Calling Model, JSON과 Pydantic의 장단점

jihyelee·2024년 5월 17일
0

궁금증의 시작

  • llamaindex에서 LLM을 정의해주기 위해서는 LLMMetadata 필요
  • LLM 정의에 필요한 메타데이터에는 다음과 같은 항목들이 있음
    • context_window
      • 하나의 응답에 인풋과 아웃풋으로 사용할 수 있는 전체 토큰 수
    • num_output
      • 응답을 생성할 때 모델이 아웃풋으로 사용할 수 있는 토큰 수
    • is_chat_model
      • 모델이 챗 인터페이스를 제공하는지 (텍스트가 아닌 일련의 메시지를 수용할 수 있는지)
    • is_function_calling_model
      • 모델이 함수를 호출하는 메시지를 지원하는지
    • model_name
      • 로그, 테스트 등에 사용되는 모델의 이름
    • system_role
      • 특정 LLM이 시스템 프롬프트에 기대하는 역할
      • OpenAI의 경우 'SYSTEM', Cohere의 경우 'CHATBOT'
    is_function_calling_model: bool = Field(
        default=False,
        # SEE: https://openai.com/blog/function-calling-and-other-api-updates
        description=(
            "Set True if the model supports function calling messages, similar to"
            " OpenAI's function calling API. For example, converting 'Email Anya to"
            " see if she wants to get coffee next Friday' to a function call like"
            " `send_email(to: string, body: string)`."
        ), # llamaindex의 github에서 발췌
  • function_calling_model이란 정확히 무슨 뜻일까?

Function Calling

  • Function Calling(=함수 호출)이란, 언어모델과 외부 도구/API를 효과적으로 연결하는 역할을 수행
    • 언어모델이 사용자의 쿼리에 응답하기 위해서는 프롬프트로 주어지는 컨텍스트, 파라미터에 저장된 지식 이외에도 외부의 정보가 필요할 수 있음
      • e.g. 현재 날씨 정보에 대해 사용자가 질문할 경우
    • 이러한 경우 외부 API를 호출하고 해당 정보를 모델의 응답에 반영함으로써 더욱 신뢰도 높은 답변을 제공할 수 있음
  • 함수 호출이 가능한 언어모델은 아래와 같은 기능을 갖도록 파인튜닝됨 (e.g. gpt-4-0613, gpt-3.5-turbo-0613)
    • 사용자의 인풋에 기반해 어떠한 함수가 호출되어야 하는지 감지
    • 함수에 사용될 인자를 포함한 구조화된 데이터를 응답으로 생성
      • e.g. 사용자 쿼리: "다음주 금요일에 커피 한잔 할 수 있는지 확인하는 이메일을 에밀리에게 보내줘"
      • e.g. 변환된 함수 호출: "send_email(to: string, body: string)"

Function Calling 지원 모델

  • OpenAI
  • Anthropic Claude
  • Cohere Command-R
  • Gemini
  • Mistral
  • Llama-3는 공식은 아니지만 Function Calling이 가능하게끔 튜닝된 모델이 huggingface에 공개되어 있음 (link)
  • ... (추가 예정)
  • 참고: llamaindex에서 구조화된 결과를 얻기 위한 FunctionCallingProgram 사용 예시 with OpenAI, Anthropic Claude, Mistral (link)

Vanilla JSON vs. Pydantic

  • 이처럼 언어모델의 함수 호출 기능은 구조화된 데이터를 제공한다는 점에서 장점을 가짐
    • 복잡한 프롬프트를 작성하지 않아도 되며, 데이터를 파싱하기 위해 정규식을 사용할 필요가 사라짐
    • 스키마를 정의하기만 하면 됨 (JSON, Pydantic)
  • Vanilla JSON의 한계
    • 다뤄야 할 데이터가 복잡해지면 적절한 JSON 스키마를 작성하기 어려움
    • 데이터 검증이 어려움 (untyped python dictionary)
  • Pydantic의 장점
    • 데이터를 딕셔너리로 표현하는 것이 아니라, 모델로 정의하고 모델로부터 스키마를 생성할 수 있도록 도와줌
    • 다시 말해, 데이터를 파이썬 객체처럼 모델링할 수 있도록 도움
    • 데이터를 검증하기도 훨씬 용이해짐

관련 링크

profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher at LG CNS AI Lab

0개의 댓글