본문 바로가기
Programming/AI&ML

[현황] 멀티에이전트 최고봉? fast-agent 프레임워크

by BitSense 2025. 4. 8.

다음은 최근 등장한 fast-agent 에 대한 내용을 정리해 보았습니다.

1. 프레임워크 개요

fast-agent는 복잡한 AI 에이전트와 워크플로우(작업 흐름)를 손쉽게 정의하고 테스트할 수 있게 해주는 오픈소스 AI 에이전트 프레임워크입니다 (GitHub - evalstate/fast-agent: Define, Prompt and Test MCP enabled Agents and Workflows) (FastAgent: The new framework for AI agent development presented - ai-rockstars.com). 2025년 3월에 공개된 이 프레임워크(evalstate/fast-agent)는 기존 lastmile-ai/mcp-agent 프로젝트를 포크하여 발전시킨 것으로, 모델 컨텍스트 프로토콜(MCP, Model Context Protocol)을 지원하는 에이전트와 도구(tool)들을 간단한 구성만으로 구현할 수 있는 강력한 기반을 제공합니다 (FastAgent: The new framework for AI agent development presented - ai-rockstars.com). Python으로 작성되었으며 YAML/JSON 설정 파일 또는 최소한의 코드만으로도 다중(멀티) 에이전트 시스템을 구축할 수 있는 로우코드(low-code) 환경을 지향합니다 (FastAgent: The new framework for AI agent development presented - ai-rockstars.com). OpenAI GPT-4 시리즈와 Anthropic Claude 등 여러 LLM(대형 언어 모델)을 동시에 활용하는 에이전트 워크플로우, 이미지/PDF와 같은 멀티모달 입력 지원 등 고급 기능을 갖추고 있습니다 (GitHub - evalstate/fast-agent: Define, Prompt and Test MCP enabled Agents and Workflows) (fast-agent:快速构建高效智能Agent的开源框架-CSDN博客). 또한 MCP 표준을 충실히 구현하여, OpenAI와 Anthropic의 최신 “툴 사용” 기능(예: 함수 호출 형태의 도구 실행)을 end-to-end로 테스트된 안정적인 방식으로 지원하는 최초의 프레임워크라는 점을 강조하고 있습니다 (GitHub - evalstate/fast-agent: Define, Prompt and Test MCP enabled Agents and Workflows) (fast-agent:快速构建高效智能Agent的开源框架-CSDN博客).

2. 주요 특징

fast-agent의 주요 특징은 다음과 같습니다:

3. 장점

fast-agent 프레임워크의 장점은 다음과 같이 정리할 수 있습니다:

4. 단점

물론 fast-agent에도 몇 가지 고려해야 할 한계나 단점이 있습니다:

  • 학습 곡선: LangChain과 같은 기존 프레임워크에 비해 개념적으로 새로운 MCP 프로토콜계층적 워크플로우 개념을 이해해야 하므로 초기 학습 부담이 있을 수 있습니다. 멀티에이전트 시스템이나 비동기 프로그래밍에 익숙하지 않은 개발자에겐 다소 복잡하게 느껴질 수 있습니다.
  • 문서화 및 성숙도: 2025년 출시된 비교적 신규 프레임워크로, 아직 문서 사이트가 구축 중이며 완전하지 않은 부분이 있습니다 (fast-agent-mcp · PyPI). 사용 방법이나 에러 해결에 있어서 커뮤니티 정보가 LangChain 등에 비해 적고, 급속한 업데이트 과정에서 변경이 발생할 가능성도 있습니다.
  • Python 생태계 중심: fast-agent는 Python 기반으로 개발되어 Node.js용 SDK가 별도로 제공되지 않습니다. Node.js 환경에서 사용하려면 Python 환경에 의존하거나 별도의 브리지(예: 프로세스 실행, REST API 서버) 설정이 필요해 다소 번거롭습니다. 반면 경쟁 프레임워크들은 JS 생태계 지원이 있는 경우도 있어 이 부분은 단점이 될 수 있습니다.
  • 외부 서비스 의존: 기본적으로 OpenAI, Anthropic 등 외부 LLM API 키 설정이 필요하며, 호출 비용이 발생합니다. 오픈소스 LLM을 직접 구동하는 기능은 MCP 서버 형태로 수동 구성해야 하므로, 자체 모델을 쓰고자 하는 경우 추가 작업이 들 수 있습니다.
  • 복잡한 시나리오 디버깅: 멀티에이전트의 병렬 처리와 도구 호출이 얽힌 복잡한 워크플로우는 디버깅이 어려울 수 있습니다. fast-agent는 이를 완화하기 위해 대화 이력 프롬프트 제공, 에코 모드 등의 기능을 갖췄지만, 여전히 논리 오류 추적이나 메모리 관리는 개발자의 몫입니다.
  • 경량 프로젝트에 오버스펙: 단순 FAQ 챗봇이나 1~2단계 작업에는 이처럼 기능이 풍부한 프레임워크가 오히려 과할 수 있습니다. 설정 파일 작성, MCP 세팅 등의 추가 단계가 필요하기 때문에, 작은 규모 프로젝트에서는 보다 경량화된 솔루션이 나을 수 있습니다.

5. 사용 방법 (Node.js 예제)

Node.js 환경에서는 fast-agent를 직접 NPM 패키지로 가져올 수 없기 때문에, Python 패키지로 설치된 fast-agent를 Node.js에서 호출하는 형태로 사용합니다. 일반적인 방법 두 가지는 (a) fast-agent를 서버로 띄워두고 Node.js가 HTTP를 통해 통신하거나 (b) Node.js 애플리케이션에서 Python 프로세스를 직접 실행하는 것입니다. 아래에서는 간단히 Python 측 에이전트를 정의하고 Node.js에서 해당 에이전트를 CLI 프로세스 호출로 사용하는 예제를 보여줍니다.

  • 1) 설치: 먼저 시스템에 Python 3.10+를 설치하고, Pip로 fast-agent-mcp 패키지를 설치합니다 (fast-agent - MCP native Agents and Workflows - fast-agent documentation). 예를 들어 다음과 같이 실행합니다:또한 OpenAI나 Anthropic API 키를 fast-agent가 인식할 수 있도록 환경변수나 fastagent.secrets.yaml 파일에 설정해야 합니다 (예: OPENAI_API_KEY, ANTHROPIC_API_KEY 등).
  • pip install fast-agent-mcp
  • 2) 에이전트 구성: fast-agent는 Python 코드로 에이전트를 정의합니다. 예를 들어 agent.py라는 파일에 아래와 같이 간단한 에이전트를 작성했습니다. 이 에이전트는 주어진 입력 문자열에 대해 글자수를 세어주는 동작을 합니다:위 코드에서는 @fast.agent 데코레이터로 에이전트를 정의하고, agent()를 호출하여 인터랙티브 모드로 실행 준비를 합니다. 이 상태로 agent.py를 실행하면 프롬프트를 통해 사용자 입력을 받고 해당 에이전트의 응답을 출력하게 됩니다 (Deploy and Run - fast-agent documentation) (Deploy and Run - fast-agent documentation).
  • import asyncio from mcp_agent.core.fastagent import FastAgent fast = FastAgent("CountAgent") @fast.agent(instruction="You are an agent that counts the number of characters in the input.") async def main(): async with fast.run() as agent: await agent() # 인터랙티브 모드 시작 (입력을 대기) if __name__ == "__main__": asyncio.run(main())
  • 3) Node.js에서 실행 및 사용: 이제 Node.js 측에서 child_process 모듈을 사용하여 이 Python 에이전트를 실행해보겠습니다. uvicorn 기반의 uv CLI를 활용하여 에이전트를 실행하면 asynchronous 환경이 자동 관리되므로, Node.js에서 다음과 같이 Python 프로세스를 호출할 수 있습니다 (설치 시 uv 명령이 함께 설치됩니다):위 코드에서는 child_process.exec을 통해 uv run agent.py 커맨드를 실행합니다. --agent default --message "<입력>" 옵션을 주어 기본 에이전트에 문자열을 보내고, --quiet 옵션으로 불필요한 로그 없이 최종 응답만 출력하도록 했습니다 (fast-agent/README.md at main · evalstate/fast-agent · GitHub). Node.js는 이 프로세스의 표준 출력(stdout)을 받아 에이전트의 응답 결과를 얻을 수 있습니다. 예를 들어 userInput이 "Hello, fast-agent!"라면, 콘솔에는 "에이전트 응답: 18"과 같이 글자수 18을 반환하는 결과가 출력됩니다.
  • 참고: 위 방식은 간단히 결과를 얻는 용도로 적합하며, 요청마다 새 프로세스를 실행하게 됩니다. 보다 효율적으로 사용하려면 fast-agent를 백그라운드에서 서버 모드로 실행하고, Node.js에서 HTTP fetch/SSE 등을 통해 상시 통신하는 것을 고려할 수 있습니다. 예를 들어 uv run agent.py --server --transport sse --port 8080 명령으로 8080 포트에 SSE 기반 MCP 서버를 실행한 뒤 (Deploy and Run - fast-agent documentation), Node.js에서 EventSource나 fetch를 이용해 에이전트와 지속 통신할 수 있습니다. 이러한 통신 프로토콜 상세는 fast-agent MCP 문서를 참고하면 됩니다.
  • // Node.js 예제 (agent.py 실행 및 결과 받기) const { exec } = require('child_process'); const userInput = "Hello, fast-agent!"; // 예시 입력 const cmd = `uv run agent.py --quiet --agent default --message "${userInput}"`; exec(cmd, (error, stdout, stderr) => { if (error) { console.error("에이전트 실행 오류:", error); return; } console.log("에이전트 응답:", stdout.trim()); });

6. 사용 방법 (Python FastAPI 예제)

Python 환경에서 fast-agent를 사용할 경우, FastAPI와 같은 웹 프레임워크에 통합하여 REST API 형태로 에이전트를 제공할 수 있습니다. 아래는 FastAPI 기반으로 간단한 예제를 구현한 것입니다. 사용자의 질문을 받아 OpenAI GPT-4 모델로 답변하는 에이전트를 FastAPI 엔드포인트로 노출하는 시나리오를 가정합니다:

  • 1) 설치 및 설정: Python 환경에 fast-agent-mcp를 설치하고 OpenAI API 키를 설정합니다 (예: OPENAI_API_KEY 환경변수). FastAPI 프레임워크도 pip install fastapi uvicorn 등으로 설치합니다.
  • 2) 에이전트 정의: FastAPI 앱 코드 내에서 fast-agent의 FastAgent 객체를 생성하고 에이전트 함수를 정의합니다. FastAPI의 비동기 라우트에서 이를 호출할 것이므로, 에이전트 함수도 async로 정의합니다. 예를 들어 main.py에 다음과 같이 작성합니다:위 코드에서 FastAgent("QnAAgent")로 에이전트 컨테이너를 생성하고, @fast.agent 데코레이터로 answer_question 함수를 에이전트로 등록했습니다. instruction에는 에이전트의 역할을 간단히 명시했습니다. answer_question 함수는 fast.run() 컨텍스트 내에서 agent.send(...)를 통해 query를 LLM에게 보내고 결과를 받아 리턴합니다 (Deploy and Run - fast-agent documentation) (Deploy and Run - fast-agent documentation). FastAPI 경로 POST /ask에서는 입력된 question을 받아서 해당 에이전트 함수를 호출하고, 결과를 JSON으로 응답합니다.
  • from fastapi import FastAPI import asyncio from mcp_agent.core.fastagent import FastAgent app = FastAPI() fast = FastAgent("QnAAgent") # 에이전트 정의: 질문을 받아 답변 생성 @fast.agent(instruction="You are a helpful Q&A assistant.") async def answer_question(query: str): # 에이전트 실행 컨텍스트 진입 async with fast.run() as agent: result = await agent.send(query) # 질문을 에이전트에 전달하고 응답 얻기 return result @app.post("/ask") async def ask(question: str): """질문을 받아 에이전트의 답변을 반환""" answer = await answer_question(question) return {"answer": answer}
  • 3) 실행 및 테스트: uvicorn 등을 통해 FastAPI 앱을 실행합니다:서버가 구동되면 /ask 엔드포인트에 POST 요청으로 {"question": "..."} 를 보내서 에이전트의 답변을 받을 수 있습니다. 예를 들어 {"question": "오늘 날씨가 어떤지 알려줘"}를 보내면, 백엔드에서 fast-agent가 OpenAI API를 호출해 답변을 생성하고, FastAPI가 {"answer": "..."} 형태로 응답을 반환합니다. 이처럼 비동기 함수 내에서 fast-agent 에이전트를 호출함으로써, 웹 API 레이어와 에이전트 로직이 자연스럽게 통합됩니다 (Deploy and Run - fast-agent documentation) (Deploy and Run - fast-agent documentation).
  • 추가 팁: fast-agent를 FastAPI 등 서버 환경에서 사용할 때에는, 이벤트 루프와 비동기 실행을 위해 uvicorn 실행이나 asyncio.run() 등을 사용해야 합니다. fast-agent의 FastAgent 객체와 에이전트 정의는 전역에 해두고, 요청마다 fast.run() 컨텍스트를 여는 방식이 권장됩니다. 또한 대화 문맥을 유지하는 에이전트의 경우 agent.send() 대신 agent.prompt()를 사용하여 대화를 이어갈 수도 있습니다. 더 복잡한 멀티에이전트 워크플로우는 여러 에이전트 함수를 정의하고 @fast.chain으로 연결한 뒤, 유사한 방식으로 FastAPI 경로에서 호출할 수 있습니다 (fast-agent/README.md at main · evalstate/fast-agent · GitHub) (fast-agent/README.md at main · evalstate/fast-agent · GitHub).
  • uvicorn main:app --reload

7. 참고 링크

 

반응형