멀티 에이전트플로우 상세 사용법

이번 튜토리얼에서는 사용자의 질의를 분석하는 Supervisor 아래에서 협력적으로 동작하여 웹 검색 및 이미지 검색을 수행하는 Multi-Agentflow를 제작합니다.

Multi-Agentflow는 Sequential-Agentflow보다 구현이 쉬우며 고려해야 할 변수가 적지만, 그만큼 섬세한 Action을 조절하는 데에는 한계가 있습니다. 복잡하고 세세한 기능을 수행하는 Agentflow를 제작하고 싶다면 Sequential Agentflow 튜토리얼을 참고하세요.

Multi Agent 만들기

1. 워크플로우 만들기

  • 서비스 > 에이전트 > 워크플로우에서 워크플로우를 생성합니다.

  • Flowise Step 추가에서 Agentflow를 선택해 flowchart를 추가합니다.

2.1. Multi Agentflow 구성하기

  • flowchart 좌측 상단에 + 버튼을 눌러 노드를 추가할 수 있습니다.

  • 다음과 같이 노드를 구성합니다.

1. ChatMNC

Agent의 답변 생성에 사용할 모델을 정의합니다. 본 튜토리얼에서는 Llama 4 Scout 모델이 사용되었습니다.

2. Agent Memory

Agent들에게 이전 대화 기록을 저장할 DB를 제공합니다.

3. Supervisor

사용자의 질의를 분석하여 알맞는 Worker에게 업무를 할당하는 감독관 역할을 수행하는 Agent입니다. Recursion limit을 직접 조절할 수 있습니다.

  • 프롬프트는 다음과 같이 작성하였습니다.

  • <주의> 작업을 마쳤다고 판단하면 'FINISH'라고 대답하도록 프롬프트를 작성해야 불필요한 루프를 최소화할 수 있습니다.

  • Summarization 옵션을 활성화 하면 여태까지의 Worker의 수행 내역을 바탕으로 종합된 의견을 제출합니다. 비활성화 되어있다면 마지막 Worker의 출력을 답변으로 제출합니다.

4. Worker

Supervisor에게 지시받은 업무를 수행하는 Agent입니다. 필요에 따라 Tool을 사용할 수 있으며, 결과를 사용자에게 내보냅니다. Max Iteration을 직접 조절할 수 있습니다.

  • 본 튜토리얼에서는 Web Searcher와 Image Searcher 총 두가지 Worker을 정의합니다.

  • [Web Searcher]

  • [Image Searcher]

5. Custom Tool

사용자가 정의한 기능을 수행하는 도구입니다. Javascript 코드로 작성할 수 있으며, Description 및 INPUT SCHEMA 작성을 통해 LLM이 적절한 변수를 입력해 사용할 수 있습니다.

  • 본 튜토리얼에서는 query를 입력으로 받아 검색 결과를 내보내는 Search API 기반 웹 검색 Tool과 query를 입력으로 받아 제목 및 이미지 링크를 내보내는 Google Image 검색 API 기반 Tool을 정의하여 사용하였습니다.

  • [Search Tool]

const fetch = require('node-fetch');

// Flowise에서 입력받은 쿼리
const query = $query;

// SearchAPI.io의 GET URL 구성
const url = `https://www.searchapi.io/api/v1/search?engine=google&gl=kr&hl=ko&q=${encodeURIComponent(query)}&api_key=your_api_key`;
return (async () => {
  try {
    const response = await fetch(url);

    if (!response.ok) {
      throw new Error(`API 요청 실패: ${response.statusText}`);
    }

    const data = await response.json();

    const results = data.organic_results || [];

    if (results.length === 0) {
      return '검색결과 없음';
    }

    const search_summary = results.map(item => ({
      content: item.snippet || '',
      url: item.link || ''
    }));
    return { search_summary };
  } catch (error) {
    return '검색결과 없음';
  }
})();
  • [Image Search Tool]


const fetch = require('node-fetch');

const query = $query;
const num = 10; // 기본 검색 수 설정

// Google Custom Search API 키와 CSE ID
const apiKey = "your_api_key";
const cx = "d3af905bcbe0a407a";

// 이미지 검색 파라미터 설정
const imgSize = "large"; // 이미지 크기: "small", "medium", "large", "xlarge"
const imgColorType = "color"; // 색상 유형: "color", "gray"
const safe = "high"; // 안전도 설정: "high", "medium", "off"
const numResults = 10; // 최대 10개까지 검색 가능

// Google Custom Search API 요청 URL 구성
const url = `https://www.googleapis.com/customsearch/v1?searchType=image&imgSize=${imgSize}&imgColorType=${imgColorType}&safe=${safe}&key=${apiKey}&cx=${cx}&q=${encodeURIComponent(query)}&num=${numResults}`;

// 쿼리의 단어들 중 하나라도 title에 포함되는지 확인하는 함수
const isRelatedToQuery = (title, query) => {
  const lowerTitle = title.toLowerCase();
  const queryWords = query.toLowerCase().split(' ');  // 띄어쓰기로 단어 분리

  // 쿼리의 단어 중 하나라도 포함되어 있으면 true 반환
  return queryWords.some(word => lowerTitle.includes(word));
};

return (async () => {
  try {
    const response = await fetch(url);

    if (!response.ok) {
      throw new Error(`API 요청 실패: ${response.statusText}`);
    }

    const data = await response.json();
    const results = data.items || [];

    if (results.length === 0) {
      return '검색결과 없음';
    }

    // 쿼리의 단어 중 하나라도 포함된 이미지들만 필터링
    const filteredResults = results.filter(item => {
      const title = item.title || '';
      const cleanTitle = title.replace(/[\[\]]/g, '').trim();
      return isRelatedToQuery(cleanTitle, query);
    });

    const search_summary = filteredResults.map(item => ({
      title: item.title || '',
      url: item.link || '',
      thumbnail: item.image?.thumbnailLink || ''
    }));

    return { search_summary };

  } catch (error) {
    return '검색결과 없음';
  }
})();

2.2. Multi Agentflow Test하기

  • 모든 Agentflow의 구성이 끝났다면, Test를 통해 동작을 확인하기 위해 우측 상단의 채팅 아이콘을 클릭해 채팅창을 활성화합니다.

  • '아이폰 15와 갤럭시 S24에 대해 검색해서 특징을 비교해주고 각각의 이미지를 찾아서 보여줘.'라는 질의를 입력해 Supervisor가 제대로 Routing하는지 Test합니다.

  • Supervisor는 Web Searcher에게 먼저 최신 정보를 검색하도록 Task를 부여하고, Web Searcher는 할당받은 업무를 Search Tool을 사용하여 수행한 뒤 보고합니다.

  • 최신 정보의 수집이 끝난 후, Supervisor는 Image Searcher에게 아이폰과 갤럭시의 사진을 검색하도록 Task를 부여합니다.

  • Image Searcher는 할당받은 Task를 Image Search Tool을 사용하여 수행한 뒤 보고합니다.

  • Supervisor는 업무가 끝났다고 판단할 경우, Finished를 출력해 작업이 끝났음을 알립니다. 최종 Output은 마지막 Worker의 Output이 되며, 사용한 도구들과 그 Output이 나열되어 나타납니다.

Last updated

Was this helpful?