LangGraph를 이용한 LLM 도구 통합 및 조건부 엣지 라우팅
이 문서는 LangGraph를 사용하여 언어 모델(LLM)에 도구를 통합하고, 조건부 엣지 라우팅을 통해 도구 사용 여부를 결정하는 방법에 대해 설명합니다. 불필요한 도구 호출을 피하고 응답 시간과 API 비용을 줄이는 것이 목표입니다. 이 설명은 도구 설정, 도구 노드, LLM에 도구 바인딩, 조건부 엣지, 날씨 관련 예제를 포함합니다.
도구 통합
LangGraph를 사용하면 LLM이 외부 도구를 활용할 수 있습니다. 도구는 특정 기능을 수행하는 함수로 정의됩니다. 이러한 도구를 LLM에서 사용할 수 있게 하려면 다음 단계를 따릅니다.
- 도구 정의: 필요한 기능을 수행하는 파이썬 함수를 정의합니다.
- 도구 노드 생성: 정의된 도구를 도구 노드로 변환합니다. 이는 여러 도구를 하나의 노드로 그룹화합니다.
- 도구 바인딩:
bind_tools함수를 사용하여 LLM에 사용 가능한 도구를 알려줍니다. 이렇게 하면 LLM은 어떤 도구를 호출할 수 있는지 알게 됩니다.
조건부 엣지 라우팅
조건부 엣지 라우팅은 LLM이 도구를 사용해야 할 때와 직접 응답할 수 있을 때를 결정하는 메커니즘입니다. 이를 통해 불필요한 도구 호출을 방지하고 효율성을 높입니다.
route_tools함수: 사용자 질문과 모델의 응답을 기반으로 도구 호출이 필요한지 여부를 결정합니다. 이 함수는 스테이트 값의 마지막 메시지를 검토하여tool_calls속성이 있는지 확인합니다.add_conditional_edge함수: 조건부 라우팅을 구현하는 데 사용됩니다. 이 함수는 시작 노드, 조건부 함수, 그리고 조건부 함수의 결과에 따라 다음에 이동할 노드를 지정합니다.
예시: 날씨 정보 검색
날씨 정보를 검색하는 예시를 통해 이러한 개념을 설명합니다. 두 가지 가상 도구가 사용됩니다.
get_weather: 주어진 위치의 날씨 정보를 반환합니다.get_coldest_city: 가장 추운 도시 목록을 반환합니다.
이 예시에서 LLM이 사용자 질문에 따라 적절한 도구를 선택하고, 결과를 결합하여 최종 응답을 제공하는 방법을 보여줍니다.
워크플로우
- 사용자 질문: 사용자가 LLM에 질문을 합니다.
should_continue함수: LLM이 도구를 호출해야 하는지 여부를 결정합니다. 마지막 메시지에tool_calls속성이 있으면 도구를 호출하고, 그렇지 않으면 직접 응답합니다.- 도구 호출: 도구를 호출해야 하는 경우, LLM은 해당 도구를 실행합니다.
- 응답 처리: 도구 결과가 LLM으로 다시 전달되고, LLM은 결과를 결합하여 최종 응답을 생성합니다.
시각화
그래프 시각화에서 조건부 엣지는 점선으로 표시되어 있습니다. 이는 add_conditional_edge 함수를 통해 생성된 분기 엣지입니다. should_continue 함수는 어떤 노드로 갈지 판단하는 역할을 합니다.
결론
LangGraph를 사용한 도구 통합 및 조건부 라우팅은 LLM의 효율성과 정확성을 향상시키는 데 도움이 됩니다. 이를 통해 LLM은 필요한 경우에만 도구를 사용하고, 사용자에게 더 빠르고 정확한 응답을 제공할 수 있습니다. 이 접근 방식은 불필요한 API 호출을 줄여 비용을 절감하고, 응답 속도를 향상시킵니다.