리서치 에이전트 커스텀 노드 함수

Input Variables

  • $args = {{$flow.state.arguments}} : LLM 노드에서 생성하는 Output 중 <tool_call></tool_call> 안의 툴 사용 arguments 를 state 에 저장해두고 사용합니다. (아래 모든 Tool 이 동일하게 사용합니다)

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

const args = JSON.parse($args);

const search_query = args.search_query;
const num_results = args.num_results;

const apiKey = 'YOUR_API_KEY_HERE';

const searchQuery = async (queryObj) => {
  const { q, recency, domains } = queryObj;
  const url = `https://www.searchapi.io/api/v1/search`;

  let days = 0;
  if (recency) {
    days = parseInt(recency, 10);
  }

  let query = null;
  let domainStr = '';
  if (domains) {
    domainStr = domains.map(domain => `site:${domain.trim()}`).join(' OR ');
    query = `${q} ${domainStr}`;
  } else {
    query = q;
  }

  const params = {
    engine: 'google',
    api_key: apiKey,
    q: query
  };

  if (num_results) {
    params.num = num_results
  } else {
    params.num = 5
  }

  if (days > 0) {
    params.tbs = `qdr:d${days}`;
  }

  try {
    const response = await fetch(`${url}?${querystring.stringify(params)}`);

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

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

    const search_summary = results.map(item => ({
      title: item.title || null,
      url: item.link || null,
      snippet: item.snippet || null,
      source: item.source || null,
      date: item.date || null
    }));

    return search_summary;
  } catch (error) {
    return `Error: ${error.message}`;
  }
};

return (async () => {
  const results = await Promise.all(search_query.map(searchQuery));
  const flatResults = results.flat();
  const updatedList = flatResults.map((d, idx) => ({
    id: idx,
    ...d
}));
  const resultString = updatedList.map(item => 
    item.date
      ? `- ${item.title} (${item.url}): ${item.date}${item.snippet} 【search${item.id}】`
      : `- ${item.title} (${item.url}): ${item.snippet} 【search${item.id}】`
  ).join('\n');

  return resultString;
})();

2. Tool - Open URL

  • Open URL Tool 의 경우는 추가 패키지가 필요하기 때문에 MCP Tool 로 구현하여 사용했습니다.

  • GenOS 메뉴 중 배포 > 도구 > MCP 서버 & MCP 도구 메뉴에서 생성하고, Tool 노드에서 해당 MCP 도구를 선택하여 사용합니다.

  • 아래는 LLM 이 생성한 argument 를 파싱하는 코드입니다.

3. Tool - External APIs

  • 다른 API 도 아래와 동일하게 사용하시면 됩니다.

  • 예시는 DeepSearch API (기업, 금융 데이터)

Last updated

Was this helpful?