본문으로 건너뛰기

07_RAG 파이프라인 구축

· 약 5분
sbin
SceneMakerAI 팀

들어가며


기본 RAG 를 간단히 표현하면 아래 세 단계다.

  1. 문서 구조화 파싱 (Parsing)
  2. 의미 단위 분할 청킹(Chunking) / 벡터화 임베딩 (Embedding)
  3. 사실 기반 완성 검색 (Retrieval) / 답변 (Generating)

image

문서 RAG 라면 3단계에서 문단을 인용하면 끝이다.

우리 쪽은 방송 영상이라, 답이 문단이 아니라 클립 구간(v_id + start~end) 이다.

그래서 Parsing·Chunking·Retrieval 을 각각의 에이전트 단위로 나누었다 .

RAG 파이프라인 = agent-scenario(색인) + agent-search(검색·생성)


Scenemaker Agent 구축

노트

💡 전체 Scenemaker Multi Agent 는 아래와 같이 구성하였다.

1. 파싱 (Parsing) — 영상을 분석 데이터로 사용

  • 자막  — agent-stt

    • STT → 대사
      • (Whisper, 차기 Qwen3-ASR) 모델 설정 중
  • 화면  — agent-vision  

    • VLM → 화면·OCR·동작

    • 오디오 → 소리·BGM 

2.청킹·임베딩 (Chunking + Embedding) — agent-scenario

  • 세그먼트를 의미 계층 으로 접음. 벡터로 색인한다.
    • 4계층 분할: 세그먼트 → 씬 → 서브 → 전체 줄거리 (map-reduce)

    • 임베딩 후 Milvus 1개 컬렉션 에 색인

3. 검색·생성 (Retrieval + Generation) — agent-search

  • 질의를 받아 LangGraph 6단계 로 클립 구간을 찾는다.
  • 결과물은 클립 구간 목록  (v_id + start~end)

테이블 구현

공정담당하는 일
업로드ui-workspace (Next.js)S3 업로드 + 분석결과 조회 콘솔
① 자막agent-stt음성 → 대사·화자, vLLM 자막교정
② 화면분석agent-vision6초 세그먼트 화면·OCR·소리·동작 분석
③ 색인agent-scenario씬→막→전체 map-reduce 요약 + 인물 신원 해소 + 임베딩
④ 검색agent-searchLangGraph 6단계(scope→plan→retrieve→expand→select→assemble)로 질의 → 클립

agent-scenario / agent-search 가 어떤 Flow 인지만 먼저 보고,

세부 구현·튜닝은 이어지는 글에서 다룬다.

Agent-Scenario

노트

💡 영상 분석 결과를 줄거리·인물·벡터로 저장하는 색인 쪽 Flow

image

Agent-Scenario 정리 테이블

#단계쉽게 말하면실제로 하는 일Qwen3.6
0loader재료 펼치기영상 내 대사(t_dialogue) 화면(t_segment) 시간순 병합
1scene장면 나누기씬 경계 + 요약 + 태그 (하이라이트·감정·광고)✅ 10분 구간마다
2cast누가 누군지 밝히기추측 → 확정 → 전파 (확정만 think 켬)✅ 씬마다 + 1회
3chapter막으로 묶기씬들을 10분 "막"으로 묶어 요약 (reduce)✅ 막마다
4summary전체 줄거리 쓰기막들을 묶어 영상 한 편 줄거리로 (reduce)✅ 1회
5save노트 저장DB 기록
6index검색되게 색인임베딩 → Milvus 1개 컬렉션

한 줄로 보면, 6초 원자 → 의미 단위로 접기 → 벡터로 넣기 다.

긴 영상을 한 번에 요약하지 않고 map-reduce 로 접는 이유, 그리고 매 단계에 타임코드를 남기는 이유가 같다 — 최종 목적이 클립 제작 이라서다.

cast 의 “추측 → 확정 → 전파” 도 같은 맥락이다. 장면 하나만으로는 누군지 모르니, 영상 전체에서 한 번 확정한 뒤 각 씬에 다시 채운다.


노트

💡 영상 검색 과정을 나타내는 그래프

image

Agent-search 노드별 정리 테이블

#노드쉽게 말하면실제로 하는 일Qwen3.6
1scope어느 영상이지?관련 회차만 골라냄 (챕터 벡터 40표 투표 → LLM 확정, 최대 5개)✅ 0~1회
2plan뭘 찾을지 목록 짜기찾을 장면(beat) 리스트 + 장면마다 검색어 2~3개 + route 결정✅ 회차당 1회
3retrieve비슷한 조각 긁어오기검색어로 벡터 검색 → 중복 제거 → 상위 10개 후보
4expand앞뒤도 같이 보기상위 히트 앞뒤 ±12초 맥락 창 붙이기
5select진짜 맞아? 어디~어디 자르지?클립 구간[start~end] 확정 아니면 버림 (재질의 1회)✅ beat당 1~2회
6assemble합치고,길이 맞추기겹침 병합 → 목표 길이만큼 추림 → 정렬 → 최종 목록

문서 RAG 와 가장 다른 지점은 retrieve 다음 이다.

6초 히트는 클립이 아니라서, expand 로 앞뒤를 붙인 뒤 select 가 자를 구간을 정한다.

못 맞히면 억지로 채우지 않고 버린다(재질의는 beat당 1회).

LLM 은 scope / plan / select 에만 쓰고, retrieve·expand·assemble 은 코드다.

노드를 어떻게 조립했는지(입출력 등)는 추후 글에서 이어간다.


마무리


현재 파이프라인 구축까지만 마친 상태이며, 실제 모델 학습, 코드 구현 등은 진행 중에 있다.

추후 다음 글에서는 해당 파이프라인 기반으로, 방송 워크플로우 설계를 기재한다.

본 글은 과학기술정보통신부·정보통신산업진흥원 「2026년 오픈소스 AI·SW 개발·활용 지원사업」의 지원으로 수행된 연구 결과입니다.