Function Calling with Ollama: Make Your Local LLM Run Real Tools
개요
Ollama에서 Function Calling 기능을 활용하여 로컬 LLM이 실제 도구를 실행하도록 하는 방법을 설명하며, 이를 통해 LLM이 학습 데이터에만 의존하지 않고 외부 API 연동, 데이터베이스 조회, 계산 실행 등 생산성 높은 에이전트 워크플로우를 구축할 수 있음을 보여줍니다.
주요 내용
- Function Calling의 중요성: Function Calling이 없으면 LLM은 폐쇄적인 시스템에 머물지만, 이를 통해 LLM은 계획자 역할을 수행하며 실제 API 호출, 데이터베이스 쿼리, 계산 실행 등 외부 기능을 연동할 수 있게 되어 "흥미로운 데모"에서 "실제 서비스 수준의 에이전트"로 발전할 수 있습니다.
- Function Calling 작동 방식: LLM이 직접 함수를 호출하는 것이 아니라, 구조화된 요청(JSON 형식)을 반환하며, 실제 함수 실행 여부는 사용자의 코드에서 결정하고 실행합니다.
- Ollama에서의 Function Calling 지원 모델: 2026년 기준으로
qwen2.5:7b이상,llama3.1:8b이상,mistral-nemo모델이 강력하게 지원하며,qwen2.5-coder:7b는 기술적 함수에,llama3.2:3b는 제한적으로 지원됩니다. - 최소 예제: OpenAI API와 호환되는 JSON Schema 형식으로 도구를 정의하고,
ollama의/v1/chat/completions엔드포인트에tools및tool_choice: "auto"옵션을 포함하여 호출하면, LLM이 호출할 함수와 인자를 JSON 형태로 응답합니다. - 응답 처리 및 루프: LLM으로부터 받은 함수 호출 정보를 파싱하여 해당 함수를 실행하고, 그 결과를 다시 LLM에게 전달하여 최종 자연어 응답을 생성하는 양방향 통신 루프를 구현합니다.
- 다중 도구 활용: 여러 도구를
tools배열에 정의하면 LLM이 상황에 맞는 도구를 자동으로 선택하여 호출하며, 이를 통해 여러 기능을 연쇄적으로 수행하는 에이전트 구축이 가능합니다. - 문제 해결 방안:
- 모델의 잘못된 인자값 생성:
Zod와 같은 라이브러리를 사용하여 인자를 엄격하게 검증하고, 오류 발생 시 모델에게 오류를 반환하여 재시도를 유도합니다. - 모델의 도구 무시: 프롬프트를 구체화하여 특정 질문에 대해 항상 도구를 호출하도록 지시하거나, 누락된 매개변수를 사용자에게 질문하도록 유도합니다.
- 모델의 불필요한 도구 호출: 시스템 프롬프트에 "라이브 데이터 요청 시에만 함수를 호출하라"는 등의 제약을 추가하여 불필요한 호출을 방지합니다.
- 활용 가능성: 파일 시스템 접근, 쉘 명령어 실행, 데이터베이스 쿼리, REST API 연동 등 다양한 기능을 LLM과 결합하여 로컬 에이전트 루프를 구축할 수 있습니다.
시사점
Ollama의 Function Calling 기능은 로컬 LLM을 단순한 챗봇을 넘어, 실제 세계의 도구와 상호작용하며 복잡한 작업을 수행할 수 있는 강력한 에이전트로 발전시키는 핵심적인 기술이며, 이는 LLM 기반 애플리케이션 개발의 생산성과 활용 범위를 크게 확장시킵니다.
원문을 불러오는 중...
댓글
GitHub Discussions