Firestarter 소개
Firestarter는 웹사이트에 대한 이해를 바탕으로 즉시 활용 가능한 AI 챗봇을 생성해주는 오픈소스 프로젝트입니다. 이 툴은 URL만 입력하면 웹사이트의 콘텐츠를 자동으로 크롤링하고, 의미 기반 검색이 가능한 벡터 인덱스로 저장한 뒤, OpenAI 호환 인터페이스를 제공하는 챗봇으로 변환해줍니다. 개발자에게는 이는 곧 자신만의 RAG 기반 챗봇을 몇 분 안에 손쉽게 구축할 수 있는 기회를 의미합니다.
RAG(Retrieval-Augmented Generation)는 기존의 LLM이 제공하지 못했던 외부 지식 활용의 가능성을 열어주는 접근 방식입니다. Firestarter는 Firecrawl, Upstash Search, Vercel AI SDK, OpenAI 등 최신 기술 스택을 기반으로 작동하며, 특히 개발자가 배포와 확장에 유리한 형태로 설계되어 있습니다. 이 프로젝트는 복잡한 프롬프트 엔지니어링과 인프라 세팅 없이도 AI 챗봇을 구축하고, 이를 API 형태로 다른 애플리케이션에서 사용할 수 있도록 구성되어 있습니다.
Firestarter의 장점은 단순한 챗봇 생성 도구를 넘어, 웹사이트 자체를 쿼리 가능한 데이터 소스로 활용할 수 있다는 점입니다. 예를 들어 기술 문서 페이지나 블로그를 대상으로 챗봇을 생성하면, 그 사이트의 내용에 기반해 정확하고 맥락 있는 응답을 생성해줄 수 있습니다. 이는 개발자 문서, 고객 지원, FAQ 시스템 등에 매우 유용하게 활용될 수 있습니다.
또한 오픈소스로 제공되어 직접 커스터마이징하거나 확장할 수 있으며, 다양한 LLM 공급자를 지원합니다. GPT-4o(OpenAI), Claude 3.5(Anthropic), Groq 등 다양한 모델을 환경변수 설정만으로 쉽게 교체할 수 있는 점도 매력적인 기능 중 하나입니다.
Firestarter는 단일 기능 챗봇 생성기를 넘어서 완전한 RAG 파이프라인을 포함한 플랫폼입니다. 비슷한 프로젝트로는 DocsGPT, LangChain, LlamaIndex 등이 있지만, Firestarter는 다음과 같은 차별점을 가집니다:
- 즉시 사용 가능: 복잡한 파이프라인 설정 없이 URL 입력만으로 작동.
- OpenAI 호환 API 제공: 생성된 챗봇을 OpenAI API 클라이언트와 동일한 방식으로 호출 가능.
- 프론트엔드 포함: Vercel AI SDK 기반 스트리밍 응답 인터페이스 제공.
- 다양한 LLM 지원: OpenAI, Anthropic, Groq 등을 유연하게 지원.
- 강력한 인덱싱: Firecrawl + Upstash Search 조합으로 정확하고 빠른 검색 성능 확보.
Firestarter의 작동 원리
웹사이트 인덱싱
Firestarter는 사용자가 URL을 입력하면 백엔드에서 다음 단계를 거쳐 데이터를 수집합니다.
- URL 제출:
/api/firestarter/create
엔드포인트를 통해 프론트엔드에서 URL을 제출합니다. - 웹 크롤링: Firecrawl API를 이용해 입력된 웹사이트의 페이지들을 Markdown 형식으로 수집합니다.
- 벡터 인덱싱: 수집된 Markdown 콘텐츠는 Upstash Search에 저장되며, 자동으로 청크 단위로 나뉘고 벡터로 임베딩됩니다.
- 네임스페이스 생성: 각 웹사이트는 고유한 네임스페이스를 부여받아 챗봇 간 데이터가 격리됩니다.
- 메타데이터 저장: Redis나 브라우저 저장소를 통해 URL, 아이콘, 제목 등의 정보가 저장됩니다.
질문 응답 (RAG 파이프라인)
생성된 챗봇은 다음과 같은 방식으로 질문에 응답합니다.
- 질문 입력: 사용자가 질문을 하면
/api/firestarter/query
엔드포인트로 전달됩니다. - 의미 기반 검색: Upstash Search에서 네임스페이스 내 의미적으로 가장 유사한 문서 청크를 찾습니다.
- 프롬프트 생성: 선택된 청크와 질문을 바탕으로 시스템 프롬프트를 생성하고 LLM에 전달합니다.
- 스트리밍 응답: Vercel AI SDK를 통해 생성된 응답을 실시간으로 프론트엔드에 전송합니다.
OpenAI 호환 API
Firestarter는 생성된 각 챗봇에 대해 OpenAI와 호환되는 API 엔드포인트를 제공합니다. 사용자는 다음 방식으로 API를 사용할 수 있습니다:
import OpenAI from 'openai';
const firestarter = new OpenAI({
apiKey: 'any_string', // 인증은 Firestarter 서버에서 처리
baseURL: 'https://your-firestarter-deployment.vercel.app/api/v1/chat/completions'
});
const completion = await firestarter.chat.completions.create({
model: 'firecrawl-example-com-12345',
messages: [{ role: 'user', content: 'What is Firecrawl?' }],
});
구성 및 설정
환경 변수 설정
다음 API 키가 필요합니다:
- Firecrawl: https://www.firecrawl.dev/app/api-keys
- Upstash: https://console.upstash.com
- OpenAI: https://platform.openai.com/api-keys
.env.local
예시:
FIRECRAWL_API_KEY=your_firecrawl_key
UPSTASH_SEARCH_REST_URL=your_upstash_search_url
UPSTASH_SEARCH_REST_TOKEN=your_upstash_search_token
OPENAI_API_KEY=your_openai_key
크롤링 제한 변경
firestarter.config.ts
파일에서 다음처럼 설정을 조정할 수 있습니다:
crawling: {
defaultLimit: 10,
maxLimit: 100,
minLimit: 10,
limitOptions: [10, 25, 50, 100],
}
LLM 우선순위 조정
기본 순서는 OpenAI → Anthropic → Groq
입니다. .env.local
에서 사용하고자 하는 LLM의 키만 설정하면 해당 순서에 따라 자동 선택됩니다. 원하는 우선순위를 적용하고 싶다면 firestarter.config.ts
의 getAIModel
함수를 수정하면 됩니다.
Firestarter 프로젝트 GitHub 저장소
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~