구조화된 데이터를 가능하게 하는 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 and Engineer at LG CNS AI Lab

0개의 댓글

관련 채용 정보