Skip to main content
Microsoft OneDrive (이전 명칭 SkyDrive)는 Microsoft에서 운영하는 파일 호스팅 서비스입니다.
이 노트북은 OneDrive에서 문서를 로드하는 방법을 다룹니다. 기본적으로 문서 로더는 pdf, doc, docx, txt 파일을 로드합니다. 적절한 파서를 제공하여 다른 파일 유형을 로드할 수 있습니다(아래 참조).

전제 조건

  1. Microsoft identity platform 지침에 따라 애플리케이션을 등록하세요.
  2. 등록이 완료되면 Azure 포털에 앱 등록의 개요 창이 표시됩니다. Application (client) ID가 표시됩니다. client ID라고도 하는 이 값은 Microsoft identity platform에서 애플리케이션을 고유하게 식별합니다.
  3. 항목 1에서 따를 단계 중에 리디렉션 URI를 http://localhost:8000/callback으로 설정할 수 있습니다.
  4. 항목 1에서 따를 단계 중에 Application Secrets 섹션에서 새 비밀번호(client_secret)를 생성하세요.
  5. 문서의 지침에 따라 다음 SCOPES(offline_accessFiles.Read.All)를 애플리케이션에 추가하세요.
  6. Graph Explorer Playground를 방문하여 OneDrive ID를 얻으세요. 첫 번째 단계는 OneDrive 계정과 연결된 계정으로 로그인했는지 확인하는 것입니다. 그런 다음 https://graph.microsoft.com/v1.0/me/drive에 요청하면 응답이 OneDrive 계정의 ID를 보유하는 id 필드가 있는 페이로드를 반환합니다.
  7. pip install o365 명령을 사용하여 o365 패키지를 설치해야 합니다.
  8. 단계가 끝나면 다음 값이 있어야 합니다:
  • CLIENT_ID
  • CLIENT_SECRET
  • DRIVE_ID

🧑 OneDrive에서 문서 수집 지침

🔑 인증

기본적으로 OneDriveLoaderCLIENT_IDCLIENT_SECRET 값이 각각 O365_CLIENT_IDO365_CLIENT_SECRET라는 환경 변수로 저장되어야 합니다. 애플리케이션 루트에 .env 파일을 통해 이러한 환경 변수를 전달하거나 스크립트에서 다음 명령을 사용할 수 있습니다.
os.environ['O365_CLIENT_ID'] = "YOUR CLIENT ID"
os.environ['O365_CLIENT_SECRET'] = "YOUR CLIENT SECRET"
이 로더는 on behalf of a user라는 인증을 사용합니다. 사용자 동의가 있는 2단계 인증입니다. 로더를 인스턴스화하면 사용자가 필요한 권한에 대해 앱에 동의하기 위해 방문해야 하는 URL을 출력합니다. 그런 다음 사용자는 이 URL을 방문하고 애플리케이션에 동의해야 합니다. 그런 다음 사용자는 결과 페이지 URL을 복사하여 콘솔에 다시 붙여넣어야 합니다. 로그인 시도가 성공하면 메서드가 True를 반환합니다.
from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID")
인증이 완료되면 로더는 ~/.credentials/ 폴더에 토큰(o365_token.txt)을 저장합니다. 이 토큰은 나중에 앞에서 설명한 복사/붙여넣기 단계 없이 인증하는 데 사용할 수 있습니다. 이 토큰을 인증에 사용하려면 로더 인스턴스화에서 auth_with_token 매개변수를 True로 변경해야 합니다.
from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID", auth_with_token=True)

🗂️ 문서 로더

📑 OneDrive 디렉토리에서 문서 로드

OneDriveLoader는 OneDrive 내의 특정 폴더에서 문서를 로드할 수 있습니다. 예를 들어 OneDrive 내의 Documents/clients 폴더에 저장된 모든 문서를 로드하려는 경우입니다.
from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID", folder_path="Documents/clients", auth_with_token=True)
documents = loader.load()

📑 문서 ID 목록에서 문서 로드

또 다른 가능성은 로드하려는 각 문서에 대한 object_id 목록을 제공하는 것입니다. 이를 위해 Microsoft Graph API를 쿼리하여 관심 있는 모든 문서 ID를 찾아야 합니다. 이 링크는 문서 ID를 검색하는 데 유용한 엔드포인트 목록을 제공합니다. 예를 들어 Documents 폴더의 루트에 저장된 모든 객체에 대한 정보를 검색하려면 https://graph.microsoft.com/v1.0/drives/{YOUR DRIVE ID}/root/children에 요청해야 합니다. 관심 있는 ID 목록이 있으면 다음 매개변수로 로더를 인스턴스화할 수 있습니다.
from langchain_community.document_loaders.onedrive import OneDriveLoader

loader = OneDriveLoader(drive_id="YOUR DRIVE ID", object_ids=["ID_1", "ID_2"], auth_with_token=True)
documents = loader.load()

📑 지원되는 파일 유형 및 선호 파서 선택

기본적으로 OneDriveLoader는 기본 파서를 사용하여 document_loaders/parsers/registry에 정의된 파일 유형을 로드합니다(아래 참조).
def _get_default_parser() -> BaseBlobParser:
    """Get default mime-type based parser."""
    return MimeTypeBasedParser(
        handlers={
            "application/pdf": PyMuPDFParser(),
            "text/plain": TextParser(),
            "application/msword": MsWordParser(),
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document": (
                MsWordParser()
            ),
        },
        fallback_parser=None,
    )
OneDriveLoaderhandlers 인수를 전달하여 이 동작을 재정의할 수 있습니다. 파일 확장자("doc", "pdf" 등) 또는 MIME 유형("application/pdf", "text/plain" 등)을 파서에 매핑하는 딕셔너리를 전달하세요. 파일 확장자 또는 MIME 유형 중 하나만 독점적으로 사용해야 하며 혼합할 수 없습니다. 파일 확장자에 선행 점을 포함하지 마세요.
# using file extensions:
handlers = {
    "doc": MsWordParser(),
    "pdf": PDFMinerParser(),
    "mp3": OpenAIWhisperParser()
}

# using MIME types:
handlers = {
    "application/msword": MsWordParser(),
    "application/pdf": PDFMinerParser(),
    "audio/mpeg": OpenAIWhisperParser()
}

loader = OneDriveLoader(document_library_id="...",
                            handlers=handlers # pass handlers to OneDriveLoader
                            )
여러 파일 확장자가 동일한 MIME 유형에 매핑되는 경우 마지막 딕셔너리 항목이 적용됩니다. 예:
# 'jpg' and 'jpeg' both map to 'image/jpeg' MIME type. SecondParser() will be used
# to parse all jpg/jpeg files.
handlers = {
    "jpg": FirstParser(),
    "jpeg": SecondParser()
}

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I