피드로 돌아가기
Tool Use, Unified
Hugging Face BlogHugging Face Blog
Backend

Hugging Face가 Chat Templates를 Tool Use로 확장하여 Mistral, Cohere, NousResearch, Llama 등 여러 모델 패밀리에서 동일한 코드로 도구 호출 가능

Tool Use, Unified

2024년 8월 12일10intermediate

Context

여러 LLM 제공자들이 Tool Use를 구현했지만 각 모델마다 도구 정의 방식(JSON schema vs Python function headers)이 다르고 제어 토큰 형식이 상이했다. 이로 인해 개발자들은 모델마다 별도의 구현 코드를 작성해야 했으며 문서도 부실하고 불일치하는 문제가 있었다.

Technical Solution

  • Chat Templates 시스템을 Tool Use 지원으로 확장: Jinja 템플릿이 각 모델의 도구 정의 형식과 제어 토큰을 자동으로 처리하도록 구현
  • Python 함수를 JSON schema로 자동 변환: tokenizer.apply_chat_template(chat, tools=tools) 호출 시 Python 함수 객체를 JSON schema로 변환하여 언어 독립적 API 제공
  • 모델 간 호환성 추상화: 동일한 코드로 Hermes-2-Pro-8B, Mistral-Large, Command-R-Plus, Llama-3.1-405B 등 다양한 모델에서 도구 호출 가능
  • Transformers 라이브러리에 Helper 기능 추가: Tool calling 과정을 단순화하는 유틸리티 함수와 완전한 문서 및 예제 제공
  • Tool call 응답 파싱: 모델이 출력한 도구 호출을 json.loads() 또는 re.search()로 파싱하여 채팅 히스토리에 통합

Key Takeaway

Chat Templates라는 기존 추상화 계층을 Tool Use 영역으로 확장함으로써 모델별 구현 차이를 격리할 수 있었다. 이는 다른 기술 영역에서도 새로운 기능 추가 시 이전 성공 패턴을 재활용하여 개발자 경험을 일관되게 유지하는 설계 원칙을 보여준다.


LLM 애플리케이션을 개발하는 엔지니어는 특정 모델의 Tool Use 형식을 따로 학습하지 않고, Hugging Face Transformers의 통일된 API를 통해 Python 함수를 직접 전달하면 된다. 이를 통해 모델 변경 시 도구 정의 코드를 수정할 필요 없이 템플릿만 변경되도록 하여 코드 유지보수 비용을 절감할 수 있다.

원문 읽기