[번역] LangChain.js: Conceptual Guide: Tool calling
LangChain.js 의 주요 구성요소 및 개념(concept)들이 LangChain.js conceptual guide 페이지에 나열되어 있습니다. 이 포스트는 LangChain.js 의 concept 중 하나를 번역했습니다.
현재 포스트의 내용을 확인하기 전 아래 링크의 내용을 확인하세요.
도구 호출 (Tool calling)
개요
많은 AI 애플리케이션은 인간과 직접 상호작용합니다. 이러한 경우 모델이 자연어로 응답하는 것이 적절합니다. 하지만 데이터베이스나 API와 같은 시스템과 직접 상호작용해야 하는 경우는 어떻게 해야 할까요? 이러한 시스템은 종특정 입력 스키마를 요구합니다(예: API는 특정 페이로드 구조를 요구함). 이런 필요성에서 도구 호출(Tool Calling) 개념이 등장했습니다. 도구 호출을 사용하면 특정 스키마에 맞는 모델 응답을 요청할 수 있습니다.
정보
도구 호출(Tool Calling)과 함수 호출(Function Calling)은 동일한 의미로 사용됩니다.
도구 호출 개념도

도구 호출 핵심 개념
- 도구 생성:
tool
함수를 사용하여 도구 생성. 도구는 함수와 해당 스키마의 연관 관계입니다. - 도구 바인딩: 도구 호출을 지원하는 모델에 도구 연결. 이를 통해 모델이 도구와 해당 입력 스키마를 인지합니다.
- 도구 호출: 모델이 상황에 맞게 도구를 호출하고 응답이 도구의 입력 스키마에 맞도록 보장합니다.
- 도구 실행: 모델이 제공한 인수를 사용하여 도구 실행
도구 호출 구성 요소

권장 사용법
다음 의사 코드는 도구 호출 사용을 위한 워크플로를 보여줍니다:
// 도구 생성 const tools = [myTool]; // 도구 바인딩 const modelWithTools = model.bindTools(tools); // 도구 호출 const response = await modelWithTools.invoke(userInput);
도구 생성
tool
함수를 사용한 도구 생성 예시:
import { tool } from "@langchain/core/tools"; import { z } from "zod"; const multiply = tool( ({ a, b }: { a: number; b: number }): number => { /** a와 b를 곱합니다 */ return a * b; }, { name: "multiply", description: "두 숫자를 곱합니다", schema: z.object({ a: z.number(), b: z.number(), }), } );
추가 자료
함수 실행 없이 스키마만 정의할 경우:
const multiplyTool = { name: "multiply", description: "두 숫자를 곱합니다", schema: z.object({ a: z.number(), b: z.number(), }), };
도구 바인딩
대부분의 모델 제공자는 도구 호출을 지원합니다.
팁
.bindTools()
메서드로 모델에 도구 연결:
const modelWithTools = model.bindTools([toolsList]);
구체적 예시:
const llmWithTools = toolCallingModel.bindTools([multiply]);
도구 호출
도구 호출 프로세스 다이어그램

관련 없는 입력 시 자연어 응답:
const result = await llmWithTools.invoke("Hello world!"); // 출력: "안녕하세요!"
도구 관련 입력 시 호출 예시:
const result = await llmWithTools.invoke("2 곱하기 3은?"); result.tool_calls; // 출력: {'name': 'multiply', 'args': {'a': 2, 'b': 3}, 'id': 'xxx', 'type': 'tool_call'}
도구 실행
도구는 Runnable
인터페이스를 구현하므로 직접 실행 가능:
tool.invoke(args)
LangGraph의 ToolNode
컴포넌트 사용 예시:
- ToolNode 참고
모범 사례
- 명시적 도구 호출 API가 있는 모델이 더 우수한 성능 발휘
- 도구 이름과 설명을 명확하게 작성
- 단순하고 범위가 좁은 도구를 선호
- 많은 도구 목록에서 선택하도록 요청 시 모델 성능 저하