Agent가 '말만 하는 AI'를 넘어 실무 결과를 내는 핵심은 Tool Calling입니다. LLM이 함수 시그니처를 선택하고, 런타임이 실행한 뒤, 결과를 다시 LLM에 feeding합니다.
개념 정의
Tool Calling은 LLM 출력에 tool_calls 배열(함수명·arguments JSON)이 포함되고, Agent Executor가 이를 파싱해 실제 도구를 실행하는 패턴입니다. 블루버튼 Shop Agent는 toolType: 'internal' | 'external'로 도구를 등록합니다.
| 도구 유형 | 예 | 특징 |
|---|---|---|
| internal | quotation-tool, text-analyzer | 블루버튼 호스팅·동일 인증 |
| external | 고객 CRM, 재고 API | toolConfig URL·키 필요 |
메커니즘: 실행 파이프라인
- 프롬프트에 tools_description 주입 (AgentPromptBuilder)
- LLM 스트리밍/비스트리밍 응답에서
tool_calls추출 tool_name,parameters로 핸들러 dispatchresult를 Observation으로 LLM 재호출 또는 최종 응답 합성- 응답 payload에
tool_calls이력 포함 (디버깅·감사)
스트리밍 시 delta 단위로 arguments가 누적되며, 완료 후 final_tool_calls가 확정됩니다.
이론적 배경
Function Calling은 LLM을 planner로, 도구를 actuator로 분리하는 embodied AI 접근입니다. ReAct 논문의 Action step을 OpenAI/Anthropic API가 구조화한 것이 tool_calls입니다. internal 도구는 낮은 latency·높은 신뢰, external은 데이터 freshness trade-off입니다.
30초 요약
- Agent는 LLM이 고른 도구를 실제 실행해 견적·분석·계산 결과를 만듭니다.
- internal 도구(견적·텍스트 분석)부터 연동하고 external은 PoC 이후 확장하세요.
- tool_calls 로그로 성공률·파라미터 오류를 추적합니다.
요리사(LLM)가 레시피만 읽는 게 아니라 오븐(quotation-tool)을 직접 돌리는 것과 같습니다. 재료 목록(arguments)이 틀리면 오븐이 에러를 내고, 요리사는 다시 재료를 확인합니다.
FAQ
Q. LLM이 도구를 안 부르면?
A. system_prompt Rules에 "견적 요청 시 반드시 quotation-tool 사용" 명시. Few-shot 예시 추가.
Q. quotation-tool 입력은?
A. Must 기능 수, 플랫폼(iOS/Android/Web), 일정 주차, 디자인 수준 등. 견적 도구 필드와 1:1 매핑 권장.
Q. text-analyzer는 언제?
A. RFP·제안서·명세 초안 품질 점검. 텍스트 분석기로 누락 섹션·톤 일관성 검사.
Q. external tool 보안은?
A. toolConfig에 scoped API key, Agent별 toolOrder·isActive로 최소 권한.
용어 사전
| 용어 | 설명 |
|---|---|
| tool_calls | LLM이 생성한 함수 호출 요청 배열 |
| Observation | 도구 실행 결과를 LLM에 되돌리는 단계 |
| internal tool | 블루버튼 내장 도구 |
| toolConfig | external 도구 URL·헤더·파라미터 설정 |
| agent_scratchpad | 중간 추론·도구 결과가 쌓이는 LangChain 슬롯 |
팁: 도구 description에 실패 시 반환 형식까지 적으면 LLM이 잘못된 JSON을 덜 생성합니다.
실무: quotation-tool 호출 예시
사용자: "쇼핑몰 MVP, Must 4개, 10주, 디자인 포함 견적"
Agent Thought → Action:
Action: quotation-tool
Parameters: {
"project_type": "ecommerce_mvp",
"must_features": 4,
"weeks": 10,
"design_level": "standard"
}
Observation: { "min": 950, "max": 1400, "unit": "만원" }
최종 응답: 범위 + Must 3개로 좁히는 확인 질문
text-analyzer 연동 템플릿
[시스템] 제안서·명세 텍스트가 주어지면 text-analyzer로
- 누락 섹션(In/Out, 일정, KPI)
- 모호한 표현(적당히, 필요시)
- 견적 연계 가능 여부
를 점검한 뒤 개선 목록 5개를 markdown 표로 출력하라.
도구 등록 체크리스트
- toolDisplayName 한글·역할 한 줄
- parameters JSON Schema LLM에 노출
- internal vs external 타입 정확히 설정
- toolOrder: 견적 → 분석 → 외부 순
- isActive false로 staging 도구 분리
Before / After
| Before | After |
|---|---|
| "대략 1000만 정도예요"(환각) | quotation-tool 범위 산출 |
| 사람이 제안서 누락 수동 검색 | text-analyzer 자동 플래그 |
| 도구 실패 시 빈 응답 | Observation 에러 → 재시도 질문 |
KPI
- tool_call 성공률 ≥ 90%
- 잘못된 parameters 비율 ≤ 8%
- 견적→명세 전환율 (Agent 세션 기준) 추적