| 기술 요소 | 설명 |
|---|---|
| Role Playing Prompting | AI가 특정 역할(예: 정책 분석가, 공약 해설가 등)을 수행하도록 유도하는 프롬프트 전략 |
| Prompt Chaining | 여러 개의 프롬프트를 순차적으로 연결하여 복잡한 질문에 단계별로 답변 생성 |
| Meta Prompt | 다양한 상황에 대응 가능한 일반화된 프롬프트 템플릿. 입력된 질문에 따라 조건이나 응답 방식이 유동적으로 달라짐 |
| RAG (Retrieval-Augmented Generation) | 질문에 답하기 위해 외부 지식(DB, 문서 등)을 먼저 검색(Retrieval)하고, 그걸 바탕으로 LLM이 답변을 생성 |
| ReAct / Function Calling | AI가 답을 직접 생성하기보다 도구를 호출해 필요한 작업을 수행하고, 결과를 기반으로 최종 답을 생성 (예: QA 체인 호출 도구) |
무엇이 다를까.
| 구분 | ReAct | Function Calling |
|---|---|---|
| 정의 | Reasoning + Acting의 약자로, AI가 스스로 생각(Reasoning)한 후 필요한 도구를 선택하여 사용하는 방식 | LLM이 외부 도구(API, 함수 등)를 호출해 결과를 받아오는 구조 |
| 초점 | 행동 결정 과정에 있음 (어떤 Tool을 언제, 왜 쓸지 결정) | 실행 실행 실행! – 결정된 도구를 정확히 호출하고 사용하는 능력 |
| 활용 예 | “검색이 필요하니 Tool X를 써야겠다” 판단 | 실제로 Tool_X.run(질문)을 호출해서 결과를 받음 |
| 사례 | AgentType = ZERO_SHOT_REACT_DESCRIPTION | OpenAI의 function_call, LangChain의 Tool 실행 등 |
| 항목 | FAISS | ChromaDB |
|---|---|---|
| 역할 | 벡터 검색 엔진 (고속 유사도 검색) | 벡터 DB + 메타데이터 관리 포함 |
| 설치/호환성 | 별도 설치 필요 (faiss-cpu, faiss-gpu) | 파이썬에서 pip로 간단히 설치 가능 |
| 속도/성능 | GPU 지원 가능, 대규모 검색에 강함 | CPU 환경에서도 빠르며, 소규모부터 중규모까지 효율적 |
| 메타데이터 관리 | 간단한 dict 정도만 가능 | 고급 필터링 및 조건 검색 가능 (where, filter) |
| 데이터 저장 | 디스크 저장은 수동 | Persistent 저장 기본 지원 (persist_directory) |
| LangChain 통합 | 초기부터 지원 | LangChain에서 최근 적극 지원 중 (검색 + 필터에 강함) |
| 검색 외 기능 | 없음 (전통적인 검색 라이브러리) | 벡터 기반 필터링, 문서 ID 관리, collection 단위 관리 등 가능 |
왜 바꿨을까? 메타데이터 필터링이 필요해졌기 때문
ChromaDB는 .as_retriever(search_kwargs={"filter": {...}}) 같은 조건 검색 가능
Chroma는 persist_directory 설정만 하면 자동 저장 + 재불러오기 가능으로 실험 시나 데모 개발 시 매우 편리함
FAISS는 OS, Python 버전, GPU 환경에 따라 충돌이 잦음
Chroma는 pure Python 기반이라 Colab, M1, Windows 등에서도 안정적으로 작동
LangChain은 현재 Chroma를 공식 예제의 기본 벡터 저장소로 자주 채택
community 문서, 챗봇 예제들도 Chroma 사용 빈도가 급증
FAISS와 Chroma 모두 RAG에서 벡터 기반 검색 기능은 동일하게 수행하지만,
Chroma는 실험, 확장성, 관리 측면에서 더 유연하고 쉬운 도구임.