“우리 계약 중 어느 것이 해지 벌금을 포함하고 있나요?“는 AI 에이전트의 작업처럼 들리며, 실제로도 그렇지만 계약서를 읽는 방식은 아닙니다. 모든 파일을 열어 답을 찾는 에이전트는 297개의 관련 없는 문서에 컨텍스트를 소모하고, 나머지 세 개에서 조항을 발견했는지 신뢰해야 합니다. Docker에서 로컬로 실행되는 GroupDocs.Search.Mcp, Claude Desktop, Cursor 또는 Copilot을 사용하면 폴더를 한 번 인덱싱하고, 인덱스에 어떤 계약이 일치하는지 물어본 뒤, 해당 조항만 읽습니다:
내 계약 중 어느 것이 해지 벌금을 언급하고 있나요? 각각의 조항을 인용해 주세요.
AI 에이전트를 사용해 계약 폴더 전체에 질문하는 방법
에이전트가 모든 내용을 읽을 때 무엇이 잘못될까?
위험도가 점점 커지는 세 가지 문제가 있습니다. 첫째, 느리고 비용이 많이 듭니다: 질문할 때마다 모든 계약이 컨텍스트 창을 통과합니다. 둘째, 공간이 부족해집니다: 수십 개의 긴 문서를 넘으면 초기 문서가 창에서 사라지거나 요약되며, 요약본에서는 조항이 누락될 수 있습니다. 셋째, 조용히 실패합니다: “해지 벌금이 있는 계약 두 개를 찾았습니다”라는 답변은 에이전트가 300개 전체를 확인했든 40개만 대충 살펴봤든 동일하게 들립니다. 답변에는 어떤 계약인지 알려주는 정보가 없습니다.
인덱스는 첫 번째 문제를 해결하고 세 번째 문제를 드러냅니다. “어떤 파일에 이 단어들이 포함되어 있나요”라는 질문은 정확한 답을 가지고 있으며, 검색 도구는 확인 가능한 개수와 함께 결과를 반환합니다.
올바른 순서는 어떻게 보이나요?
한 번 인덱싱하고, 검색한 뒤, 일치하는 항목을 읽습니다. 아래는 다섯 개의 가상 계약(벌칙 조항이 있는 두 개와, 두 단어를 언급하지만 벌칙을 배제하는 NDA 하나)에 대해 테스트한 결과 서버가 반환한 내용입니다.
-> add_to_index {"documentsPath":"contracts","indexName":"contracts"}
<- Indexed 'contracts' into index 'contracts': 5 document(s) added,
5 in the index.
-> search {"query":"termination penalty","indexName":"contracts"}
<- { "documentsFound": 0,
"hint": "Unquoted words separated by spaces do not match. Search the
phrase as \"termination penalty\", or combine the words with
AND / OR, e.g. termination AND penalty." }
-> search {"query":"termination AND penalty","indexName":"contracts"}
<- documentsFound 3: acme-master-services-agreement.pdf,
globex-consulting-agreement.docx, initech-nda.docx
-> get_text_fragments {"query":"\"termination penalty\"",...}
<- === contracts/acme-master-services-agreement.pdf ===
…a termination penalty of three monthly fees applies, payable
within 30…
=== contracts/globex-consulting-agreement.docx ===
…Early termination penalty: the Client pays 50 percent of the fees…
세 결과가 알려주는 점은?
첫 번째 쿼리가 놓쳤으며, 서버가 이유를 알려줍니다. GroupDocs.Search에서는 따옴표 없이 공백으로 구분된 단어는 구문으로 매치되지 않습니다. 단순히 0을 반환하는 대신, 서버는 수정 방법을 설명하는 hint를 첨부하고, 에이전트는 다음 호출에서 스스로 수정합니다. 이는 가장 흔한 초보 실수이며, 응답 자체에서 처리됩니다.
AND는 세 개를 찾고, 구문은 두 개를 찾았습니다. AND는 문서별로 평가됩니다. Initech NDA는 *“이 NDA의 해지와 관련된 수수료와 벌칙이 없습니다”*라는 문장에 두 단어가 모두 포함되어 있습니다. 검색 결과만 읽는 모델은 이를 포함된 것으로 셀 수 있지만, 해당 구절을 읽으면 NDA가 벌칙을 명시적으로 제외하는 계약으로 별도로 보고합니다. 이러한 구분이 세 번째 호출의 전체 가치를 제공합니다.
포맷은 중요하지 않았습니다. 일치 항목은 PDF와 DOCX에서 왔으며, TXT 계약도 같은 인덱스에 포함되었습니다. 엔진은 82가지 포맷을 인덱싱하므로, 다양한 도구로 10년 동안 축적된 폴더도 하나의 질의에 답할 수 있습니다.
호출 순서
user agent Search MCP server
| "Which contracts mention a termination penalty?" |
|---------------->| |
| |-- add_to_index (once) ------------------>|
| |-- search {"query":"termination AND |
| | penalty"} -------------------->|
| |<- 3 files --------------------------------|
| |-- get_text_fragments {"query": |
| | "\"termination penalty\""} ----------->|
| |<- the two clauses, with context ----------|
|<- "Acme: 3 monthly fees (12.3). Globex: 50% of remaining |
| fees. Initech NDA: explicitly no penalty." |
첫 번째 인덱싱 이후, 새로운 질문마다 계약 수와 관계없이 두 번의 호출이 필요합니다. *“어떤 계약에 불가항력 조항이 있나요?"*는 "force majeure"와 같습니다. *“어떤 임대 계약이 자동으로 갱신되나요?"*는 renewal OR renews이며, 해당 구절은 *“통지 없이 12개월 동안 자동으로 갱신됩니다”*라고 말합니다. 통지 기간에 관한 조항은 terminat? AND notice이며, 여기서 ?는 한 글자를 의미해 terminate와 매치됩니다.
인간이 루프에 남는 위치
이는 계약 검토가 아니며, 그렇게 가장해서도 안 됩니다. 인덱스는 텍스트를 찾아 인용하고, 에이전트는 인용한 내용을 요약합니다. 두 가지 습관이 이를 정직하게 유지합니다. 모든 주장에 대해 인용을 요구하면 잘못된 요약이 잘못 읽은 문장 옆에 표시됩니다. 또한 “조항 없이 단어만 언급한 계약을 나열해 주세요”와 같이 근접 일치도 요청하세요. 이러한 경우에 독자의 판단이 가장 중요합니다.
정직한 제한 사항
- 평가 모드에서는 인덱스가 최대 100개의 문서만 보유하고, 검색 결과는 최대 10개만 반환되며, 모든 응답에 이를 명시합니다. 실제 실행 전에
get_license_status를 호출하세요. 제한된 답변이 완전해 보일 수 있기 때문입니다. - 텍스트 레이어가 없는 스캔된 계약은 파일 속성만으로 인덱싱되며, OCR은 지원되지 않습니다.
- 전체 텍스트 검색은 단어를 매치합니다: 에이전트는 계약의 어휘를 사용하거나 변형을 시도해야 합니다.
- 인덱싱된 폴더에서 단일 파일을 제거하는 것은 지원되지 않으며, 폴더를 삭제하고 원하는 파일을 다시 추가해야 합니다.
FAQ
AI 에이전트가 계약을 업로드하지 않고 모두 검색할 수 있나요?
예. 인덱스는 사용자의 머신 내 컨테이너에서 구축·검색되며, 에이전트가 인용한 조항만 모델에 전달됩니다.
몇 개의 계약을 처리할 수 있나요?
라이선스가 있으면 디스크와 메모리가 허용하는 만큼 처리할 수 있습니다; 인덱스는 한 번 구축되고 점진적으로 업데이트됩니다. 평가 모드에서는 인덱스당 100개로 제한됩니다.
두 단어를 검색했는데 결과가 없던 이유는?
따옴표 없이 입력한 단어는 구문으로 매치되지 않습니다. "termination penalty"와 같이 따옴표를 사용하거나 AND로 연결하세요; 서버의 hint도 동일하게 안내합니다.
더 깊이 파고들기
- 문서, 표준 사용법: AI 에이전트를 사용해 계약 폴더 전체에 질문하는 방법
- 문서 허브: GroupDocs.Search MCP Server
- 시작하기: 문서 폴더에 질문하려면 벡터 데이터베이스가 필요할까요?
- 관련: 파일에서 근거 있는 답변: 모델 메모리가 아니라 구절을 인용하세요
- 관련: grep이 PDF를 읽지 못한다면: 코딩 에이전트에 문서 인덱스를 제공하세요
- 관련: AI 에이전트를 사용해 이메일 아카이브 검색: PST, MSG, EML 및 첨부 파일
- 관련: AI 에이전트를 위한 프로젝트 메모리: 프로젝트당 하나의 인덱스를 최신 상태로 유지
- 온프레미스 및 보안 모델: AI 문서 처리용 3가지 아키텍처와 파일을 네트워크 내부에 보관하는 방법
- 질문: GroupDocs Search 포럼
- 소스: GitHub의 GroupDocs.Search.Mcp