AI 에이전트를 사용해 문서에서 데이터를 대량 추출하려면, 스키마를 프롬프트에 작성하고, 에이전트를 폴더에 지정한 뒤, 마지막에 예외 목록을 요구합니다. GroupDocs.Parser.Mcp 서버는 Docker 컨테이너 내에서 로컬로 읽기를 수행하므로 모든 파일이 동일한 추출 도구를 통과하고 문서는 머신을 떠나지 않습니다. LLM이 작업 순서를 결정하고, 엔진이 파일을 읽습니다.

내 문서 폴더에 있는 모든 PDF에 대해: 테이블을 JSON으로 추출하고, amount 열을 합산한 뒤, 파일 이름, 총액, 페이지 수를 포함하는 하나의 테이블을 제공해 주세요.

단계별 구성 및 문제 해결 버전은 문서에 있습니다: 한 번에 폴더의 문서에서 데이터를 추출하는 방법.

수동 추출이 일관되지 않은 데이터를 생성하는 이유는 무엇인가요?

사람들이 문서에서 값을 하나씩 복사할 때, 각 파일이 약간씩 다르게 처리됩니다: 한 사람은 세금을 포함하고, 다른 사람은 포함하지 않으며, 또 다른 사람은 특이한 레이아웃의 파일을 건너뜁니다. 이러한 불일치는 총계를 비교할 때까지 보이지 않습니다. 워크플로우는 규칙을 명시적으로 만들고 모든 파일에 동일하게 적용함으로써 이를 해결합니다. 에이전트를 사용하면 규칙이 하나의 프롬프트에 존재하고, 추출 도구는 파일 1과 파일 200에서도 동일하게 동작합니다.

워크플로우를 어떻게 구축하나요?

폴더를 컨테이너에 /data 로 마운트하고, GROUPDOCS_MCP_STORAGE_PATH=/data 를 설정한 뒤, 에이전트에게 다음 단계들을 제공하세요.

  1. 라이선스 확인. 프롬프트: “Run get_license_status and tell me the mode.” 라이선스가 없는 추출은 제한적이며, 폴더 전체에 대한 부분적인 읽기는 눈에 띄지 않게 잘못된 데이터셋이 됩니다.
  2. 폴더 분류. 프롬프트: “For each file, report format, page count and whether text extraction returns anything.” get_document_info는 유형, 페이지 수 및 크기를 제공하고, 한 페이지 extract_text 호출은 텍스트 존재 여부를 보여줍니다.
  3. 스키마 수정. 프롬프트: “For each readable file, extract the line-items table as JSON. Columns: item, quantity, amount. Total the amount column.” 이는 extract_tables를 사용합니다.
  4. 실패를 명시적으로 수집. 프롬프트: “List every file that failed, was password-protected, or returned no table, with the reason.” 성공만 보고하는 배치는 예외를 숨깁니다.
  5. 출력 작성. 프롬프트: “Write one row per file to a CSV in the output folder.”

파일은 컨테이너 내부에서 이름으로 해결되므로, 에이전트는 호스트 경로가 아닌 invoice-014.pdf 를 전달합니다.

에이전트는 무엇을 결정하고 엔진은 무엇을 수행하나요?

단계 에이전트가 결정함 엔진이 수행함
분류 추출할 파일 선택 유형, 페이지 및 크기를 보고; extract_text는 텍스트 존재 여부를 보여줍니다
캡처 각 파일에 필요한 도구 선택 파일에서 텍스트 또는 테이블 행을 반환합니다
검증 총계가 텍스트와 일치하는지 여부 없음; 에이전트가 비교합니다
예외 목록에 포함될 파일 잘못된 파일에 대한 실패 메시지를 반환합니다
출력 CSV 형식 없음; 에이전트가 작성합니다

분할이 핵심입니다. 값을 캡처하는 것은 결정론적인 엔진 작업이며, 판단하고 조합하는 것은 에이전트의 역할입니다.

예시 세션 (축약):

You:    Check the license, triage the folder, then extract line items from every readable PDF and list the exceptions.
Agent:  [calls get_license_status, get_document_info x12, extract_text, extract_tables x10]
        License mode: evaluation. Results below are a smoke test.
        12 files: 10 with a text layer, 1 scan, 1 password-protected.
        Totals written for 10 files. Exceptions: scan-007.pdf (no text layer), hr-020.pdf (password required).

맞지 않는 파일은 어떻게 처리되나요?

스캔에는 텍스트 레이어가 없으므로 테이블 추출이 아무 것도 반환하지 않습니다. 이를 별도로 보관하거나, 페이지에 추적 번호나 주문 코드가 있을 경우 에이전트가 extract_barcodes 로 분기하도록 할 수 있습니다. 이 리스트는 아카이브 중 어느 부분이 스캔인지에 대한 인벤토리 역할도 합니다. 비밀번호가 보호된 파일은 자체 호출에 실패하므로, 에이전트에게 이를 보고하고 계속 진행하도록 요청하세요; 도구는 비밀번호가 있을 경우 password 인자를 받아들입니다.

대규모 실행을 비용 효율적으로 유지하려면 어떻게 해야 하나요?

  • 페이지별 제한: 데이터가 알려진 위치에 있을 때, 예를 들어 각 인보이스의 첫 페이지와 같이.
  • 대량으로 extract_images 사용을 피하세요. 이미지마다 파일을 작성하며, 삽화가 포함된 보고서 폴더는 수백 개의 파일을 생성합니다.
  • 측정된 사용량을 주시하세요. 측정 기반 라이선스에서는 모든 호출이 처리 비용으로 청구되므로, 목표형 스윕이 전체 스윕보다 비용이 적게 듭니다.

제한 사항은 무엇인가요?

라이선스가 없으면 추출이 제한됩니다; 정확한 제한은 라이브러리의 licensing page. 서버에는 OCR이 없으므로 스캔된 텍스트를 캡처할 수 없습니다. Docker 이미지 형태로만 제공되며, dnx 명령은 없습니다.

서버를 어떻게 등록하나요?

Cursor, Claude Desktop 또는 Windsurf용 최소 수동 항목으로, Parser 구성 문서의 컨테이너 경로를 사용합니다:

{
  "mcpServers": {
    "groupdocs-parser": {
      "command": "docker",
      "args": ["run", "--rm", "-i",
               "-v", "/path/to/documents:/data",
               "-e", "GROUPDOCS_MCP_STORAGE_PATH=/data",
               "ghcr.io/groupdocs-parser/parser-net-mcp:latest"]
    }
  }
}

FAQ

AI를 사용해 인보이스 폴더를 업로드 없이 처리할 수 있나요?
예. 컨테이너가 마운트된 폴더를 읽고 stdio를 통해 클라이언트와 통신하므로 인보이스는 머신에 남아 있습니다.

PDF에서 텍스트를 로컬에서 배치 추출하려면 어떻게 하나요?
에이전트에게 폴더를 순회하면서 파일당 extract_text를 호출하도록 요청하고, 긴 문서는 페이지별로 호출하세요. 매우 큰 출력은 마커로 잘려나가기 때문입니다.

에이전트가 문서에서 데이터 입력을 자동화할 수 있나요?
추출된 행을 CSV 또는 요약 테이블로 조합할 수 있습니다. 다른 시스템에 입력하기 전에 예외 목록을 검토하세요.

더 깊이 파고들기