dbt 설명서가 AI 에이전트의 실제 프롬프트입니다
요약
AI 에이전트가 회사 데이터를 정확히 쿼리하도록 구축한 MCP 서버 경험을 공유하며, dbt 문서 활용의 중요성을 강조합니다. 특히 모델 설명서 작성 시 첫 문장에 핵심 정보를 명시하고, AI에게 자동 설명을 맡기지 않으며, 필요한 레이어만 인덱싱하는 것이 에이전트 성능 향상에 결정적임을 제시합니다.
핵심 포인트
- 모델 설명은 첫 문장에 테이블의 정의와 단위(grain)를 명확히 기재해야 합니다.
- AI가 SQL 기반으로 설명을 자동 생성하게 두지 말고, 도메인 전문가가 작성해야 합니다.
- 쿼리할 핵심 비즈니스 레이어(core/mart)만 인덱싱하고 원본 데이터는 제외하는 것이 좋습니다.
- 청크 분할의 양보다 질이 중요하며, 설명(description)을 먼저 배치하는 방식이 효과적입니다.
저는 AI 에이전트가 회사 데이터를 찾고 쿼리할 수 있도록 MCP 서버를 구축했습니다. 제 시간 대부분은 서버 자체에 들어가지 않았습니다. 한 가지 질문에 집중되었습니다. 바로 '왜 에이전트가 잘못된 테이블을 선택하는가?' 하는 것이었습니다.
답변은 거의 항상 dbt 문서(dbt docs)와 관련되어 있습니다. 제가 배운 점들을 공유합니다.
1. 에이전트는 설명서의 시작 부분만 볼 수 있습니다
제가 dbt 모델을 검색용으로 인덱싱했을 때, 모든 내용을 임베딩할 수는 없었습니다. 긴 텍스트는 잘립니다. 따라서 모델 설명의 첫 번째 줄과 각 컬럼의 처음 두 문장만 계산됩니다.
그 이후 내용은 검색에 도달하지 못합니다. 즉, 이 테이블이 무엇인지, 어떤 단위(grain)로 되어 있는지, 그리고 무엇이 아닌지를 첫 번째 문장에 명시하세요. NULL 값도 마찬가지입니다. 만약 특정 이유로 컬럼이 NULL이라면, 첫 문장에서 언급해 주세요.
2. 모델로부터 YAML을 AI가 작성하게 두지 마세요
이것이 가장 큰 함정입니다. 모델이 300개나 있는데 시간이 없어서, SQL로부터 설명서를 작성하도록 AI에게 요청합니다.
그러면 user_id: Identifier of user. 같은 결과물을 얻게 됩니다.
이는 아무것도 알려주지 못합니다. 에이전트는 이미 컬럼 이름이 user_id라는 것을 볼 수 있습니다. 에이전트가 알아야 하는 것은 어떻게 사용해야 하는지입니다. 즉, 어떤 테이블과 조인할지, NULL일 수 있는지, 플레이어(player)를 의미하는지 아니면 계정(account)을 의미하는지, 그리고 다른 user_id 컬럼과 혼용해서는 안 되는지를 알아야 합니다.
모델을 읽는 AI는 모델의 내용을 반복할 뿐입니다. 그러면 에이전트는 그 텍스트를 읽고도 새로운 것을 배우지 못합니다. 당신은 루프에 빠집니다: 코드가 스스로에게 설명을 하는 것입니다. 설명서는 데이터가 어떻게 사용되는지 아는 사람으로부터 나와야 합니다.
3. 모든 테이블을 인덱스에 포함할 필요는 없습니다
같은 질문에 대해 다섯 개의 다른 테이블에서 답변할 수 있습니다. 원본 이벤트(Raw events), 스테이징 뷰(staging view), 정리된 모델(cleaned model), 마트(mart), 대시보드 테이블 등입니다. 만약 이 다섯 개가 모두 검색 가능하면, 에이전트는 그중 아무거나 하나를 선택하게 되고, 그중 일부는 다른 숫자를 제공합니다.
저는 인덱스에서 raw, monitoring 및 technical 스키마는 의도적으로 제외합니다. 에이전트는 사람들이 쿼리하기를 원하는 레이어, 즉 로직이 이미 결정된 core 및 mart 모델만 찾아야 합니다. 메달리온(medallion) 설정의 중간에 있는 정리되고 공유되는 레이어가 여기서 가장 중요합니다. 왜냐하면 비즈니스 정의가 살아있는 곳이기 때문입니다.
인덱스에 적을수록 잘못된 답변이 줄어듭니다.
4. 청크가 많다고 검색(recall)이 많은 것은 아니다
저는 넓은 테이블을 여러 개의 청크로 나누었고, 각 청크는 컬럼 그룹별로 구성했습니다. 224개의 실제 질문 세트에 대해 이 청크들은 상위 5개 결과의 33%를 차지했지만 정답률은 단지 6.6%에 불과했습니다. 이 청크들은 컬럼 이름만 가지고 컨텍스트가 없었기 때문에 모든 것에 매칭되었습니다.
테이블당 하나의 청크로 구성하고, 설명(description)을 먼저 배치하는 방식으로 수정하자 상황이 개선되었습니다. 적중률(Hit rate)은 0.879에서 0.893으로 상승했고, 관련 없는 테이블에서 발생하는 노이즈는 크게 감소했습니다 (한 질문 그룹에서 30개 → 9개).
5. 사용자가 실제로 보내는 것을 테스트하라
저의 터키어 테스트 점수는 영어 대비 0.52점으로 0.91점이었습니다. 그래서 로그를 확인해 보니, 에이전트가 도구(tool)를 호출하기 전에 질문을 매번 영어로 번역하고 있었습니다. 터키어 테스트는 아무도 하지 않는 것을 측정하고 있었습니다.
이는 AI 에이전트가 사용할 수 있는 데이터 플랫폼 운영에 관한 짧은 시리즈의 첫 번째 게시물이며, 따라서 전체 제품 팀이 분석가를 기다릴 필요 없이 언제든지 데이터 기반 결정을 내릴 수 있게 합니다.
다음 내용:
- AI 중심 데이터 플랫폼의 핵심 구성 요소와 이를 활용하여 전체 제품 팀이 매일 사용하는 방법
- 에이전트가 제공하는 결과물의 품질을 향상시키는 요령
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기