- Red Hat Node.js 팀이 LLM과 Node.js, TypeScript/JavaScript 통합 방안을 실험
- 여러 프레임워크를 비교하며 특히 tool/function 호출과 에이전트 동작 방식을 중점적으로 검토
- 최근 출시된 Llama Stack의 기능과 Node.js와의 통합 가능성을 분석
Llama Stack 설정 및 실행 방법
- Llama Stack은 API 표준화를 목표로 다양한 구현체를 배포하는 모듈형 프레임워크임
-
Ollama 기반 컨테이너 사용 시 가장 쉬운 실행 방법 제공
- 실행 스크립트 예시를 통해 서버 설정:
- 모델:
meta-llama/Llama-3.1-8B-Instruct
- 포트:
8321
- Ollama 서버 IP:
10.1.2.38
- Ollama에서 모델을 미리 실행해야 하며, 매일 1회 이상 사용해 keepalive 유지 필요
- 문서 엔드포인트(
/docs
)를 통해 API 스키마와 인터랙티브 테스트 가능
첫 Node.js 애플리케이션 예시
-
llama-stack-client-typescript
라이브러리를 사용해 Llama Stack과 통신
- 두 개의 툴 정의:
-
favorite_color_tool
: 도시/국가 기반 색상 정보 제공
-
favorite_hockey_tool
: 도시/국가 기반 아이스하키 팀 정보 제공
- 질문 시나리오를 통해 툴 호출 흐름 테스트
- 초기 문제점: 툴에서 필요한 정보가 없을 경우 명확한 유도문이 출력되지 않음
- 해결 방법: 응답 메시지에 "assistant" 단어 삽입으로 흐름 자연스럽게 개선됨
Llama Stack에서의 tool 호출 처리 방식
-
chatCompletion()
API 사용 시 툴 호출은 직접 처리 필요
-
handleResponse()
함수를 통해 툴 요청을 감지하고 결과를 다시 메시지로 전달
-
tool_choice
는 기본적으로 "auto"
설정이나, 툴이 있으면 사용하려는 경향이 강함
- 질문이 툴과 무관한 경우에도 툴 사용 시도를 포기하고 ‘답변 불가’로 처리되는 현상 관찰됨
MCP와 Llama Stack 통합 실험
- MCP(Model Context Protocol)를 통해 툴을 외부 서버에 호스팅하고 다양한 프레임워크와 공유 가능
- MCP 서버는 Supergateway를 통해 stdio 기반 서버를 SSE 방식으로 브리지 처리
- MCP 서버 등록 후, Llama Stack agent API를 사용하여 MCP 툴 자동 호출 가능
- agent API는:
- 상태/메시지 관리 자동 처리
- 툴 호출 흐름을 프레임워크가 내부적으로 수행
- 다만 툴 호출 로그는 직접 볼 수 없으며, 최종 응답만 확인 가능
로컬 환경 접근을 위한 MCP 활용
- MCP 서버를 로컬 환경에서 stdio 방식으로 실행하여 Llama Stack과 연결 가능
- MCP 서버의 툴 정의 JSON을 Llama Stack 호환 형식으로 변환하는 코드 필요
-
mcpClient.callTool()
을 통해 LLM 응답 흐름 안에서 툴 결과 반환 가능
- 이를 통해 중앙화 서버가 아닌 로컬 앱 환경 접근 시나리오 구현 가능
마무리
- Node.js 환경에서 Llama Stack을 통한 LLM 및 툴 호출 통합 실습 진행
- 다양한 방법: 로컬 툴, 원격 MCP, 로컬 MCP를 통한 다양한 활용 사례 제공
- 특히 JavaScript/TypeScript 개발자들에게 실질적인 코드 예제와 흐름을 제시함
- 앞으로 LLM과 Node.js를 통합하고 싶은 개발자에게 유익한 출발점 역할
추가 자료