fenic은 LLM을 일회성 프롬프트가 아니라 DataFrame 연산자로 다루는 Python 쿼리 엔진이다. extract, classify, summarize, embed, semantic join 같은 연산을 select, filter, group_by, SQL과 함께 조합해 비정형 문서·로그·평가 trace를 typed row와 재실행 가능한 파이프라인으로 바꾼다.
왜 필요한가
AI 에이전트는 messy data를 빠르게 훑지만, 결과가 채팅 기록에만 남으면 다음 사람이 다시 추론해야 한다. fenic은 탐색 결과를 코드화된 파이프라인으로 남긴다. 행 단위 lineage, explain, 토큰·비용 메트릭, 캐싱을 제공하므로 사람이 검토하고 에이전트가 재사용할 수 있다.
핵심 기능
| 기능 | 설명 |
|---|---|
| 시맨틱 연산자 | 텍스트 추출, 분류, 요약, 임베딩, 자연어 조건 필터링 |
| DataFrame/SQL 조합 | 일반 DataFrame 연산과 SQL 안에서 LLM 연산을 함께 사용 |
| 추론 실행 엔진 | 자동 배칭, rate limit, retry, response cache, 비용 추적 |
| 문서 처리 | Markdown, JSON, transcript, PDF 경로를 테이블형 데이터로 변환 |
| 에이전트 지원 | fenic skill install로 Claude Code, Codex, Cursor 등에 API 사용법 주입 |
| MCP 노출 | catalog의 table/view/tool을 MCP 도구 표면으로 제공 |
설치와 기본 사용
pip install fenic
fenic skill install
fenic check pipeline.py간단한 흐름은 세 단계다. Session에 모델 프로파일을 설정하고, DataFrame에 semantic operator를 붙인 뒤, 결과를 table/view나 MCP tool로 승격한다.
잘 맞는 사용 사례
- LLM eval 분석: trace, tool call, judge note에서 실패 유형을 typed row로 추출하고 모델 버전별 회귀를 비교한다.
- 지원 티켓·CRM 분석: 정형 고객 메타데이터와 비정형 상담 기록을 의미 기반으로 join한다.
- 에이전트용 데이터 도구: 사람이 만든 검증된 query/view를 MCP 도구로 노출해 에이전트가 임의 SQL 대신 제한된 결과만 호출하게 한다.
차별점
| 접근 | 결과물 | 한계 |
|---|---|---|
| 프롬프트 분석 | 채팅 transcript | 재현과 검토가 어렵다 |
| 정규식/스크립트 | brittle code | 의미 기반 추출·분류가 어렵다 |
| fenic | typed, cached, inspectable pipeline | 모델 비용과 지연을 설계해야 한다 |
fenic의 강점은 LLM을 마법 함수로 숨기지 않는다는 점이다. 모델 출력은 여전히 확률적이지만, 그 주변의 파이프라인은 타입, lineage, 캐시, 비용 계측을 갖춘다.
관련 문서
- data-agent-correctness-layer — 데이터 에이전트 결정에 검증 계층을 두는 패턴
- mcp — 에이전트와 외부 시스템을 연결하는 표준 프로토콜
- llm-observability-tips-tools — LLM 앱 trace와 평가 도구 선택 기준
참고 자료
- typedef-ai/fenic — GitHub 공식 저장소