🤖
1400 in / 4388 out / 5788 total tokens
Simon Willison이 공개한 Datasette 플러그인 시리즈가 LLM 통합의 새로운 모범 사례를 보여준다. 단순한 API 래퍼가 아니라, 실제 데이터 파이프라인에 녹여낼 수 있는 실용적인 도구들이다. 게임 개발자로서 데이터 처리 워크플로우에 AI를 어떻게 끼워 넣을지 고민해볼 만한 좋은 참고다.
🔥 핫 토픽
datasette-extract 0.3a0: 비정형 데이터의 구조화
datasette-extract는 텍스트, 이미지, PDF 같은 비정형 데이터에서 구조화된 정보를 뽑아내는 플러그인이다. 핵심은 Claude 같은 LLM을 활용해 자연어 처리를 수행한다는 점이다. 예를 들어 고객 불만 접수 텍스트에서 '문제 유형', '심각도', '담당 부서' 같은 필드를 자동으로 추출해서 데이터베이스 컬럼으로 만들 수 있다.
이게 왜 중요하냐면, 전통적으로는 정규표현식이나 파서를 직접 짜야 했던 작업을 LLM 프롬프트 몇 줄로 대체할 수 있다는 거다. 물론 100% 정확하진 않지만, 프로토타이핑 단계에서나 80% 정확도로 빠르게 처리해야 하는 상황에는 충분히 쓸 만하다. 게임 서비스하면 유저 피드백 분석, 로그 메시지 분류, 인게임 채팅 모니터링 같은 곳에 응용할 수 있다.
기술적으로는 스키마를 JSON으로 정의하고, LLM에게 "이 형식으로 추출해라"라고 지시하는 방식이다. Structured Output이나 Function Calling과 유사한 패턴인데, Datasette 환경에 맞게 재구성한 셈이다. 0.3a0 버전에서 성능 개선과 함께 새로운 추출 패턴이 추가됐다고 한다.
출처: Simon Willison - datasette-extract 0.3a0
datasette-enrichments-llm 0.2a0: 데이터 풍부하게 만들기
앞서 언급한 extract가 "데이터에서 정보를 뽑는" 거라면, enrichments-llm은 반대다. 기존 데이터에 새로운 정보를 "더해주는" 플러그인이다. 예를 들어 상품 설명 텍스트가 있으면, LLM이 자동으로 감정 분석, 키워드 추출, 요약을 달아서 원본 테이블에 새 컬럼으로 추가한다.
이 패턴은 게임 개발에서도 유용하다. NPC 대사 데이터베이스가 있다고 치자. 각 대사에 '감정 태그', '긴급도', '관련 퀘스트' 같은 메타데이터를 LLM이 자동으로 붙여주면, 나중에 퀘스트 시스템에서 필터링하거나 우선순위를 매길 때 써먹을 수 있다. 수작업으로 태그 달던 걸 자동화하는 셈이다.
아키텍처 관점에서 주목할 점은 배치 처리 방식이다. 한 번에 모든 데이터를 처리하는 게 아니라, 점진적으로 enrichment를 수행할 수 있다. 대규모 데이터셋에서도 API 할당량이나 비용을 관리하면서 돌릴 수 있게 설계돼 있다. 서버 사이드 배치잡 생각하면 이해가 쉽다.
출처: Simon Willison - datasette-enrichments-llm 0.2a0
datasette-llm-usage 0.2a0: API 사용량 추적
LLM API 쓰다 보면 제일 신경 쓰이는 게 비용이다. datasette-llm-usage는 말 그대로 LLM 호출량을 추적하고 시각화해주는 플러그인이다. 어떤 모델을 얼마나 썼는지, 토큰 사용량은 어느 정도인지, 비용은 얼마나 나왔는지 한눈에 볼 수 있다.
개발자 입장에서 이런 모니터링 도구는 필수다. 클라우드 백엔드 쓰면 AWS Budgets나 GCP Cost Management가 있듯이, LLM 작업에도 동일한 원리가 적용된다. 특히 프로덕션에서 AI 기능을 돌릴 때는 예상치 못한 토큰 폭증을 잡아내는 게 중요하다. 프롬프트 루프 빠졌거나 사용자가 악의적으로 호출하는 경우를 감지할 수 있다.
0.2a0 버전에서는 대시보드 개선과 함께 알림 기능이 강화됐다고 한다. 특정 임계값을 넘으면 슬랙이나 이메일로 알림을 보낼 수 있는데, 이건 인프라 모니터링하고 똑같은 패턴이다. Prometheus + Grafana 스택을 LLM 비용에 맞게 축소한 느낌.
출처: Simon Willison - datasette-llm-usage 0.2a0
datasette-llm 0.1a5: Datasette 내 LLM 통합
datasette-llm은 이 모든 것의 기반이 되는 코어 플러그인이다. Datasette 환경에서 직접 LLM과 대화하거나, SQL 쿼리 결과를 LLM에 넘겨서 분석하거나, 반대로 자연어로 SQL을 생성하게 할 수도 있다. Claude, GPT-4, 로컬 모델까지 다양한 백엔드를 지원한다.
이게 흥미로운 이유는 데이터베이스와 AI의 경계를 허문다는 거다. 기존에는 DB는 DB고, AI는 별도 서비스였다. 근데 이 플러그인은 DB 쿼리 결과를 바로 LLM 컨텍스트로 넘길 수 있다. "이 테이블에서 이상치 찾아줘" 같은 요청을 SQL + LLM 조합으로 처리하는 게 가능해진다.
게임 개발에서 생각해보면, 게임 로그 DB에 붙여서 "어제 밤 10시부터 12시 사이에 접속자 수가 급증한 원인 분석해줘" 같은 질문을 던질 수 있다. LLM이 직접 SQL을 짜서 실행하고, 결과를 해석해서 자연어로 답해주는 식이다. 물론 프로덕션 DB에 바로 붙이는 건 위험하니까 읽기 전용 복제본이나 데이터 웨어하우스에 쓰는 게 현명하다.
출처: Simon Willison - datasette-llm 0.1a5
🧩 연결 고리와 시사점
이 4개 플러그인은 따로 쓸 수도 있지만, 같이 쓰면 시너지가 난다. datasette-llm으로 기반을 깔고, extract로 데이터를 정제하고, enrichments로 확장하고, usage로 비용을 관리하는 식이다. 마치 게임 엔진에서 코어 모듈 위에 각종 서브시스템을 얹는 구조랑 비슷하다.
Simon Willison이 보여주는 접근 방식은 "AI를 별도의 서비스가 아니라 기존 워크플로우에 통합한다"는 거다. 거창한 AI 플랫폼을 구축하는 게 아니라, 이미 쓰던 도구에 AI를 한 겹 입히는 것. 이게 개발자 입장에서 훨씬 접근하기 쉽고, 실제로도 더 유용하다.
아쉬운 점은 아직 alpha 버전이라는 거다. 프로덕션에서 쓰기에는 검증이 더 필요하다. 하지만 아이디어 자체는 충분히 벤치마킹할 만하다. 내 프로젝트에서도 비슷한 패턴으로 데이터 파이프라인에 Claude를 끼워 넣을 수 있을 거다.
LLM은 데이터베이스 위에 얹는 스마트 레이어다. 플러그인 아키텍처로 확장 가능하게.