포도가게의 개발일지

바닥부터 LangChain(4) 본문

Tech

바닥부터 LangChain(4)

grape.store 2024. 12. 26. 16:53
반응형

Flowise

  • Flowise는 개발자가 맞춤형 LLM 오케스트레이션 흐름AI 에이전트를 구축할 수 있도록 돕는 오픈 소스 저코드 도구입니다.

Flowise Agent system

  • 현재 flowise는 multi-agents와 sequential agents 방식을 제공합니다.

Multi-agents

system architecture

  • User: 사용자는 시스템의 시작점으로, 초기 입력이나 요청을 제공합니다. 범위를 벗어난 요청은 부정확한 결과, 예기치 않은 loop 또는 시스템 오류를 초래할 수 있습니다. 때문에 사용자 요청은 시스템의 핵심기능과 일치해야합니다.
  • Supervisor: supervisor는 시스템의 오케스트레이터 역할을 수행합니다. 사용자의 요청을 분석하고 이를 하위 작업으로 분해한후 각 worker에게 할당하여 결과를 집계하고 최종적으로 처리된 출력을 사용자에게 제공합니다.
  • Worker: 전문화된 ai agent들로 구성 되며, 각 agent는 프롬프트 메세지를 통해 특정 작업을 수행하도록 지시받습니다. worker agent는 독립적으로 작동하며, supervisor의 지시와 데이터를 전달받아 기능을 실행하고 만일 필요하다면 tool을 실행합니다. 마지막으로 결과를 supervisor에게 전달합니다.

권장사항으로

  1. One task at a time: supervisor는 한번에 하나의 작업에만 집중하도록 설계되었습니다. worker가 작업을 완료하고 결과를 반환할때 까지기다린 후, 다음 단계를 분석하고 그에 맞는 작업을 위임합니다. 이렇게 함으로써 과도한 복잡성을 방지할 수 있습니다.
  2. One supervisor per flow: 중첩된 멀티 에이전트 시스템을 구현하여 고도로 복잡한 워크로플로우를 더 종교한 계층구조를 만들 수 있습니다. 예를들어, LangChain에서 정의한 “계층적 에이전트 팀(Hierarchical Agent Teams)“은 최상위 감독자와 중간 수준의 감독자들이 작업 팀을 관리하는 구조입니다. 그러나 Flowise의 멀티 에이전트 시스템은 현재 하나의 supervisor만을 운영합니다!
  3. 이 두 가지 제약 조건은 애플리케이션 워크플로우를 설계할 때 중요합니다. 만약 감독자가 여러 작업을 동시에, 병렬로 위임해야 하는 워크플로우를 설계하면, 시스템이 이를 처리할 수 없으며 오류가 발생하게 됩니다.

Supervisor

Supervisor prompt

  • 기본적으로 supervisor prompt는 user의 요청을 분석하고 이를 하위 작업의 순서로 분해한 후, 이러한 하위 작업을 전문화된 worker에게 할당하도록 supervisor에게 지시하는 방식으로 작성됩니다.
  • supervisor prompt는 사용자 정의 될 수 있지만, 항상 다음 두가지 핵심 요소가 필요합니다.
    • {team_members} 변수: 이 변수는 supervisor가 사용할 수 있는 worker 목록을 제공하여, supervisor가 전문성에 따라 가장 적합한 worker에게 작업을 위임할 수 있게합니다.
    • "FINISH" 키워드: 이 키워드는 supervisor에게 작업이 완료되었을을 알리는 신호로 사용됩니다. "FINISH" 지시어가 없으면 supervisor는 작업을 불필요하게 계속 위임하거나, 최종 결과를 사용자에게 전달하지 못 할 수 있습니다. 이 키워드는 모든 하 작업이 실행되었고, 사용자의 요청이 완료되었음을 나타냅니다.
    • recursion limit: 중첩된 함수 호출의 최대 깊이를 제한합니다. supervisor가 단일 워크플로우 실행 내에서 자신을 몇번 호출할수있는지 제한하는 역할을 합니다. 이는 무한 재귀를 방지하고 자원의 효율성을 보장합니다.

How the Supervisor works

  1. supervisor는 요청을 분석하고 user가 원하는 결과를 파악하여 work flow를 시작합니다.
  2. supervisor prompt에서 제공되는 {team_members} 변수를 활용하여, 이 변수는 사용가능한 worker의 이름 목록만 제공하므로, supervisor는 각 worker의 전문성을 추론하고 work flow내에서 가장 적합한 worker를 선택합니다.
  3. supervisor가 worker의 전문성을 추론하는데 worker의 이름만을 사용하기 때문에! 이름설정이 매우 중요합니다. worker의 역할이나 전문 분야를 정확하게 반영하는 명확하고 간결하며 설명적인 이름을 설정하는것이 중요합니다.

Worker

  • supervisor: 각 worker는 supervisor와 연결되어야 하며, 작업이 위임될때 호출될 수 있습니다. 이 연결은 multi-agnets system내에서 필수적인 계층적 관계를 나타냅니다.
  • A Chat Model node capable of function calling: 기본적으로 worker는 supervisor의 chat model을 상속받지만, 직접 지정할수도 있습니다. 이 기능 호출 기능은 worker가 전문화된 작업을 위한 tool과 상호작용할 수 있게 도와줍니다.

 

'Tech' 카테고리의 다른 글

바닥부터 LangGraph(5)  (2) 2024.12.26
바닥부터 LangFlow(3)  (0) 2024.12.24
바닥부터 LangGraph(2)  (0) 2024.12.24
바닥부터 LangChain(1)  (0) 2024.12.20
바닥부터 LangChain(0)  (3) 2024.12.20
Comments