광고 자리 모집 중 · 제휴 문의

Kimi를 활용한 대용량 문서 분석 및 다중 파일 정보 추출 가이드

365Finds Editorial
Wiki 문서 11,430편 수록

내 AI에서 365 Wiki 사용하기

아래 프롬프트를 복사해 평소 사용하는 AI에 붙여넣고 바로 질문하세요.

전체 Skill 다운로드

먼저 프롬프트로 체험해 보세요. 365 Wiki를 자주 쓴다면 전체 365Wiki Skill을 설치해 매번 붙여넣는 수고를 줄일 수 있습니다. 평소 쓰는 AI가 없다면 Gemini나 Microsoft Copilot 웹 버전도 사용할 수 있습니다.

방대한 기술 문서, 수백 쪽에 달하는 재무 공시 자료, 복잡한 다자간 상업 계약서를 분석할 때 짧은 컨텍스트 윈도우에 갇힌 기존 AI 도구는 한계에 부딪히기 쉽습니다. Moonshot AI가 개발한 Kimi는 플래그십 모델에서 최대 100만 토큰을 지원하는 네이티브 초장문 컨텍스트 추론 기능과 강력한 다중 문서 처리 역량을 통해 이러한 병목 현상을 해결합니다. 본 가이드에서는 Kimi를 활용하여 방대한 단일 문서를 분석하고, 여러 파일 간의 비교 정보 추출을 수행하며, 자동화 파이프라인에서 컨텍스트 캐싱(Context Caching)을 활용해 비용과 지연 시간을 최적화하고, 높은 정확도가 요구되는 연구 및 엔터프라이즈 워크플로 전반에 걸쳐 체계적인 검증 제어를 적용하는 방법을 설명합니다.

Kimi의 장문 컨텍스트 아키텍처와 파일 처리 규격의 이해

Kimi를 사용하면 AI 모델에 질의하기 전 문서를 인위적으로 작게 쪼개는 번거로운 전처리 작업이 필요하지 않습니다. Kimi Delta Attention(KDA)과 Gated Multi-Head Latent Attention(MLA)을 결합한 하이브리드 아키텍처 기반의 Kimi K3를 비롯한 핵심 모델은 맥락의 일관성을 잃거나 세부 사항을 놓치지 않고 수십만 단어에 달하는 텍스트 전체를 총체적으로 이해합니다.

지원 파일 형식 및 기술 사양

Kimi는 웹 인터페이스, 데스크톱 워크스페이스 및 개발자 API 전반에서 폭넓은 문서와 데이터 형식을 지원합니다.

개발자 애플리케이션에서 텍스트 추출 목적으로 업로드하는 파일은 purpose="file-extract"로 지정합니다. 단일 파일의 최대 크기는 100 MiB입니다. 개별 조직 단위로 기본 10 GiB의 스토리지 용량 한도가 제공되며, 업로드할 수 있는 파일의 총 개수에는 제한이 없습니다. Kimi Web 및 Kimi Work 사용자는 단일 분석 세션에서 최대 50개의 개별 문서를 동시에 업로드할 수 있습니다.

텍스트 추출과 네이티브 시각적 처리의 차이

Kimi는 텍스트 추출 파이프라인과 네이티브 시각 추론 메커니즘을 명확하게 구분합니다.

방대한 단일 문서 분석을 위한 단계별 워크플로

학술 논문, 연례 10-K 사업보고서, 임상시험 보고서 등 어떤 문서를 다루든 Kimi를 활용한 단일 종합 문서 분석은 업로드부터 정밀 검증까지 체계적인 절차를 거칩니다.

옵션 A: Kimi Web을 통한 대화형 문서 탐색

브라우저나 데스크톱 클라이언트 환경에서 작업하는 리서치 애널리스트, 법무팀 및 지식 근로자에게 적합한 방식입니다.

  1. 인터페이스 접속: kimi.ai(또는 kimi.com)에 접속하여 새 대화를 시작합니다.
  2. 문서 첨부: 첨부 아이콘을 클릭하거나 입력창으로 파일을 직접 끌어다 놓습니다.
  3. 파싱 완료 대기: 시스템이 문서를 파싱한 후 전체 텍스트 추출이 완료되었음을 알리는 파일 태그를 표시합니다.
  4. 초기 개요 생성: 세부 사항으로 들어가기 전 문서의 전체 범위를 파악하기 위해 구조화된 개요를 요청합니다.
  5. 대화형 심층 질의: 특정 섹션, 회계 기간 또는 기술 정의를 명시하여 정밀한 질의를 진행합니다.

옵션 B: Kimi API를 통한 프로그래밍 방식의 문서 분석

문서 분석 기능을 백엔드 파이프라인에 통합하려는 개발자를 위해 Kimi는 https://api.moonshot.cn/v1에서 OpenAI 호환 API 엔드포인트를 제공합니다. 분석은 다음과 같은 4단계로 간결하게 구현됩니다.

import os
from pathlib import Path
from openai import OpenAI

# Moonshot API를 대상으로 클라이언트 초기화
client = OpenAI(
    api_key=os.environ["MOONSHOT_API_KEY"],
    base_url="https://api.moonshot.cn/v1",
)

# 1단계: 텍스트 추출용 문서 업로드
uploaded_file = client.files.create(
    file=Path("annual_report_2025.pdf"),
    purpose="file-extract",
)

# 2단계: 추출된 텍스트 내용 조회
extracted_text = client.files.content(file_id=uploaded_file.id).text

# 3단계: 추출된 텍스트를 시스템 메시지에 주입
system_persona = (
    "You are Kimi, an AI assistant developed by Moonshot AI. Provide accurate, "
    "well-structured, and verified answers based strictly on provided documentation."
)

messages = [
    {"role": "system", "content": system_persona},
    {"role": "system", "content": extracted_text},
    {
        "role": "user",
        "content": "주요 매출 동인에 대한 경영진 요약을 제공하고, 본 공시에서 밝힌 상위 3대 운영 리스크를 식별해 주세요.",
    },
]

# 4단계: Kimi K3를 사용하여 추론 실행
response = client.chat.completions.create(
    model="kimi-k3",
    messages=messages,
    temperature=0.3,
)

print(response.choices[0].message.content)

[!IMPORTANT] API를 통해 문서를 조회할 때는 항상 추출된 텍스트 문자열을 가져와 messages 내부에 직접 전달해야 합니다. 원본 file_id를 메시지 내용으로 전달하거나 대용량 문서를 base64 문자열로 인라인 처리하지 마십시오. 이는 불필요한 토큰 낭비를 초래하며 텍스트 추출 최적화 파이프라인을 우회하게 됩니다.

심층 단일 문서 분석을 위한 핵심 프롬프트 패턴

방대한 텍스트에서 최상의 추출 결과를 도출하려면 명확한 관점의 프롬프트를 구성해야 합니다.

다중 파일 정보 추출 및 비교 분석

Kimi의 가장 강력한 실무적 장점 중 하나는 다수의 방대한 문서를 동시에 평가할 수 있다는 점입니다. 개별 파일을 따로 분석한 뒤 수작업으로 취합할 필요 없이 여러 파일을 한 번에 입력하여 문서 간 교차 종합 분석, 계약서 차이점 대조(Redline), 시계열 추세 분석을 수행할 수 있습니다.

다중 파일 분석을 위한 컨텍스트 구성 패턴

API 호출 시 개별 문서는 messages 배열의 시작 부분에 독립된 system 메시지로 배치됩니다.

def prepare_multi_file_context(file_paths: list[str]) -> list[dict]:
    """여러 파일을 업로드하고 추출된 각 문서에 대한 system 메시지를 생성합니다."""
    file_messages = []
    for path in file_paths:
        file_obj = client.files.create(file=Path(path), purpose="file-extract")
        file_text = client.files.content(file_id=file_obj.id).text
        file_messages.append({"role": "system", "content": file_text})
    return file_messages

# 여러 연도의 사업보고서 또는 경쟁사 보고서 입력
docs = ["filing_2023.pdf", "filing_2024.pdf", "filing_2025.pdf"]
file_messages = prepare_multi_file_context(docs)

multi_doc_messages = [
    *file_messages,
    {"role": "system", "content": system_persona},
    {
        "role": "user",
        "content": (
            "2023년, 2024년, 2025년의 재무 성과를 비교해 주세요. "
            "총매출, 영업이익률, 잉여현금흐름을 비교하는 Markdown 표를 작성하고, "
            "주요 이익률 변동 원인을 설명해 주세요."
        ),
    },
]

completion = client.chat.completions.create(
    model="kimi-k3",
    messages=multi_doc_messages,
)
print(completion.choices[0].message.content)

높은 부가가치를 창출하는 다중 파일 활용 사례

단일 컨텍스트 윈도우 내에서 다수의 문서를 분석하면 다음과 같은 실무 워크플로를 구현할 수 있습니다.

활용 사례입력 문서추출 및 종합 분석 목표출력 형식
다년도 재무 추세 분석연속된 연차 보고서(10-K, 감사보고서)매출 성장 추이, 부채 변동 추세, 시간에 따른 주요 리스크 요인 도출비교 지표 표 및 편차 분석 보고서
계약서 대조 및 공급업체 조건 조율표준 기본계약서(MSA) vs 상대방 수정안책임 한도, 지식재산권 귀속, 손해배상 면책, 대금 지급 조건의 차이점 식별조항별 불일치 대조 매트릭스
경쟁사 벤치마킹제품 백서, 기술 사양서, 데이터시트시스템 아키텍처 처리량, 지연 시간, 보안 규정 준수, 라이선스 제약 비교기능 일치 체크리스트 및 장단점 평가
학제 간 문헌 종합 분석관련 가설을 다루는 여러 편의 과학 논문공통 연구 방법론 추출, 상충하는 실험 결과 분리, 기존 연구의 공백 규명체계적인 주제별 문헌 고찰 보고서

효과적인 비교 분석 프롬프트 설계

여러 문서를 비교할 때 "차이점을 알려줘"와 같은 모호한 질문은 일반적인 답변으로 이어지기 쉽습니다. 명확한 비교 기준을 정의하는 프롬프트를 작성해야 합니다.

컨텍스트 캐싱을 통한 지연 시간 및 호출 비용 최적화

여러 대화 턴에 걸쳐 수십 쪽의 문서를 반복 전달할 때 매 요청마다 전체 텍스트를 다시 처리하면 막대한 연산 비용이 발생합니다. Kimi는 자동화된 컨텍스트 캐싱(Context Caching) 엔진을 통해 이 문제를 해결합니다.

Kimi 컨텍스트 캐싱의 작동 원리

컨텍스트 캐싱은 방대한 입력 접두사(Prefix)의 연산 완료 상태를 서버 클러스터에 캐싱합니다. 후속 요청이 동일한 초기 컨텍스트를 포함하는 경우, Kimi는 접두사 재연산을 생략하고 표준 입력 요금의 일부만을 청구합니다.

아키텍처 핵심 규칙: 접두사 일관성 유지

캐시 적중률을 극대화하려면 messages 배열의 구조를 일관되게 유지해야 합니다. 프롬프트의 정적 요소(문서 내용, 시스템 페르소나, 출력 형식 규칙)를 배열의 맨 앞에 고정하고, 대화의 질의응답 턴은 반드시 배열 끝에 순차적으로 추가해야 합니다.

# 고정 문서 접두사 (대화 턴 간 자동 캐싱)
base_context = [
    *file_messages,
    {"role": "system", "content": system_persona},
    {"role": "system", "content": "Format all tabular data in GitHub Flavored Markdown."},
]

# 1턴 대화
conversation = list(base_context)
conversation.append({"role": "user", "content": "기재된 총자산 규모는 얼마인가요?"})
turn1_reply = client.chat.completions.create(model="kimi-k3", messages=conversation)

# 2턴 대화: 기존 접두사를 유지하여 컨텍스트 캐시 적중
conversation.append({"role": "assistant", "content": turn1_reply.choices[0].message.content})
conversation.append({"role": "user", "content": "그 수치는 현금성 자산과 비교할 때 어떤가요?"})
turn2_reply = client.chat.completions.create(model="kimi-k3", messages=conversation)

# 토큰 사용량 메타데이터에서 캐시 활용 내역 확인
usage = turn2_reply.usage
cached_tokens = getattr(usage.prompt_tokens_details, "cached_tokens", 0)
print(f"총 입력 토큰 수: {usage.prompt_tokens}")
print(f"재사용된 캐시 토큰 수: {cached_tokens}")

컨텍스트 캐싱과 검색 증강 생성(RAG)의 비교

원문 문서를 Kimi의 컨텍스트 윈도우에 직접 투입할지 외부 벡터 RAG 아키텍처를 구축할지 판단하는 것은 엔지니어링 복잡도와 비용의 균형을 맞추는 핵심 요소입니다.

평가 기준Kimi 장문 컨텍스트 + 컨텍스트 캐싱기존 청크 분할 기반 RAG
맥락의 온전성완벽한 전역 맥락; 검색 누락 없음; 여러 페이지에 걸친 표 및 챕터 간 의존성 온전하게 유지청크 경계 절단에 취약; 여러 챕터에 분산된 미묘한 단서를 놓칠 위험 존재
엔지니어링 복잡도최소화: 텍스트 업로드 후 질의만 수행; 임베딩 모델, 청커, 벡터 데이터베이스 불필요높음: 임베딩 모델 선정, 청크 분할 규칙 설계, 벡터 인덱스 튜닝, 재순위화 모델 구축 필요
응답 지연 시간접두사 캐시 적중 시 TTFT 5초 미만; 안정적이고 예측 가능한 응답 속도초기 검색은 빠르나 다단계 검색 및 재순위화 과정을 거치며 지연 시간 누적
비용 구조캐시 적중 시 접두사 비용 최대 90% 절감; 고정 문서군 대상 반복 질의 시 뛰어난 가성비초대용량 문서 코퍼스에서 단일 질의 비용은 낮으나 벡터 인프라 유지 고정비 발생
최적 적용 영역특정 문서 묶음 집중 분석(1~50개 파일, 재무 감사, 법률 실사, 딜리전스)수백만 건의 사내 티켓, 이메일, 위키 문서를 아우르는 전사적 범용 검색

프롬프트 작성 권장 사항 및 출력 거버넌스

수백 쪽에 달하는 문서를 분석할 때 신뢰할 수 있는 결과를 얻으려면 엄격한 프롬프트 구조 설계, 명확한 답변 제약 조건, 체계적인 사실 검증 절차가 필수적입니다.

명시적 규칙을 통한 응답 제약

제약 조건이 없으면 모델은 불필요하게 장황하고 모호한 설명을 늘어놓을 수 있습니다. 시스템 프롬프트에 구체적인 규칙을 추가하여 간결하고 검증 가능한 답변을 도출할 수 있습니다.

structured_rules = """
다음 답변 제약 조건을 엄격히 준수하십시오:
1. 답변은 최대 5개의 글머리 기호 항목으로 작성하십시오.
2. 모든 주장이나 수치 지표에 대해 정확한 출처 섹션, 페이지 번호 또는 표 제목을 인용하십시오.
3. 업로드된 파일에서 답을 직접 도출할 수 없는 경우, "제공된 문서에 해당 정보가 없습니다."라고 명시하십시오.
4. 추측이나 주관적 의견을 배제하고 일반적인 업계 상투어를 덧붙이지 마십시오.
"""

governed_messages = [
    *file_messages,
    {"role": "system", "content": system_persona},
    {"role": "system", "content": structured_rules},
    {"role": "user", "content": "고객 이탈률과 유지율 벤치마크 지표를 요약해 주세요."},
]

주요 재무 및 법률 사실의 엄밀한 검증

Kimi의 장문 컨텍스트 어텐션 메커니즘은 검색 과정에서 발생하는 환각을 최소화하지만, 중대한 의사결정 시에는 체계적인 검증이 수반되어야 합니다.

스토리지 및 파일 라이프사이클 관리

업로드된 파일은 향후 추출 및 캐싱 작업을 위해 사용자 계정에 유지되며, 조직의 스토리지 할당량(기본 10 GiB)에 반영됩니다. 분석이 완료되면 임시 파일을 정리하여 향후 작업을 위한 가용 공간을 확보하십시오.

# 분석 완료된 특정 파일 삭제
client.files.delete(file_id=uploaded_file.id)

# 일괄 정리: 모든 임시 추출 파일 목록 조회 후 삭제
all_files = client.files.list()
for file_record in all_files.data:
    client.files.delete(file_id=file_record.id)

플랫폼 옵션, 이용 등급 및 엔터프라이즈 프라이버시

Moonshot AI는 개별 분석가, 개발팀, 규제 준수 기업 환경에 맞춘 다양한 도입 경로와 데이터 보호 정책을 제공합니다.

일반 워크스페이스와 개발자 API 간의 선택

기업용 데이터 보호 및 제로 데이터 보존(ZDR) 정책

민감한 지식재산권, 독점 재무제표, 기밀 고객 계약서를 취급하는 기업의 경우 데이터 유출 방지가 최우선 과제입니다.

출처