본문 바로가기

LLM/Langchain

(1) LangGraph 설명

Why LangGraph? (langchain-ai.github.io)

 

Why LangGraph?

Why LangGraph? LLMs are extremely powerful, particularly when connected to other systems such as a retriever or APIs. This is why many LLM applications use a control flow of steps before and / or after LLM calls. As an example RAG performs retrieval of rel

langchain-ai.github.io

 

LLM(대규모 언어 모델)은 특히 검색기(retriever)나 API와 같은 다른 시스템에 연결될 때 매우 강력합니다. 이러한 이유로 많은 LLM 애플리케이션은 LLM 호출 전후에 단계 흐름(control flow)을 사용합니다. 예를 들어, RAG(검색-생성) 시스템은 질문과 관련된 문서를 검색하고, 이러한 문서를 LLM에 전달하여 답변을 기반으로 합니다. LLM 호출 전후의 단계 흐름을 "체인(chain)"이라고 부르며, 체인은 LLM과 함께 프로그램을 작성하는 데 인기 있는 패러다임으로, 높은 신뢰성을 제공합니다. 같은 단계 세트가 각 체인 호출 시 실행됩니다.

하지만 많은 경우, LLM 시스템이 자체적으로 단계 흐름을 선택할 수 있기를 원합니다! 이것이 에이전트(agent)의 한 정의입니다: 에이전트는 LLM을 사용하여 애플리케이션의 단계 흐름을 결정하는 시스템입니다. 체인과는 달리, 에이전트는 LLM에게 애플리케이션 내에서 단계의 순서를 조절할 수 있는 일정 정도의 제어권을 부여합니다. LLM을 사용하여 애플리케이션의 제어를 결정하는 예시는 다음과 같습니다:

- LLM을 사용하여 두 가지 잠재적 경로 간의 라우팅을 결정
- LLM을 사용하여 호출할 여러 도구 중 하나를 결정
- LLM을 사용하여 생성된 답변이 충분한지, 또는 더 많은 작업이 필요한지 판단


다양한 유형의 에이전트 아키텍처를 고려할 수 있으며, 이는 LLM에 따라 다양한 수준의 제어권을 제공합니다. 한 극단적으로는 라우터가 LLM이 지정된 옵션 집합에서 단일 단계를 선택할 수 있게 하고, 다른 극단으로는 완전 자율적인 롱-러닝 에이전트가 주어진 문제에 대해 원하는 모든 단계 순서를 선택할 수 있는 자유를 갖습니다.

 

--> (고찰)

- 기존의 체인은 사용자가 정의한 순서대로 체이닝 하였다면, LangGraph는 이를 LLM이 판단하여 자동화 할 때 유연한 설계 방식을 제공한다(?) :  LangGraph 개발 동기에 대한 질문

- 만약 LLM 호출 전에 에이전트가 미리 필요한 정보를 얻어오고, 최종 결과를 LLM에 넣는 파이프라인 이라면, LangGraph는 필요 없는 것인가? : 

- LangGraph는 오로지 LLM이 필요한 행동을 스스로 결정하기 위해 사용되는 도구 인 것인가?

 

 

여러 가지 개념이 많은 에이전트 아키텍처에서 활용됩니다:

도구 호출(Tool calling): 이는 종종 LLM이 결정을 내리는 방식입니다.
행동 취하기(Action taking): 경우에 따라 LLM의 출력이 행동의 입력으로 사용됩니다.
기억(Memory): 신뢰할 수 있는 시스템은 발생한 사건에 대한 지식을 갖추고 있어야 합니다.
계획(Planning): 계획 단계(명시적이든 암묵적이든)는 LLM이 결정을 내릴 때 최대한 신뢰성 있게 결정을 내리도록 하는 데 유용합니다.


도전 과제(Challenges)

실제로는 제어와 신뢰성 사이의 균형을 잡아야 합니다. LLM에 더 많은 제어권을 줄수록 애플리케이션은 종종 덜 신뢰할 수 있게 됩니다. 이는 LLM의 비결정론(non-determinism)이나 에이전트가 사용하는 도구(또는 단계)를 선택하는 데서 발생하는 오류와 같은 요인 때문일 수 있습니다.

 

--> 더 많은 제어권을 줄 수록 덜 신뢰하게 된다.

 

핵심 원리

LangGraph의 목적은 더 많은 제어권을 에이전트에게 부여하면서 높은 신뢰성을 유지하여 곡선을 개선하는 데 도움을 주는 것입니다. 신뢰할 수 있는 에이전트를 구축하는 데 적합한 LangGraph의 몇 가지 특정 기둥을 간략히 설명하겠습니다.

 

제어 가능성
LangGraph는 애플리케이션의 흐름을 노드와 엣지의 집합으로 표현함으로써 개발자에게 높은 수준의 제어권을 제공합니다. 모든 노드는 공통 상태(메모리)에 접근하고 이를 수정할 수 있습니다. 애플리케이션의 제어 흐름은 노드를 연결하는 엣지를 통해 결정론적으로 또는 조건부 로직을 사용하여 설정할 수 있습니다.

지속성
LangGraph는 그래프 상태를 단기 또는 장기(예: 데이터베이스를 통해) 메모리를 사용하는 여러 가지 옵션으로 지속시킬 수 있는 기능을 제공합니다.

인간-루프(Human-in-the-Loop)
지속성 레이어는 여러 가지 인간-루프 상호작용 패턴을 에이전트와 함께 사용할 수 있도록 합니다. 예를 들어, 에이전트를 일시 정지하고 상태를 검토한 후 이를 편집하고 후속 단계를 승인하는 것이 가능합니다.

스트리밍
LangGraph는 스트리밍을 위한 firstclass 지원(?)을 제공하여 에이전트 실행 과정에서 사용자(또는 개발자)에게 상태를 노출할 수 있습니다. LangGraph는 도구 호출이 발생하는 이벤트와 LLM이 생성할 수 있는 토큰 모두의 스트리밍을 지원합니다.

-->

LLM에 의한 tool 호출 흐름에서 어떻게 그래프 구조가 신뢰성을 개선할 수 있는지? 제어권을 제공하는지?

FirstClass 지원이라는 것이, LangGraph가 1급 객체로 존재한다는 뜻인지?

 

디버깅

그래프를 구축하면, 테스트와 디버깅은 LangGraph Studio를 이용할 수 있다

 


Home (langchain-ai.github.io)

 

Home

🦜🕸️LangGraph ⚡ Building language agents as graphs ⚡ Note Looking for the JS version? Click here (JS docs). Overview LangGraph is a library for building stateful, multi-actor applications with LLMs, used to create agent and multi-agent workflows

langchain-ai.github.io

 

예시

- LangGraph의 핵심 개념은 상태(state)이다. 각 그래프 실행은 상태를 만들고, 상태는 그래프 노드들 사이를 이동한다. 

- 각 노드는 실행 이후 리턴 값과 함께 내부 상태를 업데이트 한다. 상태를 업데이트 하는 방식은, 그래프 타입(?) 이나 사용자 정의 함수에 의해 결정된다.

반응형

'LLM > Langchain' 카테고리의 다른 글

LangServe 개요  (0) 2024.05.02