empower-ai/empower-functions
요약
Empower Functions는 GPT-4 수준의 '도구 사용(tool using)' 역량을 제공하는 LLM 제품군으로, 기존 시스템에 드롭인 교체 형태로 쉽게 통합할 수 있습니다. 최신 v1.1 버전은 Llama3.1을 기반으로 강화된 데이터셋을 사용하여 미세 조정되었으며, Berkeley Function Calling 리더보드에서 최고 성능을 달성했습니다. 이 모델군은 대화형 에이전트 구축에 필수적인 기능(예: 다중 턴 문맥 검색, 'auto' 모드를 통한 도구 사용 결정, 매개변수 누락 시 명확한 설명 요청 등)을 지원하며, 여러 함수를 병렬 또는 순차적으로 실행하는 능력까지 갖추고 있습니다. 사용자는 `llama3-empower-functions-small` 모델을 통해 로컬에서 비용 효율적으로 실행할 수 있으며, 이를 OpenAI 호환 서버로 구동하여 기존 Python 환경과 쉽게 연동할 수 있습니다.
핵심 포인트
- Empower Functions는 GPT-4급의 '도구 사용(tool using)' 기능을 제공하는 LLM 제품군이다.
- v1.1 버전은 Llama3.1을 기반으로 미세 조정되었으며, Function Calling 성능이 최첨단 수준이다.
- 대화형 에이전트 구축에 필요한 다중 턴 문맥 처리, 도구 사용 결정('auto' 모드), 명확한 설명 요청 등의 고급 기능을 지원한다.
- 모델은 여러 함수를 병렬 또는 순차적으로 실행하는 능력을 갖추고 있다.
- 로컬 환경에서는 `llama3-empower-functions-small` 모델을 사용하여 OpenAI 호환 서버를 구축하고 Python SDK와 연동할 수 있다.
Empower Functions는 실제 "도구 사용 (tool using)" 유스케이스에 대해 GPT-4 수준의 역량을 제공하며, 즉시 교체 가능한 드롭인 교체 (drop-in replacement) 형태로 서비스될 수 있도록 완전한 호환성 지원을 제공하는 LLM (large language models) 제품군입니다.
Live Demo • Huggingface Repo • Website • Discord
새로운 Empower Functions v1.1
방금 Empower Functions 제품군의 새로운 v1.1을 출시했습니다. 업데이트된 v1.1 제품군은 강화된 큐레이션 데이터셋을 사용하여 Llama3.1을 기반으로 미세 조정 (fine-tuned)되었습니다. 이 모델은 Berkeley Function Calling 리더보드에서 최첨단 (state-of-the-art) 성능을 달성했습니다.
"도구 사용 (tool using)"은 함수 호출이 필요한 시점을 인식하고, 사용자 입력에 기반하여 필요한 인자 (arguments)를 포함하는 JSON을 생성함으로써 LLM이 외부 API와 상호작용하는 능력을 의미합니다. 이 능력은 자연어를 API 호출로 변환하는 대화형 에이전트 및 애플리케이션을 구축하는 데 필수적이며, 날씨 문의, 데이터 추출, 지식 베이스와의 상호작용과 같은 작업을 용이하게 합니다.
실제 유스케이스, 특히 대화형 에이전트와 관련된 경우에는 LLM에 대해 복잡한 요구사항을 제시하는 경우가 많습니다. 모델은 여러 차례의 대화 (multi-turn)로부터 문맥을 검색하고, 도구를 사용할지 아니면 표준 대화에 참여할지 ('auto' 모드) 선택하며, 매개변수 (parameters)가 누락된 경우 명확한 설명을 요청 (clarification)할 수 있어야 합니다. 또한, 응답을 도구 출력과 함께 스트리밍 (streaming) 방식으로 통합해야 합니다. 추가적으로, 작업을 완료하기 위해 여러 도구가 필요한 경우, 모델은 여러 함수를 병렬 (parallel calling)로 또는 의존 관계가 있는 순차적 (sequential calling) 방식으로 효율적으로 실행해야 합니다.
예를 들어, 아래는 의료 센터 코디네이터 봇에서 모델이 어떻게 사용되는지를 보여주는 스크린샷입니다. 라이브 데모에서 이를 더 자세히 탐색할 수 있습니다.
| 모델 | 사양 | 링크 | 비고 |
|---|---|---|---|
| llama3-empower-functions-small | 128k 컨텍스트 (context), Llama3.1 8B 기반 | model, gguf | 가장 비용 효율적이며, 로컬에서 실행 가능 |
| llama3-empower-functions-large | 128k 컨텍스트 (context), Llama3.1 70B 기반 | model | 최고의 정확도 |
우리는 다음 설정에서 모델 제품군을 테스트했습니다:
- empower-functions-small: 1xA100 40G에서 fp16, 32G RAM을 탑재한 Macbook M2 Pro에서 GGUF 및 4bit GGUF로 테스트하였으며, 최소 4bit GGUF 버전은 7.56G RAM을 필요로 합니다.
- empower-functions-large: 4xA100 80G에서 fp16으로 테스트하였습니다.
로컬 실행은
llama3-empower-functions-small
모델만 지원됩니다. 다른 모델을 사용하려면 당사의 API를 이용해 주세요.
로컬 실행은
empower_functions
pip 패키지를 통해 지원됩니다. 먼저 pip install empower-functions를 실행하여 설치했는지 확인하십시오.
만약 RuntimeError: Failed to load shared library, (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))와 같은 오류가 발생하면, 다음 명령어를 실행하여 llama-cpp-python 패키지를 재설치하십시오:
CMAKE_ARGS="-DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_APPLE_SILICON_PROCESSOR=arm64 -DLLAMA_METAL=on" pip install --upgrade --verbose --force-reinstall --no-cache-dir llama-cpp-python
로컬 OpenAI 호환 서버 실행하기
우리는 모델을 로컬에서 실행하기 위해 llama-cpp-python 프로젝트를 활용합니다. 로컬 OpenAI 호환 서버를 시작하려면 아래 단계를 따라야 합니다:
- 당사의 huggingface 저장소에서 GGUF 모델을 다운로드합니다.
- 다음 명령어를 실행합니다:
python -m empower_functions.server --model <GGUF 모델 경로> --chat_format empower-functions
서버가 준비되면 다음과 같은 출력이 표시됩니다:
INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit)
그 후 OpenAI SDK를 사용하여 서버에 연결할 수 있습니다. 아래의 기본 예제를 참조하십시오:
import openai
import json
client = openai.OpenAI(
...
Python 환경에서 실행하기
llama-cpp-python을 통해 Python 환경에서 모델을 직접 호출할 수 있습니다.
empower_functions에서 제공하는 chat handler가 포함된 패키지입니다. 아래의 기본 예제를 확인하세요. 더 자세한 예제는 Python 스크립트를 참조하시기 바랍니다.
import json
from empower_functions import EmpowerFunctionsCompletionHandler
from llama_cpp.llama_tokenizer import LlamaHFTokenizer
...
Windows에서 CUDA를 사용하여 실행하기
Nvidia toolkit을 설치합니다 (본인은 cuda 12.1을 사용했습니다): https://developer.nvidia.com/cuda-12-1-1-download-archive?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local
다음 항목을 포함하여 Visual Studio를 설치합니다: C++ CMake tools for Windows, C++ core features
Windows 명령 프롬프트(PowerShell이 아닌 command prompt)에서 empower_functions 가상 환경이 활성화된 상태로 다음 명령어를 실행합니다:
set FORCE_CMAKE=1 && set CMAKE_ARGS=-DGGML_CUDA=on -DLLAMA_AVX=off -DLLAMA_AVX2=off -DLLAMA_FMA=off && pip install llama-cpp-python --no-cache-dir --force-reinstall --verbose
시간이 다소 소요될 수 있으나, 일반 llama-cpp-python 모듈을 CUDA 지원 모듈로 덮어쓰게 됩니다.
그 다음, 가상 환경이 활성화된 상태에서 다음과 같은 명령어로 서버를 실행합니다:
python -m empower_functions.server --model C:\Github\empower-functions-gpu\models\ggml-model-Q4_K_M.gguf --chat_format empower-functions --port 8001 --n_ctx 8196 --n_gpu_layers 20
경로 부분은 컴퓨터에 모델이 저장된 경로로 교체하고, n_ctx는 원하는 컨텍스트(context) 크기로, n_gpu_layers는 GPU로 오프로드(offload)할 레이어 수로 조정하십시오.
Empower 플랫폼은 OpenAI API와 완전히 호환되는 API를 제공하므로, OpenAI SDK를 직접 사용할 수 있습니다. 아래에 예제가 나와 있습니다. 기본 예제는 아래를 참조하시고, 더 자세한 내용은 여기에서 확인할 수 있습니다.
현재 스트리밍(streaming) 및 JSON 모델은 Empower API에서만 사용할 수 있습니다.
from openai import OpenAI
client = OpenAI(
base_url="https://app.empower.dev/api/v1",
...
Empower functions 모델 제품군은 JSON을 네이티브하게 생성하도록 튜닝되었습니다. 저희는 Python 패키지 내에서 OpenAI 형식의 메시지를 프롬프트로 사용할 수 있는 유틸리티를 제공합니다. 아래의 기본 예시를 확인해 주세요. 더 자세한 내용은 여기서 확인할 수 있습니다.
from transformers import AutoModelForCausalLM, AutoTokenizer
from prompt import prompt_messages
device = "cuda"
...
Empower의 함수 모델들은 최첨단 (state-of-the-art) 오픈 소스 (OSS) 모델을 기반으로 미세 조정 (fine-tuned)되었습니다. 저희는 학습을 두 단계로 나누었습니다.
첫째, 함수 호출 (function calling)이 포함된 10만 개 이상의 수작업으로 큐레이션된 고품질 대화 데이터를 사용하여 SFT (Supervised Fine-Tuning, 지도 미세 조정)를 수행합니다. 이 대화들은 단일 턴 (single turn), 멀티 턴 (multi-turn), 그리고 병렬 호출 (parallel calling)과 같은 다양한 시나리오를 다룹니다. 구체적으로, 모델은 시작 토큰 (beginning tokens)을 사용하여 함수를 호출 중인지 아니면 일반적인 대화를 반환 중인지 결정하도록 학습됩니다 (<thought> 및 <call> 태그 사용). 그 후 함수 호출은 JSON으로, 대화는 평소와 같이 반환하므로 스트리밍 (streaming) 통합이 매우 직관적입니다. SFT는 일반적인 사용 사례의 다양한 시나리오를 아우르는 매우 강력한 기초를 모델에 설정합니다.
다음으로, SFT (Supervised Fine-Tuning)가 덜 효과적인 까다로운 시나리오를 위해 DPO (Directly Preference Optimization, 직접 선호 최적화)를 적용합니다. 예를 들어, 함수 명세 (function specifications)에 인자 (arguments)에 대한 예시가 포함되어 있을 때, 모델이 이러한 예시로부터 인자 값을 환각 (hallucinating)하는 것을 방지하고자 합니다. 저희는 상대적으로 적은 양의 데이터로 이러한 잘못된 동작을 수정하는 데 DPO가 매우 효과적이라는 것을 발견했습니다.
마지막으로, 저희는 더 넓은 범위의 사용 사례와 시나리오에서 더 나은 품질을 위해 모델을 지속적으로 최적화하는 데 전념하고 있습니다 :) 귀하의 특정 요구 사항에 따라 모델을 추가로 미세 조정할 수 있습니다. 특정 사용 사례에 대한 요구 사항이 있으시면 저희에게 연락해 주세요!
저희는 Berkeley Function Calling 벤치마크를 통해 모델을 평가하며, 8B 및 70B 버전 모두 해당 크기에서 최첨단 (state of the art) 성능을 달성했습니다:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기