Hugging Face 통합 도구 사용 API
Hugging Face는 Mistral, Cohere, NousResearch, Llama 등 여러 인기 모델 패밀리에서 도구 호출을 이식 가능하도록 설계된 통합 도구 사용 API를 출시했습니다. 이번 업데이트는 채팅에서 도구를 구현할 때 모델별 변경 필요성을 줄이고, 도구를 전달하고 채팅 기록을 관리하는 표준화된 방법을 제공합니다.
채팅 템플릿을 통한 도구 정의 표준화
통합 API는 기존 채팅 템플릿 시스템을 확장하여 활용합니다. Jinja 템플릿을 사용함으로써 시스템은 특정 모델에 필요한 올바른 제어 토큰과 형식으로 채팅을 렌더링하면서, 개발자들이 모델에 구애받지 않는 형식으로 채팅을 작성할 수 있게 합니다.
템플릿에 도구 전달
API가 다양한 프로그래밍 언어에서 직관적으로 사용될 수 있도록, Hugging Face는 도구 정의에 대해 이중 접근 방식을 구현했습니다:
- JSON 스키마: 기본 채팅 템플릿은 도구가 JSON 스키마 형태로 정의되기를 기대합니다.
- Python 통합: Python 사용자를 위해 API는 Python 함수를 자동으로 JSON 스키마로 변환합니다. 이를 위해 개발자는 명확한 함수 이름, 정확한 타입 힌트, 완전한 docstring(인자 docstring 포함)을 제공해야 하며, 이는 모델이 읽는 스키마를 생성하는 데 사용됩니다.
도구 호출 워크플로 구현
도구 사용을 구현하려면 모델이 컨텍스트를 유지할 수 있도록 채팅 기록에 특정 순서의 메시지를 추가해야 합니다.
두 단계 메시지 프로세스
도구 호출은 단일 이벤트가 아니라 채팅 기록에 두 개의 구별된 메시지가 필요합니다:
- The Tool Call: 함수 이름과 사용할 인자를 지정하는
tool_calls필드를 포함한 어시스턴트 메시지. - The Tool Response: 역할이
tool인 메시지로, 함수 이름과 내용(호출된 함수의 출력)을 지정합니다.
두 메시지가 모두 없으면 모델은 도구 응답을 원래 요청 및 전달된 인자와 연관시킬 수 없습니다.
실용적인 실행
LLM은 코드를 실행하는 것이 아니라 텍스트를 생성하기 때문에, 개발자가 직접 실행을 처리해야 합니다. 프로세스는 다음과 같이 진행됩니다:
- Prompt Generation: 채팅과 도구를
tokenizer.apply_chat_template에 전달하여 프롬프트를 생성합니다. - Model Generation: 모델이 도구 호출 요청을 생성합니다(예:
<tool_call>와 같은 태그 사용). - Manual Execution: 개발자는 모델의 요청을 파싱하고, 해당 Python 함수를 실행한 뒤, 도구 호출과 도구 응답을 모두 채팅 기록에 추가합니다.
- Final Response: 업데이트된 채팅을 모델에 다시 전달하여 사용자에게 최종 자연어 응답을 생성합니다.
현재 제한 사항 및 향후 방향
입력 형식은 이제 통합되었지만, 출력 형식은 여전히 모델별입니다. 모델이 도구 호출을 내보낼 때 자체 네이티브 형식으로 출력하므로, 개발자는 json.loads() 또는 정규 표현식을 사용해 요청을 파싱한 뒤 통합 채팅 형식에 추가해야 합니다.
Hugging Face는 이러한 응답 형식을 더욱 통합하여 프로세스를 간소화하기 위한 솔루션을 현재 작업 중입니다.
SUMMARY: Hugging Face는 Mistral, Cohere, NousResearch, Llama 모델 전반에 걸쳐 도구 호출을 구현하기 위해 동일한 코드를 사용할 수 있도록 하는 통합 도구 사용 API를 도입했습니다.
TITLE: Hugging Face 통합 도구 사용 API
Sources
- OriginalTool Use, Unified