모두의포트폴리오
PE · FDE 직군을 위한 포트폴리오 밀키트
예전 판입니다 (1판)이 문서는 2026-08-02 에 새 판으로 개정됐습니다. PE 인데 고객사 파견 시점으로 쓰였던 것을 자사 제품 사용자 시점으로 옮기고, 사람이 근거를 고르고 고쳐야 답변 카드가 저장되는 제품 화면으로 다시 세웠습니다.최신 판 보기 →
인턴·신입제르코닉스 · [제르코닉스] AI 프로덕트 엔지니어 (정규직 전환형 인턴)

고객사 지침 문서를 올리면 근거 문단 인용과 함께 답해주는 문서 Q&A 콘솔

제르코닉스 공고에서 뽑은 세 가지 시그널.

주요 업무의 'RAG, Agent, LLM 파이프라인 설계 및 구현' 과 우대요건의 Hybrid RAG·LangChain·LangGraph 가 이 콘솔의 골조 그대로이고, '고객사 팀에 직접 투입해 AI 전환 실행 지원' 이라는 AX 프로젝트 상황이 이 도구의 사용 장면입니다. 우대요건의 기업 환경 컨설팅 경험을 존중해 더미 문서 테마만 환경 지침으로 골랐습니다. 이 포트폴리오가 입증하는 것은 Hybrid RAG 검색과 인용 검증 파이프라인 구현이며, 환경 규제·컨설팅 전문성은 주장하지 않습니다. 문서 내용은 가상 지침이고 규제 해석은 컨설턴트의 영역이라고 면접에서 밝힙니다.

01

RAG·Agent·LLM 파이프라인이 명시 업무

공고가 RAG, Agent, LLM 파이프라인 설계·구현을 주요 업무로 명시합니다. 검색부터 인용 검증까지 이어지는 이 콘솔의 파이프라인이 그 업무의 실물 증거가 됩니다.

RAGAgentLLM 파이프라인
02

Hybrid RAG·LangGraph 우대와 정면 일치

우대요건의 Hybrid RAG 와 LangChain·LangGraph 를 그대로 골조로 씁니다. 키워드 검색과 벡터 검색을 합치고 LangGraph 로 검색·답변·검증 단계를 잇습니다.

Hybrid RAGLangChainLangGraph
03

고객사 투입형 AX 프로젝트

공고가 고객사 팀에 직접 투입돼 AI 전환을 실행 지원한다고 밝힙니다. 고객사 문서를 받아 하루 안에 Q&A 콘솔을 세우는 이 구성이 그 투입 상황의 시작 산출물과 같은 모양입니다.

AX 프로젝트고객사AI 전환

포트폴리오 요약

고객사 사내 지침 문서(폐기물 분리배출 지침·에너지 사용 보고 절차 같은 환경 컨설팅 테마의 더미 문서)를 적재하면, 질문에 대해 키워드(BM25)와 벡터 검색을 합친 Hybrid RAG 로 근거 문단을 찾아 인용과 함께 답하는 Q&A 콘솔입니다. 문서에 근거가 없으면 지어내지 않고 없다고 답하는 것까지가 제품 범위입니다.

고객 정의

고객사에서 지침이 어디 적혀 있는지 물어볼 때마다 문서 폴더를 열어 Ctrl+F 를 반복하던 컨설팅 실무자입니다. 답과 함께 어느 문서 몇 번째 문단인지 바로 확인하고, 문서에 없는 질문에는 없다고 정직하게 알려주는 창구를 원하는 사람입니다.

고민 지점

키워드 검색과 벡터 검색을 합치면 용어가 정확한 질문(조항 이름)과 두루뭉술한 질문(이거 어떻게 버려요) 모두에서 근거 문단 적중이 안정되고, 인용 검증을 강제하면 인턴이 만든 콘솔도 고객사 앞에 세울 신뢰 수준이 됩니다.

주차별 일정

1주차여기까지로 완성

질문을 넣으면 근거 문단 인용이 달린 답이 나온다

더미 지침 문서 10건을 적재하고, FastAPI API 와 간단한 웹 화면에서 질문 입력부터 인용 검증을 통과한 답변까지 도는 완결품입니다. 문서에 없는 질문에는 근거 없음으로 답합니다.

  1. 1일 · 환경 지침 테마 더미 문서 10건과 질문·정답 골든셋(답 없는 질문 포함)을 만듭니다
  2. 2-3일 · 청킹·임베딩과 BM25 를 합친 Hybrid 검색을 만들어 문단 단위로 반환합니다
  3. 4-5일 · LangGraph 로 검색·답변·인용 검증 노드를 잇고 근거 없음 분기를 답니다
  4. 6-7일 · FastAPI 와 웹 화면을 붙여 질문부터 인용 하이라이트까지 완결 시연을 준비합니다
2주차선택 성장

검색이 실제로 맞았는지 정답셋으로 채점한다

질문·정답 문단 골든셋 30건 대비 검색 적중률과 무근거 질문 거절률을 잰 자가채점 리포트, 그리고 키워드·벡터·Hybrid 세 방식의 비교표가 남은 상태입니다.

  1. 8-10일 · 골든셋 30건으로 검색 적중률·거절률을 채점하고 키워드·벡터·Hybrid 를 비교합니다
  2. 11-12일 · ChatGPT 로 만든 질문 변형 세트로 강건성을 재고 실패 사례를 기록합니다
3주차선택 성장

LangGraph 단계를 늘려 재질의와 교차 점검을 붙인다

검색 결과가 빈약할 때 질문을 바꿔 다시 검색하는 재질의 노드와, 답변·인용 불일치를 잡는 검증 노드가 LangGraph 그래프에 붙어 실패 케이스 처리까지 보여주는 상태입니다.

  1. 15-18일 · 재질의 노드와 Gemini 교차 점검 표본을 붙여 실패 케이스 처리를 보강합니다

데모 · 측정 지표

01

지침 문서를 적재하고 질문을 넣으면 근거 문단 인용이 달린 답이 나오는 흐름을 시연합니다(더미 문서 10건·질문 10종 기준).

02

답변의 모든 인용이 검색 문단의 실제 문장 조각인지 자동 검사로 전수 확인하고, 문서에 근거 없는 질문 5종을 전부 근거 없음으로 거절하는 것을 보여줍니다(자동 채점).

03

오타 질문·말바꿈 질문·두 문서가 상충하는 질문 같은 하드 케이스 20종에서도 출력 형식이 깨지지 않습니다.

정직 경계선

진짜 성능 검증은 여기서 멈춥니다

위 수치는 문서와 정답을 작성자가 만든 더미 자가채점이라 성능 증명이 아닙니다. 실제 적중률은 제르코닉스 AX 프로젝트의 고객사 문서와 실무자 피드백이 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.

미리 알아둬야 할 것들

수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서는 데모 동작과 실검증 준비 상태로 솔직하게 설명합니다.

정답을 내가 만들었으니 검색이 잘 맞는 게 당연해지는 함정이 있어, 답이 문서에 없는 질문·두 문서의 상충 내용·오타 질문을 골든셋에 일부러 섞습니다.

실제 고객사 문서는 표·그림·스캔본이 섞여 전처리 난도가 다릅니다. 문서 파싱 고도화는 도입 단계 과제로 분리합니다.

이 포트폴리오는 Hybrid RAG 와 인용 검증 구현을 입증할 뿐, 환경 규제·컨설팅 전문성은 주장하지 않습니다. 더미 지침은 가상 문서이며 규제 해석은 컨설턴트 검토가 필요하다고 면접에서 밝힙니다.

더미 데이터

① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.

corp_guideline_docsDOCS· 10 docs

고객사 사내 지침을 본뜬 환경 컨설팅 테마의 가상 문서입니다. 검색·인용의 원문이며 상충·중복을 일부러 담았습니다.

② corp_guideline_docs.seed.json 다운로드
① 인라인 샘플 (프리뷰 2 / 10)
DOC-01 폐기물 분리배출 지침 v2
사업장 일반 폐기물은 매주 화·목 오후 4시 이후 지하 1층 집하장에 배출한다. 파쇄 대상 문서는 보안 파쇄함에만 넣는다. 유성 페인트 용기는 지정 폐기물로 분류하며 일반 배출을 금지한다.
DOC-02 에너지 사용 보고 절차
월별 전력 사용량은 익월 5영업일 안에 시설팀이 집계해 경영지원팀에 제출한다. 집계 단위는 층별 계측기 기준이며 계측기 누락 층은 전년 동월 값으로 추정 기재하고 추정임을 표기한다.
③ 증강 프롬프트 (본인 LLM 에 붙여서 N 배 늘리기)
다음 JSON Schema 를 그대로 만족하는 사내 환경 지침 문서를 20건 더 만들어 주세요: {"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"}},"required":["title","body"]} title 은 'DOC-## 제목' 형식의 가상 사내 지침으로 쓸 것. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) 같은 주제의 신·구버전이 서로 다른 내용을 담은 상충 쌍 2쌍 이상(v1/v2 표기), (2) 다른 문서를 참조만 하고 답을 담지 않은 문서 2건(별도 문서를 따른다 류), (3) 같은 대상을 다른 용어로 부르는 표기 흔들림(일회용컵/1회용 컵, 집하장/수거장) 3건, (4) 한 문단에 여러 규칙이 섞인 긴 문서 2건.
schema (3 층의 단일 출처)
{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"}},"required":["title","body"]}
qa_golden_setTABLE· 10 rows

검색·거절 채점의 정답표입니다. 정답 문단이 없는 질문(gold_quote null)을 포함해 무근거 거절을 채점합니다.

② qa_golden_set.seed.json 다운로드
① 인라인 샘플 (프리뷰 5 / 10)
question_idquestiongold_doc_idgold_quotequestion_type
Q-01일반 폐기물은 언제 버리나요?DOC-01매주 화·목 오후 4시 이후 지하 1층 집하장에 배출한다절차
Q-02여름철 에어컨 온도 기준이 뭐예요?DOC-03냉방기 설정 온도는 하절기 26도 이상을 기본으로 한다기준
Q-03노트북 버리려면 뭐부터 해야 하죠?DOC-07정보보안팀의 데이터 소거 확인서를 받은 뒤에만 폐기 신청이 가능하다절차
Q-04전력 사용량 보고는 누가 하나요?DOC-02시설팀이 집계해 경영지원팀에 제출한다담당
Q-05음식물 쓰레기 처리 규정 알려주세요——무근거
③ 증강 프롬프트 (본인 LLM 에 붙여서 N 배 늘리기)
다음 JSON Schema 를 그대로 만족하는 질문·정답 행을 30개 더 만들어 주세요: {"type":"object","properties":{"question_id":{"type":"string"},"question":{"type":"string"},"gold_doc_id":{"type":["string","null"]},"gold_quote":{"type":["string","null"]},"question_type":{"type":"string","enum":["절차","기준","담당","무근거"]}},"required":["question_id","question","question_type"]} gold_quote 는 반드시 대상 문서 body 의 실제 문장 조각이어야 한다. 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: (1) 문서에 답이 없는 무근거 질문 6건 이상(gold_doc_id·gold_quote null), (2) 오타·구어체 질문 5건(타소→탄소 같은 오타 포함), (3) 신·구버전 상충 문서를 겨냥한 질문 2건, (4) 참조만 있고 답이 없는 문서(별도 문서를 따른다)를 겨냥해 무근거로 채점돼야 하는 질문 2건.
schema (3 층의 단일 출처)
{"type":"object","properties":{"question_id":{"type":"string"},"question":{"type":"string"},"gold_doc_id":{"type":["string","null"]},"gold_quote":{"type":["string","null"]},"question_type":{"type":"string","enum":["절차","기준","담당","무근거"]}},"required":["question_id","question","question_type"]}

기술 상세 · 아키텍처·운영·출력 스키마

기술 스택 매핑
FastAPI문서 적재·질문 응답 API 서버입니다. 공고의 사용 스택 그대로 씁니다
LLM검색된 문단을 근거로 답변 문장을 만듭니다. 근거 채택 여부는 인용 일치 검증이 결정합니다
RAG질문마다 근거 문단을 검색해 답에 붙이는 제품 골조입니다
LangChain문서 로더·청킹·임베딩 등 파이프라인 부품을 조립합니다
LangGraph검색, 답변, 인용 검증, 재질의 단계를 그래프 노드로 잇습니다
Claude주 답변 생성 모델로 Claude Sonnet 을 씁니다
ChatGPT골든셋 질문의 말바꿈(패러프레이즈) 변형을 만들어 검색 강건성을 시험합니다
Gemini같은 질문의 교차 응답을 받아 인용 누락·상충 표본 점검에 씁니다
LLM 선택
model
Claude Sonnet (답변 생성) + ChatGPT (질문 변형 생성) + Gemini (교차 점검 표본)
prompt
답변 JSON Schema 를 강제하고, 인용은 검색된 문단 원문에서만 고르게 하며 근거가 없으면 no_evidence 로 답하라는 지시를 둡니다. 인용 불일치가 잡히면 해당 답변만 재생성합니다.
rationale
문서 근거 Q&A 라 RAG 가 필수입니다. 공고가 ChatGPT·Claude·Gemini 세 도구 지원을 명시해, 주 생성은 Claude 로 고정하고 나머지 둘은 시험·점검 보조로 역할을 나눠 세 도구를 실제 용도로 씁니다.
결정 게이트
1주차 끝질문 10종(문서에 없는 질문 포함)에서 인용 검증을 통과한 답이 화면까지 나오는지 확인합니다.

✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 골든셋 채점과 검색 방식 비교로 넘어갑니다.

2주차 끝골든셋 30건 채점 리포트와 세 검색 방식 비교표가 나오는지 확인합니다.

✓ pass → LangGraph 재질의·교차 점검 노드 확장으로 넘어갑니다.

재사용 레이어 · 코어 70% / 도메인 30%
core (재사용 가능)
  • 키워드(BM25)와 벡터 점수를 합치는 Hybrid 검색 모듈
  • 인용(quote)이 검색 문단의 실제 문장 조각인지 확인하는 결정론 검증기
  • 근거 없음(no_evidence) 거절 분기와 그 채점 스크립트
  • LangGraph 검색·답변·검증·재질의 그래프 골격
  • 골든셋 대비 검색 적중률 자가채점 리포트
domain (교체 대상)
  • 지침 문서 더미 세트(환경 컨설팅 테마)는 고객사 도메인 문서로 갈아끼웁니다
  • 질문 유형 enum(절차·기준·담당 문의)은 도메인별로 교체합니다
  • 컨설팅 실무자 페르소나와 답변 어투
출력 스키마 · qa_answer

질문 한 건에 대한 답변입니다. 인용이 검색 문단의 실제 문장 조각이어야 하고, 근거가 없으면 지어내지 않고 거절합니다.

schema (JSON Schema)
{"type":"object","properties":{"question_id":{"type":"string"},"status":{"type":"string","enum":["answered","no_evidence"]},"answer":{"type":["string","null"]},"citations":{"type":"array","items":{"type":"object","properties":{"doc_id":{"type":"string"},"quote":{"type":"string"}},"required":["doc_id","quote"]}},"conflict_note":{"type":["string","null"]},"hedge":{"type":"string"}},"required":["question_id","status","citations","hedge"]}
모범 출력 (3)
[
  {
    "question_id": "Q-01",
    "status": "answered",
    "answer": "일반 폐기물은 매주 화요일과 목요일 오후 4시 이후에 지하 1층 집하장에 배출합니다.",
    "citations": [
      {
        "doc_id": "DOC-01",
        "quote": "매주 화·목 오후 4시 이후 지하 1층 집하장에 배출한다"
      }
    ],
    "conflict_note": "구버전 지침(DOC-05)은 금요일 오전 배출로 다르게 적혀 있어 함께 표시합니다.",
    "hedge": "가상 더미 지침 기준의 답변입니다."
  },
  {
    "question_id": "Q-05",
    "status": "no_evidence",
    "answer": null,
    "citations": [],
    "conflict_note": null,
    "hedge": "적재된 문서에서 음식물 쓰레기 처리 규정을 찾지 못해 답을 만들지 않았습니다. 담당 부서 확인이 필요합니다."
  },
  {
    "question_id": "Q-08",
    "status": "answered",
    "answer": "국내 출장은 이동 수단과 거리만 기록하면 배출량이 자동 계산되고, 해외 출장은 항공권 확정 후 3일 안에 노선 정보를 입력합니다.",
    "citations": [
      {
        "doc_id": "DOC-04",
        "quote": "국내 출장은 이동 수단과 거리만 기록하면 배출량은 시스템이 자동 계산한다"
      },
      {
        "doc_id": "DOC-04",
        "quote": "해외 출장은 항공권 예약 확정 후 3일 안에 노선 정보를 입력한다"
      }
    ],
    "conflict_note": null,
    "hedge": "질문의 오타(타소)를 탄소로 해석해 검색했습니다. 가상 더미 지침 기준의 답변입니다."
  }
]
검증 노트 (자동 vs 수동)

[자동 검증 · 스크립트가 전수 수행] 1. 출력이 JSON Schema 형식을 통과하는지 확인합니다(형식 깨진 답변이 화면에 나가는 것을 차단). 2. citations 의 모든 quote 가 해당 doc_id 원문의 실제 문장 조각(공백 정규화 후 substring)인지 확인합니다(인용 환각 차단). 3. status 가 answered 인데 citations 가 비어 있거나, no_evidence 인데 answer 가 채워진 조합을 차단합니다. 4. 골든셋의 무근거 질문이 no_evidence 로 답해졌는지 채점합니다(지어내기 탐지). [수동 검증 · 사람이 표본 확인] 1. answer 가 인용 범위를 넘어 과장하지 않는지 10건을 표본 검토합니다. 2. 상충 문서가 걸린 답변에 conflict_note 가 붙는지 확인합니다.