궁금증의 시작
- 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의 장점
- 데이터를 딕셔너리로 표현하는 것이 아니라, 모델로 정의하고 모델로부터 스키마를 생성할 수 있도록 도와줌
- 다시 말해, 데이터를 파이썬 객체처럼 모델링할 수 있도록 도움
- 데이터를 검증하기도 훨씬 용이해짐
관련 링크