[13. Langchain][RAG] RAG Agent (250619 수업)

해피해피슈크림·2025년 6월 22일

Tool Calling

  • Tool은 하나의 기능을 처리하는 함수이다.
  • Tool Calling은 LLM이 외부 도구나 API를 활용하여 작업을 수행할 수 있게 하는 기능이다.

절차

  1. LLM이 사용할 수 있는 도구들을 binding한다.
  2. 사용자로부터 질의가 들어오면, LLM은 어떤 tool을 어떻게 호출할지 응답한다. (그 질의를 처리하기 위해 tool을 호출하는 것이 필요한지 판단하고, 필요하다고 판단했다면)
  3. 사용자가 tool을 호출하고 그 처리 결과를 취합해 질의와 함께 LLM에 요청한다.

왜 사용자가 tool을 호출해요?

  • Tool Calling은 LLM이 도구를 사용할지, 사용한다면 어떤 도구를 쓸지 의사결정하는 역할까지만 수행한다. 도구 실행은 개발자(사용자)가 실제로 수행한다.
  • LLM이 도구 호출까지 해주면 좋겠는데요 => Agent

✅ 1. Tool Calling 절차 요약

전체 흐름:

User 질의 
 → LLM: 이 도구를 써야겠다 판단 + tool_call 응답 
 → 사용자 코드: 해당 도구 호출 및 실행 
 → 도구 결과를 LLM에게 다시 전달 
 → LLM이 결과 바탕으로 최종 응답 생성

✅ 2. Tool Calling vs Agent

항목Tool CallingAgent
도구 선택✅ LLM이 어떤 툴을 쓸지 판단✅ LLM이 판단
도구 실행❌ 개발자가 직접 수행✅ Agent가 자동 실행
결과 종합❌ 사용자가 도구 결과를 LLM에 전달✅ Agent가 내부적으로 종합
최종 응답 생성⭕ LLM에게 한 번 더 호출하면 응답 생성 가능 (Tool Calling 자체는 직접 생성 안 함)✅ Agent가 도구 실행부터 응답 생성까지 전 과정 처리
호출 방식 예시tool_model.invoke()tool_calls 판단만RunnableAgent.invoke()실행 + 응답까지 자동 처리

✅ 3. 단계별 메시지 객체

단계설명메시지 객체주체
① 사용자 입력사용자의 질문 입력str 또는 HumanMessage사용자
② LLM 판단Tool 필요 여부 판단 및 tool_calls 생성AIMessage (tool_calls 필드 포함)LLM
③ 도구 실행tool_calls 정보를 바탕으로 실제 툴 실행- (직접 실행)사용자 코드
④ 도구 결과 전달도구 결과를 메시지로 포맷ToolMessage사용자 코드
⑤ 최종 응답 생성AIMessage + ToolMessage 바탕으로 LLM이 응답 생성AIMessage (최종 응답)LLM

✅ 4. Tool Calling 사용 시 주의할 점

  • 도구 호출은 자동 실행되지 않음 → 반드시 tool_calls를 바탕으로 개발자가 실행해야 함
  • ToolMessage의 tool_call_id는 반드시 tool_calls의 ID와 일치해야 함 → 연결 실패 시 응답 오류
  • 최종 응답 생성 시, ToolMessage는 리스트로 넘겨야 함 → [AIMessage, ToolMessage, ToolMessage, ...] 형식

0개의 댓글