팀리부뜨
경력근거: askyour.work, askyour.ai 등 생성형 AI 제품의 웹앱·모바일 앱을 직접 만들고 빠르게 출시합니다.
※ 실제 산출물이 아닌 AI 예측 시안입니다.
팀리부뜨는 'askyour.work, askyour.ai 등 생성형 AI 제품의 웹앱·모바일 앱을 직접 만들고 빠르게 출시합니다' 를 주요 업무 첫 줄로 적었고, 그 제품은 사용자가 올린 문서에서 요약본과 번역본을 만들어 문서함에 쌓아 둡니다. 원본이 여러 판으로 다시 올라오는 문서함에서는 결과물이 어느 판에서 나왔는지가 곧 그 결과물을 믿을 수 있는지의 문제이고, 이 화면은 공고가 적은 'React/TypeScript 기반의 사용자 경험' 으로 그 판단을 담당자에게 넘겨 줍니다. 문서 관리와 협업 도구 도메인 전문성은 주장하지 않습니다. 실제 결과물 종류와 파일 이름 규칙은 팀리부뜨 문서함의 실제 사용 기록이 있어야 정해집니다.
주요 업무 첫 줄이 'askyour.work, askyour.ai 등 생성형 AI 제품의 웹앱·모바일 앱을 직접 만들고 빠르게 출시합니다' 입니다. 문서함에 쌓인 결과물을 담당자가 확인하는 화면은 그 제품 안에서 바로 붙는 자리입니다.
주요 업무가 'React/TypeScript 기반의 사용자 경험을 끝까지 책임지고, 모바일 앱까지 영역을 확장합니다' 를 지목합니다. 판정 사유마다 갈라지는 목록 화면과 3주차 모바일 화면이 그 스택으로 만드는 결과물입니다.
'Claude, OpenAI, Gemini 등 LLM을 제품의 핵심으로 다루며, AI 경험을 사용자 친화적인 UI/UX로 설계·구현합니다' 가 자격 요건에 있습니다. 모델이 만든 요약본을 사람이 믿고 쓰려면 그 요약본이 어느 판에서 나왔는지 화면이 말해 주어야 합니다.
문서함 목록과 결과물 목록을 원문 그대로 받습니다. 파일 이름에서 확장자를 떼고 판을 뜻하는 낱말과 이름 끝 괄호 안 숫자, 영문자 v 뒤에 이어진 숫자, 여덟 자리 날짜 숫자를 패턴으로 지워 같은 원본의 계보를 세우고, 계보 안에서 올린 시각으로 판 순서를 매긴 다음, 결과물이 가리키는 원본이 그 순서의 어디에 있는지를 사유마다 갈라 냅니다. 무엇이 어느 사유인지는 이름 파싱과 시각 비교 규칙이 정하고, Claude 는 어느 판에서 나온 결과물이고 그 뒤에 무엇이 다시 올라왔는지를 담당자가 읽을 카드 설명 한 문장으로 적습니다.
askyour.work(AU.W) 문서함에 회의록 요약본과 번역본을 쌓아 두고 쓰는 팀의 문서 담당자입니다. 같은 회의록이 '최종'·'진짜최종'·'(2)' 같은 이름으로 여러 번 올라오는데, 요약본이 그중 어느 판에서 나왔는지는 파일 올린 시각과 요약 만든 시각을 하나씩 맞춰 봐야 아는 자리에 있습니다.
파일 이름에 남은 판 표기를 규칙으로 떼면 흩어져 보이던 원본이 같은 계보로 서고, 그 계보의 올린 시각과 결과물이 가리키는 원본을 견주면 요약본이 어느 판에서 나왔는지 정해집니다.
문서함 목록과 결과물 목록을 올리면 파일 이름에서 판 표기를 떼어 같은 원본의 계보를 세우고, 결과물마다 어느 판에서 나왔는지 다섯 사유로 나눠 보여주는 화면입니다. askyour.work 연동 없이 문서함 화면에서 내려받은 목록 CSV 두 장을 입력으로 삼습니다.
문서 담당자 2명이 같은 목록을 손으로 묶은 결과와 도구가 묶은 계보가 얼마나 겹치는지 일치도로 적습니다. 판 표기 토큰과 날짜 규칙은 화면에서 고칠 수 있고, 고친 규칙으로 같은 목록을 다시 돌려 계보가 어디서 갈라지는지 봅니다. 운영 환경은 이 주차부터 AWS 입니다.
옛 판에서 나온 결과물과 결과물이 없는 새 판을 한 목록으로 모아 다시 만들 대상을 자동으로 한 번 뽑고, 같은 판정 API 로 폰에서 그 목록을 확인하는 React Native 화면을 붙입니다.
문서 담당자가 문서함 목록과 결과물 목록을 올리면 결과물마다 어느 판에서 나왔는지 몇 초 안에 나옵니다.
판 표기가 두 개 겹친 이름과 올린 사람 칸이 비어 있는 기록 30종을 섞어도 계보 묶음과 사유가 끊기지 않습니다.
판정 카드가 인용한 값이 문서함 행·결과물 행에 실재하는 비율 100%. 실재하지 않으면 그 카드를 화면에서 막습니다
측정: 근거 대조 규칙, 표본: 판정 45건
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 작성자가 만든 더미데이터 자가채점이며, 실제 계보 판정 정확도는 팀리부뜨 문서함 실데이터와 문서 담당자가 있어야 잽니다. 이 포트폴리오는 그 측정을 바로 돌릴 수 있는 상태까지 만듭니다.
수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실측 준비 상태로 솔직히 설명합니다.
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 판 표기가 두 개 겹친 이름, 올린 사람이 비어 있는 행, 원본 하나에서 세 번 만들어진 요약본 같은 결측·악성·경계 케이스를 더미에 일부러 섞어 쉬운 문제만 푸는 게 아님을 보입니다.
문서함·요약본 같은 기능 이름은 askyour.work 의 공개된 화면과 기능 소개에서 데이터 모양을 미루어 본 것이고, 팀리부뜨 제품 내부의 저장 구조를 본 것이 아닙니다. 실제 컬럼 이름과 결과물 종류는 문서함 스키마를 받아 다시 맞춰야 합니다.
이 포트폴리오가 보여주는 것은 파일 이름 파싱 규칙과 계보 판정, 그리고 화면 구현입니다. 문서 관리와 협업 도구 도메인 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
판 표기를 떼는 선은 회사마다 다릅니다. 이 도구는 이름 끝 여덟 자리 날짜를 저장 시각으로 보고 떼지만 네 자리 숫자는 회의 날짜로 보고 남기는데, 그 선을 어디에 그을지는 문서함 운영 규칙을 보고 다시 정해야 합니다.
같은 계보로 묶였다는 판정이 두 문서의 내용이 이어진다는 뜻은 아닙니다. 이 화면은 이름과 올린 시각까지만 말하고 본문이 얼마나 달라졌는지는 다루지 않습니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
문서함에 올라온 원본 목록입니다. 같은 문서가 판 표기만 바꿔 여러 번 올라오고, 일괄 이관으로 들어온 행은 올린 사람 칸이 비어 있습니다. 계보 이름은 여기 담기지 않고 파일 이름을 파서가 읽어 만듭니다
| doc_id | filename | uploaded_at | uploaded_by | folder |
|---|---|---|---|---|
| DOC-9840 | 사업계획서_2026.docx | 2026-08-01T09:00:00 | 이하늘 | 팀 문서함/경영 |
| DOC-9845 | 사업계획서_2026_최종.docx | 2026-08-02T14:10:00 | 이하늘 | 팀 문서함/경영 |
| DOC-9850 | 회의록_최종.docx | 2026-08-03T10:20:00 | — | 팀 문서함/회의 |
| DOC-9857 | 회의록_진짜최종(2).docx | 2026-08-04T18:55:00 | 이하늘 | 팀 문서함/회의 |
| DOC-9866 | 온보딩 가이드 v1.docx | 2026-08-08T09:00:00 | — | 팀 문서함/인사 |
{"type":"object","properties":{"doc_id":{"type":"string"},"filename":{"type":"string"},"uploaded_at":{"type":"string"},"uploaded_by":{"type":["string","null"]},"folder":{"type":"string"}},"required":["doc_id","filename","uploaded_at","uploaded_by","folder"]} 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: 같은 원본을 '회의록_최종.docx'·'회의록_진짜최종(2).docx' 처럼 판 표기만 바꿔 다시 올린 행, '온보딩 가이드 v2 사본.docx' 처럼 판 표기가 두 개 겹친 행, '계약검토_초안_20260812.docx' 처럼 이름 끝에 여덟 자리 날짜를 붙여 다시 올린 행, '주간회의_0817.docx' 와 '주간회의_0824.docx' 처럼 네 자리 숫자가 서로 다른 회의를 가리켜 계보가 갈라져야 하는 행, 일괄 이관으로 uploaded_by 가 null 인 행, 판 표기가 하나도 없어 한 판으로 끝나는 행. 형식 깨뜨리기 시도 3건도 별도로 만들어라.{"type":"object","properties":{"doc_id":{"type":"string"},"filename":{"type":"string"},"uploaded_at":{"type":"string"},"uploaded_by":{"type":["string","null"]},"folder":{"type":"string"}},"required":["doc_id","filename","uploaded_at","uploaded_by","folder"]}원본에서 만들어진 요약본과 번역본 목록입니다. 요약본 행은 target_lang 이 비어 있고, 원본이 문서함에서 지워진 뒤에도 결과물 행은 그대로 남습니다. 어느 판에서 나왔는지는 여기 적혀 있지 않고 원본 목록과 견줘 계산합니다
| result_id | source_doc_id | kind | target_lang | created_at |
|---|---|---|---|---|
| SUM-4340 | DOC-9845 | 요약본 | — | 2026-08-02T14:35:00 |
| SUM-4351 | DOC-9850 | 요약본 | — | 2026-08-03T10:44:00 |
| TRN-4358 | DOC-9857 | 번역본 | en | 2026-08-05T09:10:00 |
| TRN-4370 | DOC-9702 | 번역본 | en | 2026-08-05T18:20:00 |
| SUM-4372 | DOC-9878 | 요약본 | — | 2026-08-11T10:05:00 |
{"type":"object","properties":{"result_id":{"type":"string"},"source_doc_id":{"type":"string"},"kind":{"type":"string","enum":["요약본","번역본"]},"target_lang":{"type":["string","null"]},"created_at":{"type":"string"}},"required":["result_id","source_doc_id","kind","target_lang","created_at"]} 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: 같은 source_doc_id 와 같은 kind 로 몇 분 사이에 두세 번 만들어진 행, documents 에 남아 있지 않은 source_doc_id 를 가리키는 행, kind 가 요약본이라 target_lang 이 null 인 행과 번역본이라 target_lang 이 채워진 행, 원본보다 며칠 늦게 만들어진 행, 한 원본에 요약본과 번역본이 한 건씩 있는 행. 형식 깨뜨리기 시도 3건도 별도로 만들어라.{"type":"object","properties":{"result_id":{"type":"string"},"source_doc_id":{"type":"string"},"kind":{"type":"string","enum":["요약본","번역본"]},"target_lang":{"type":["string","null"]},"created_at":{"type":"string"}},"required":["result_id","source_doc_id","kind","target_lang","created_at"]}| TypeScript | 판정 다섯 사유와 파일 이름 파싱 단계를 타입으로 묶어, 스키마를 벗어난 판정 카드가 화면까지 가지 못하게 합니다 |
| React | 사유별로 나눈 결과물 목록과 계보 상세를 그립니다 |
| React Native | 3주차에 다시 만들 목록을 폰에서 확인하는 화면을 같은 판정 API 로 붙입니다 |
| AWS | 2주차부터 판정 API 와 화면을 함께 올려 문서 담당자가 사내에서 접속합니다 |
| Docker | 파서와 규칙 엔진을 이미지 하나로 굳혀 어느 환경에서 돌려도 계보가 같게 묶이게 합니다 |
| LLM | 규칙이 정한 사유와 판 이름을 담당자가 읽을 카드 설명 한 문장으로 적습니다 |
| Claude | 카드 설명을 쓰는 기본 모델이고, 넘기는 시점에는 사유와 판 순서가 이미 정해져 있습니다 |
| OpenAI | 같은 카드를 GPT 계열로도 돌려 설명 문장의 길이와 말투가 화면에서 어떻게 달라지는지 견줍니다 |
| Gemini | 판이 열 개 넘게 쌓인 계보처럼 카드가 길어질 때 응답 시간을 재는 비교 대상입니다 |
✓ pass → 이 상태로 제출해도 됩니다. 더 키우려면 2주차 규칙 편집과 사람 묶음 대조로 갑니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 3주차 다시 만들 목록으로 갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · result_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
from_latest_source최신판에서 생성from_outdated_source옛 판에서 생성source_deleted원본 없음latest_source_unprocessed새 판 결과물 없음duplicate_results중복 생성결과물 하나의 계보 판정 카드입니다. 판정 사유와 계보 이름·판 수, 그 판정에 쓰인 근거 값을 담습니다. 가장 늦은 판에 결과물이 없는 계보는 원본 쪽을 가리키는 카드 한 장으로 나옵니다
{"type":"object","properties":{"result_id":{"type":["string","null"],"description":"판정 대상 결과물 번호입니다. 결과물이 없는 새 판을 알리는 카드에서는 null 입니다."},"doc_id":{"type":"string","description":"그 결과물이 가리키는 원본 번호이고, 결과물이 없는 새 판 카드에서는 계보에서 가장 늦게 올라온 원본 번호입니다."},"lineage_key":{"type":["string","null"],"description":"filename 에서 확장자와 판 표기를 떼고 공백과 구분 기호를 지운 뒤 소문자로 맞춘 계보 이름입니다. 떼는 판 표기는 판을 뜻하는 낱말(최종·진짜최종·사본이 그 예입니다), 이름 끝 괄호 안 숫자, 영문자 v 뒤에 숫자가 이어진 토막, 여덟 자리로 이어진 날짜 숫자 네 가지입니다. 네 자리 숫자는 이름의 일부로 두어 떼지 않습니다."},"lineage_version_count":{"type":["integer","null"],"description":"lineage_key 가 같은 documents 행의 수, 곧 그 계보에 쌓인 판의 수입니다."},"source_uploaded_at":{"type":["string","null"],"description":"결과물이 가리키는 원본의 uploaded_at 입니다."},"latest_doc_id":{"type":["string","null"],"description":"그 계보에서 uploaded_at 이 가장 늦은 원본의 doc_id 입니다."},"latest_uploaded_at":{"type":["string","null"],"description":"그 계보에서 가장 늦은 uploaded_at 입니다."},"verdict":{"type":"string","enum":["from_latest_source","from_outdated_source","source_deleted","latest_source_unprocessed","duplicate_results"]},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":["string","number","boolean","null"]},"agg":{"type":"string","enum":["count","sum","avg","min","max"]}},"required":["field","value"]}},"summary":{"type":"string"}},"required":["result_id","doc_id","lineage_key","lineage_version_count","source_uploaded_at","latest_doc_id","latest_uploaded_at","verdict","evidence","summary"]}[
{
"result_id": "SUM-4412",
"doc_id": "DOC-9915",
"lineage_key": "주간회의0817",
"lineage_version_count": 3,
"source_uploaded_at": "2026-08-19T14:40:00",
"latest_doc_id": "DOC-9915",
"latest_uploaded_at": "2026-08-19T14:40:00",
"verdict": "from_latest_source",
"evidence": [
{
"field": "result_id",
"value": "SUM-4412"
},
{
"field": "source_doc_id",
"value": "DOC-9915"
},
{
"field": "filename",
"value": "주간회의_0817_진짜최종(2).docx"
},
{
"field": "uploaded_at",
"value": "2026-08-19T14:40:00"
},
{
"field": "doc_id",
"value": 3,
"agg": "count"
}
],
"summary": "주간회의_0817 계보에는 원본이 세 판 있고 이 요약본은 그중 가장 늦게 올라온 진짜최종(2) 판에서 나왔습니다."
},
{
"result_id": "SUM-4372",
"doc_id": "DOC-9878",
"lineage_key": "온보딩가이드",
"lineage_version_count": 3,
"source_uploaded_at": "2026-08-11T09:45:00",
"latest_doc_id": "DOC-9878",
"latest_uploaded_at": "2026-08-11T09:45:00",
"verdict": "from_latest_source",
"evidence": [
{
"field": "result_id",
"value": "SUM-4372"
},
{
"field": "source_doc_id",
"value": "DOC-9878"
},
{
"field": "filename",
"value": "온보딩 가이드 v2 사본.docx"
},
{
"field": "uploaded_at",
"value": "2026-08-11T09:45:00"
},
{
"field": "doc_id",
"value": 3,
"agg": "count"
}
],
"summary": "온보딩 가이드는 v1·v2·v2 사본이 한 계보로 묶이고, 이름만 보면 곁가지 같은 사본 판이 실제로는 가장 늦게 올라온 원본이라 이 요약본은 최신판에서 나온 것입니다."
},
{
"result_id": "SUM-4389",
"doc_id": "DOC-9880",
"lineage_key": "계약검토초안",
"lineage_version_count": 2,
"source_uploaded_at": "2026-08-12T10:00:00",
"latest_doc_id": "DOC-9893",
"latest_uploaded_at": "2026-08-16T16:22:00",
"verdict": "from_outdated_source",
"evidence": [
{
"field": "result_id",
"value": "SUM-4389"
},
{
"field": "source_doc_id",
"value": "DOC-9880"
},
{
"field": "uploaded_at",
"value": "2026-08-12T10:00:00"
},
{
"field": "doc_id",
"value": "DOC-9893"
},
{
"field": "uploaded_at",
"value": "2026-08-16T16:22:00"
}
],
"summary": "계약검토_초안 은 파일 이름 끝 날짜만 다른 두 판이 한 계보이고, 이 요약본이 나온 8월 12일 판 뒤에 8월 16일 판이 다시 올라왔습니다."
},
{
"result_id": "SUM-4421",
"doc_id": "DOC-9918",
"lineage_key": "주간회의0824",
"lineage_version_count": 2,
"source_uploaded_at": "2026-08-24T09:30:00",
"latest_doc_id": "DOC-9921",
"latest_uploaded_at": "2026-08-25T10:15:00",
"verdict": "from_outdated_source",
"evidence": [
{
"field": "result_id",
"value": "SUM-4421"
},
{
"field": "source_doc_id",
"value": "DOC-9918"
},
{
"field": "filename",
"value": "주간회의_0824.docx"
},
{
"field": "uploaded_at",
"value": "2026-08-24T09:30:00"
},
{
"field": "doc_id",
"value": "DOC-9921"
},
{
"field": "uploaded_at",
"value": "2026-08-25T10:15:00"
}
],
"summary": "주간회의_0824 는 이름 끝 네 자리가 회의 날짜라 주간회의_0817 과 다른 계보로 서고, 이 요약본은 그 계보의 첫 판에서 나와 다음 날 올라온 최종 판을 담지 못했습니다."
},
{
"result_id": "TRN-4370",
"doc_id": "DOC-9702",
"lineage_key": null,
"lineage_version_count": null,
"source_uploaded_at": null,
"latest_doc_id": null,
"latest_uploaded_at": null,
"verdict": "source_deleted",
"evidence": [
{
"field": "result_id",
"value": "TRN-4370"
},
{
"field": "source_doc_id",
"value": "DOC-9702"
},
{
"field": "kind",
"value": "번역본"
},
{
"field": "target_lang",
"value": "en"
},
{
"field": "doc_id",
"value": 0,
"agg": "count"
}
],
"summary": "이 번역본이 가리키는 원본 DOC-9702 이 문서함에 남아 있지 않아 계보를 세울 수 없고 번역본만 문서함에 떠 있습니다."
},
{
"result_id": null,
"doc_id": "DOC-9921",
"lineage_key": "주간회의0824",
"lineage_version_count": 2,
"source_uploaded_at": null,
"latest_doc_id": "DOC-9921",
"latest_uploaded_at": "2026-08-25T10:15:00",
"verdict": "latest_source_unprocessed",
"evidence": [
{
"field": "doc_id",
"value": "DOC-9921"
},
{
"field": "filename",
"value": "주간회의_0824_최종.docx"
},
{
"field": "uploaded_at",
"value": "2026-08-25T10:15:00"
},
{
"field": "doc_id",
"value": 2,
"agg": "count"
},
{
"field": "result_id",
"value": 0,
"agg": "count"
}
],
"summary": "주간회의_0824 계보에서 가장 늦게 올라온 최종 판에는 요약본도 번역본도 없어 담당자가 보는 것은 아직 첫 판 요약뿐입니다."
},
{
"result_id": "SUM-4396",
"doc_id": "DOC-9887",
"lineage_key": "제품기획서",
"lineage_version_count": 1,
"source_uploaded_at": "2026-08-14T13:05:00",
"latest_doc_id": "DOC-9887",
"latest_uploaded_at": "2026-08-14T13:05:00",
"verdict": "duplicate_results",
"evidence": [
{
"field": "result_id",
"value": "SUM-4396"
},
{
"field": "source_doc_id",
"value": "DOC-9887"
},
{
"field": "kind",
"value": "요약본"
},
{
"field": "created_at",
"value": "2026-08-15T09:10:00"
},
{
"field": "result_id",
"value": 3,
"agg": "count"
}
],
"summary": "제품기획서 원본 하나에 요약본이 세 건 만들어져 있어 담당자가 어느 것을 회의에 들고 갈지 골라야 합니다."
}
][자동 검증 · 매 실행] 1. verdict 가 from_latest_source·from_outdated_source·source_deleted·latest_source_unprocessed·duplicate_results 다섯 값 안에 있는지 봅니다. 2. result_id·doc_id·lineage_key·lineage_version_count·source_uploaded_at·latest_doc_id·latest_uploaded_at·verdict·evidence·summary 가 모든 카드에 있는지 봅니다. 3. lineage_key 를 filename 에서 다시 계산해 값이 같은지 봅니다. 확장자를 뗀 뒤 판 표기를 패턴으로 지웁니다. 지우는 대상은 판을 뜻하는 낱말(최종·진짜최종·사본이 그 예입니다), 이름 끝 괄호 안 숫자, 영문자 v 뒤에 숫자가 이어진 토막(v1·v2·v10 이 모두 여기 걸립니다), 여덟 자리로 이어진 날짜 숫자 네 가지입니다. 괄호 안에 든 것은 예시이고 판정은 패턴이 정합니다. 네 자리 숫자는 회의 날짜처럼 이름의 일부라 지우지 않습니다. 남은 글자에서 공백과 구분 기호를 없애고 소문자로 맞춥니다. 4. lineage_version_count 를 lineage_key 가 같은 documents 행 수로, latest_uploaded_at 을 그 행들의 가장 늦은 uploaded_at 으로 다시 계산해 값이 같은지 봅니다. 5. 한 결과물이 여러 사유에 걸리면 source_deleted·duplicate_results·from_outdated_source 순으로 먼저 걸리는 값 하나만 답니다. 앞에서 걸린 결과물은 뒤 사유로 가지 않으므로, 옛 판에서 요약본이 두 번 만들어진 계보는 duplicate_results 로 가면서 from_outdated_source 집계에서 빠지고 화면 머리말의 옛 판 건수가 실제보다 적게 나옵니다. 그 계보의 가장 늦은 판에 결과물이 없으면 latest_source_unprocessed 카드가 따로 서서 사실이 화면에 남지만, 가장 늦은 판에 결과물이 있으면 옛 판이라는 사실은 중복 생성 무리 안에서만 보입니다. generated_docs.source_doc_id 와 같은 값이 documents.doc_id 에 한 행도 없으면 verdict 는 source_deleted 인지 봅니다. 6. source_doc_id 와 kind 가 같은 generated_docs 행이 둘 이상이면 그 행들의 verdict 는 duplicate_results 인지 봅니다. 7. source_uploaded_at 보다 늦은 uploaded_at 을 가진 원본이 같은 lineage_key 에 있으면 verdict 는 from_outdated_source 이고, 없으면 from_latest_source 인지 봅니다. 8. 계보에서 uploaded_at 이 가장 늦은 원본의 doc_id 를 source_doc_id 로 삼은 결과물이 한 건도 없으면 그 계보에 verdict 가 latest_source_unprocessed 인 카드가 한 장 서는지 봅니다. 다만 그 카드의 result_id 는 가리킬 결과물이 없어 null 입니다. 9. generated_docs.created_at 이 그 결과물이 가리키는 원본의 uploaded_at 보다 이른 행은 결과물이 원본보다 먼저 만들어졌다는 뜻이라 시각이 뒤집힌 데이터 오류로 보고 판정에서 뺍니다. 사유를 달지 않고 카드도 만들지 않으며, 몇 건을 뺐는지만 화면 아래 안내 줄에 건수로 남겨 담당자가 원본 시각을 확인하게 둡니다. 가리키는 원본이 문서함에 없는 결과물은 견줄 uploaded_at 이 없어 이 비교를 건너뛰고 source_deleted 로 갑니다. 10. evidence 의 field 가 documents·generated_docs 의 컬럼에 실재하는지 봅니다. 11. agg 가 없는 evidence 의 value 가 그 컬럼에 수록된 행의 원문 값과 같은지 봅니다. 여러 행에서 센 수치는 agg 에 count 를 적습니다. 12. summary 가 존댓말 한 문장으로 끝나는지 봅니다. [평가 러너 · 2주차] 문서 담당자 2명이 손으로 묶은 계보와 도구가 묶은 계보의 일치도(Cohen's κ: 우연히 맞은 몫을 뺀 일치 정도, 0~1)를 잽니다. [수동 검증 · 사람이 봅니다] 1. 판 표기처럼 보이는 낱말이 실제로는 문서 이름인 경우(사본 관리대장 같은 이름)를 표본 20건 눈으로 확인합니다. 2. 옛 판 요약본을 지울지 새 판으로 다시 만들지는 문서 담당자가 정합니다.
근거: askyour.work, askyour.ai 등 생성형 AI 제품의 웹앱·모바일 앱을 직접 만들고 빠르게 출시합니다.