외부 강화 API 사용

외부 인리치먼트 기능은 Analyze API에서 지원되지 않습니다.

외부 인리치먼트 기능을 사용하면 선택한 모델로 문서에 어노테이션을 작성할 수 있습니다. 웹훅 인터페이스를 통해 사용자 정의 모델 또는 고급 기반 모델 및 기타 써드파티 모델을 사용하여 콜렉션에서 문서를 강화할 수 있습니다. 문서는 외부 애플리케이션에 의해 보강된 후 발견 프로젝트의 콜렉션에 병합됩니다.

IBM Cloud Pak for Data 노즈비 IBM Software Hub Discovery 를 에어갭 환경에서 실행할 때는 HTTP 프록시를 통해 외부 애플리케이션에 연결해야 합니다. 더 자세한 정보는 에어갭 환경에서 HTTP 프록시 설정하기를 참고하세요.

외부 인리치먼트 기능을 사용하려면 다음을 수행하십시오.

  1. Discovery에서 웹훅 알림을 수신하고 문서에 어노테이션을 작성할 수 있는 외부 애플리케이션을 설정하십시오.

    이를 수행하려면 create enrichment 메소드를 사용하여 외부 앱을 프로젝트의 웹훅 엔드포인트로 등록해야 합니다. 자세한 정보는 API 참조에서 인리치먼트 작성 을 참조하십시오.

    프로젝트에 대한 외부 인리치먼트를 설정하면 프로젝트의 모든 콜렉션에 사용할 수 있게 됩니다. 외부 애플리케이션은 외부 인리치먼트가 작성되었음을 알리는 웹훅 ping 이벤트도 수신합니다.

  2. 외부 인리치먼트를 적용할 콜렉션을 지정하십시오. API를 사용하여 콜렉션에 외부 인리치먼트를 적용할 수 있습니다. 자세한 정보는 API를 사용하여 인리치먼트 관리 를 참조하십시오.

    또는 사용자 인터페이스에서 콜렉션 관리 페이지로 이동하여 외부 인리치먼트를 적용할 콜렉션을 선택할 수 있습니다. 그런 다음 인리치먼트 탭을 열고 콜렉션의 필드에 외부 인리치먼트를 적용하십시오.

    문서가 이 콜렉션으로 처리되거나 업로드될 때 Discovery는 고유한 batch_id 를 사용하여 문서의 일괄처리를 작성합니다. 외부 애플리케이션은 또한 일괄처리를 가져올 준비가 되었음을 알리는 웹훅 enrichment.batch.created 이벤트를 수신합니다. 그러면 외부 애플리케이션이 외부 인리치먼트를 위해 Discovery에서 일괄처리를 가져올 수 있습니다.

    외부 애플리케이션이 종료되거나 그 사이에 다시 시작되는 경우 일괄처리 나열 메소드를 사용하여 다음을 가져올 수 있습니다.

    • 외부 인리치먼트 애플리케이션에서 아직 가져오지 않은 알림을 받은 배치입니다.
    • 외부 인리치먼트 애플리케이션에 의해 가져오지만 아직 감지에 푸시되지 않은 배치입니다.

    자세한 정보는 API 참조에서 일괄처리 나열 을 참조하십시오.

  3. pull batches 메소드에서 Discovery가 제공하는 batch_id 를 지정하여 외부 애플리케이션이 인리치먼트를 위해 Discovery에서 문서를 가져오십시오. 자세한 정보는 API 참조에서 가져오기 일괄처리 를 참조하십시오.

    pull batches 메소드는 Discovery에서 2진 파일 첨부를 리턴합니다. 2진 첨부에 대한 자세한 정보는 가져오기 일괄처리 메소드에서 2진첨부 를 참조하십시오.

  4. 외부 인리치먼트가 일괄처리의 문서에 어노테이션을 작성한 후 push batches 메소드에 동일한 batch_id 를 지정하십시오. 자세한 정보는 API 참조에서 푸시 일괄처리 를 참조하십시오.

    문서는 2진 첨부 파일로 Discovery에푸시됩니다. 자세한 정보는 푸시 일괄처리 방법의 2진 첨부 를 참조하십시오.

  5. 문서가 콜렉션에서 병합되고 색인화되었는지 확인하십시오. 문서에는 외부 애플리케이션이 적용하는 어노테이션이 포함되어야 합니다.

웹훅 보안 요청 인증하기

웹훅 요청을 인증하려면 요청과 함께 전송되는 JSON 웹 토큰(JWT)을 확인하십시오. 웹훅 마이크로서비스는 자동으로 JWT를 생성하여 각 웹훅 호출과 함께 Authorization 헤더에서 전송합니다. 사용자는 JWT를 검증하는 외부 서비스에 코드를 추가해야 합니다.

시스템은 사용자가 지정하는 sample secret 를 기반으로 JWT를 생성할 수 있으며, Authorization 헤더에서 이 시스템 생성 JWT를 외부 애플리케이션에 전달할 수 있습니다. header 에 값을 지정하면 웹훅 마이크로서비스가 JWT 대신 외부 애플리케이션으로 해당 값을 전송합니다.

예를 들어, 콜렉션 작성 또는 콜렉션 업데이트 API에서 Webhook 오브젝트의 Secret 필드에 sample secret 를 지정하는 경우 Node.js:

const jwt = require('jsonwebtoken');
...
const token = request.headers.authentication; // grab the "Authentication" header
try {
  const decoded = jwt.verify(token, 'sample secret');
} catch(err) {
  // error thrown if token is invalid
}

ping 이벤트의 데이터 모델

다음은 ping 이벤트 매개변수입니다.

ping 이벤트
매개변수 설명
event 이벤트 이름은 ping 입니다.
instance_id Discovery 의 인스턴스 ID입니다.
version yyyy-mm-dd 형식의 Discovery API 버전입니다.
data

이벤트 정보가 있는 객체: url, events, metadata.

  • url : 구성된 웹훅 엔드포인트( URL ).

  • events : 이벤트 문자열 값의 배열. 이 배열의 이벤트는 웹훅 URL 으로 전송됩니다.

  • metadata : 생성된 웹훅에 특정한 정보를 가진 객체입니다.

created_at 이벤트가 생성된 날짜와 시간입니다.

enrichment.batch.created 이벤트의 데이터 모델

다음은 enrichment.batch.created 이벤트 매개변수입니다.

Enrichment.batch.created
매개변수 설명
event 이벤트 이름은 enrichment.batch.created 입니다.
instance_id 테넌트 ID라고도 하는 Discovery 인스턴스의 UUID입니다.
version yyyy-mm-dd 형식의 웹훅 이벤트 버전 날짜입니다.
data

이벤트 특정 정보가 있는 오브젝트: project_id, collection_id, enrichment_idbatch_id.

  • project_id: 프로젝트의 UUID (Universally Unique Identifier).

  • collection_id: 콜렉션의 UUID (Universally Unique Identifier).

  • enrichment_id: 인리치먼트의 UUID (Universally Unique Identifier).

  • batch_id: 일괄처리의 UUID (Universally Unique Identifier).

created_at 이벤트가 생성된 날짜와 시간입니다.

외부 인리치먼트 한계

외부 인리치먼트 한계
플랜 콜렉션당 최대 웹훅 인리치먼트 양 테넌트당 최대 웹훅 인리치먼트 양
구축 1 100년
추가 1 1,000만
프리미엄 1 100년

가져오기 일괄처리 메소드의 2진 첨부

pull batches 메소드는 Discovery에서 2진 첨부 파일을 리턴합니다.

리턴된 파일은 압축된 줄 바꾸기로 구분된 JSON (NDJSON) 파일입니다. 이 파일에는 문서 특성을 나타내는 구조화된 데이터가 포함되어 있습니다. 예를 들어, 다음은 NDJSON 파일에 포함된 JSON값입니다.

{
    "document_id": "3bafc09abfaacd90d66f57181b50d041",
    "location_encoding": "utf-16",
    "language": "en",
    "artifact": "{\"text_positions\":[0,21],\"space_above\":93.07864284515381,\"space_below\":32.53530788421631,\"is_start_of_block\":true,\"image_id\":-1}{\"text_positions\":[22,63],\"space_above\":32.53530788421631,\"space_below\":13.935576438903809,\"is_start_of_block\":true,\"image_id\":-1}{\"parent_document_id\":\"3bafc09abfaacd90d66f57181b50d041\",\"source\":{\"ListId\":\"f0ac1d32-b9e5-41af-b9da-e1e37e965d99\",\"UniqueId\":\"357d7a48-4460-442c-be56-d8bdd40a8c36\",\"ServerRelativeUrl\":\"/Lists/list1/Attachments/1/addattachments.csv\",\"FileNameAsPath\":{\"DecodedUrl\":\"addattachments.csv\"},\"ListItemId\":\"284dcb51-8021-56d0-9213-7f4eb134e083\",\"FileName\":\"addattachments.csv\",\"ServerRelativePath\":{\"DecodedUrl\":\"/Lists/list1/Attachments/1/addattachments.csv\"},\"WebId\":\"ad5bf592-3b4e-4dd1-bd3e-abc0ef179b03\"},\"ingest_datetime\":\"2023-06-26T09:24:02.573Z\",\"application_id\":\"sharepoint\",\"application_sub_type\":\"ListItemAttachmentCollection\"}0.51vanilla ice creamcontamination_tamperingotherchange_of_propertiesI love the ads for the new milk chocolate. Could you tell me the name of the actor in the commercial?{\"metadata\":{\"numPages\":\"54\",\"title\":\"\",\"publicationdate\":\"2010-06-03\"},\"info\":{\"histogram\":{\"mean-char-height\":{},\"mean-char-width\":{},\"number-of-chars\":{}},\"styles\":[]}}1451692800000",
    "features": [
        {
            "type": "field",
            "location": {
                "begin": 0,
                "end": 128
            },
            "properties": {
                "field_name": "multi_nested",
                "field_index": 0,
                "field_type": "json"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 128,
                "end": 258
            },
            "properties": {
                "field_name": "multi_nested",
                "field_index": 1,
                "field_type": "json"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 258,
                "end": 889
            },
            "properties": {
                "field_name": "metadata",
                "field_index": 0,
                "field_type": "json"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 889,
                "end": 892
            },
            "properties": {
                "field_name": "claim_score",
                "field_index": 0,
                "field_type": "double"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 892,
                "end": 893
            },
            "properties": {
                "field_name": "claim_id",
                "field_index": 0,
                "field_type": "long"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 893,
                "end": 910
            },
            "properties": {
                "field_name": "claim_product",
                "field_index": 0,
                "field_type": "string"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 910,
                "end": 933
            },
            "properties": {
                "field_name": "label",
                "field_index": 0,
                "field_type": "string"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 933,
                "end": 938
            },
            "properties": {
                "field_name": "label",
                "field_index": 1,
                "field_type": "string"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 938,
                "end": 958
            },
            "properties": {
                "field_name": "label",
                "field_index": 2,
                "field_type": "string"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 958,
                "end": 1059
            },
            "properties": {
                "field_name": "body",
                "field_index": 0,
                "field_type": "string"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 1059,
                "end": 1230
            },
            "properties": {
                "field_name": "nested",
                "field_index": 0,
                "field_type": "json"
            }
        },
        {
            "type": "field",
            "location": {
                "begin": 1230,
                "end": 1243
            },
            "properties": {
                "field_name": "claim_date",
                "field_index": 0,
                "field_type": "date"
            }
        }
    ]
}

다음은 2진 파일 특성입니다.

메소드 2진파일 특성 가져오기
특성 유형 설명
document_id string 문서의 식별자입니다.
location_encoding string 각 기능의 위치를 계산하는 데 사용되는 인코딩 유형입니다. 지원되는 유형은 utf-8, utf-16utf-32 입니다. 외부 인리치먼트 애플리케이션은 발견에서 해당 문서의 location_encoding 를 기반으로 각 기능의 위치를 계산해야 합니다. 데이터의 문자열 표시에서 기능의 위치는 외부 인리치먼트를 구현하는 데 사용되는 프로그래밍 언어의 인코딩 유형에 따라 다릅니다. 예를 들어, C++및 Go는 UTF-8을 사용하고, Java 및 JavaScript 는 UTF-16을 사용하며, Python 은 UTF-32를 사용합니다.
language string 문서의 컨텐츠 언어입니다.
artifact string 모든 텍스트 값의 패키지입니다.
features array 문서의 기능 목록입니다. 더 자세한 정보는 기능 유형을 참고하세요.

푸시 배치 메소드의 2진 첨부

외부 인리치먼트 후에 문서를 push batches 메소드의 2진 첨부 파일로 Discovery에푸시할 수 있습니다.

파일은 문서 특성을 나타내는 구조화된 데이터가 있는 압축된 NDJSON 파일이어야 합니다. 예를 들어, 다음은 NDJSON 파일입니다.

{
  "document_id": "3bafc09abfaacd90d66f57181b50d041",
  "features": [
    {
      "type": "annotation",
      "location": {
        "begin": 958,
        "end": 1000
      },
      "properties": {
        "type": "element_classes",
        "class_name": "expression",
        "confidence": 0.7905777096748352
      }
    },
    {
      "type": "annotation",
      "location": {
        "begin": 1001,
        "end": 1059
      },
      "properties": {
        "type": "element_classes",
        "class_name": "question",
        "confidence": 0.9507029056549072
      }
    },
    {
      "type": "annotation",
      "location": {
        "begin": 1035,
        "end": 1040
      },
      "properties": {
        "type": "entities",
        "entity_type": "JobTitle",
        "entity_text": "actor",
        "confidence": 0.70953685
      }
    },
    {
      "type": "annotation",
      "properties": {
        "type": "document_classes",
        "class_name": "amount.shortage",
        "confidence": 0.43297016620635986
      }
    },
    {
      "type": "notice",
      "properties": {
        "description": "something wrong happened",
      }
    },
    {
      "type": "notice",
      "properties": {
        "description": "something wrong happened again",
        "created": 1689076276402,
      }
    }
  ]
}

다음은 2진 파일 특성입니다.

푸시 메소드 2진파일 특성
특성 유형 설명
document_id string 문서의 식별자입니다.
features array 문서의 기능 목록입니다. 더 자세한 정보는 기능 유형을 참고하세요.

기능 유형

type 기능은 2진 파일에서 다음 중 하나일 수 있습니다.

기능 유형
기능 유형 설명
field string 문서의 특정 필드 값을 나타냅니다.
annotation string 문서를 강화할 수 있는 특정 어노테이션을 나타냅니다.
notice string 문서 강화 중에 외부 애플리케이션에서 발생할 수 있는 오류를 나타냅니다. notice 의 정보는 감지 UI에서 메시지를 생성하는 데 사용됩니다.

다음은 2진 파일의 기타 특성입니다.

2진파일의 기타 특성
기능 유형 설명
location object beginend 값을 사용하여 artifact 에서 텍스트 값을 가져오기 위한 위치 정보입니다. begin 값은 아티팩트의 시작 위치를 나타내는 문자열 값입니다. end 값은 아티팩트의 독점 종료 위치를 나타내는 문자열 값입니다. 기능이 문서 레벨 정보를 나타내는 경우 이 특성은 널입니다. 예를 들어, type=annotationproperties.type=document_classes 인 경우입니다.
properties object 문서에 있는 기능의 특성입니다. 지원되는 속성은 기능의 언어( type )에 따라 다릅니다. 자세한 정보는 필드 유형 특성, 어노테이션 유형 특성알림 유형 특성 을 참조하십시오.

필드 유형 특성

field 유형의 경우 다음 특성은 원래 파일에서 Discovery에 의해 변환된 문서의 특정 필드를 나타냅니다.

필드 유형 특성
특성 유형 설명
field_name string 필드 이름입니다.
field_index int 필드 값의 색인입니다. 이 값은 단일 값 필드의 경우 0 이지만 필드가 다중 값인 경우 (예: 값 배열의 경우) > 0 일 수 있습니다.
field_type string (열거: long, double, date, json) 기능의 데이터 유형입니다. 이 값은 프로그래밍 언어에서 기능의 텍스트 표시를 구문 분석하는 방법을 판별합니다.

어노테이션 유형 특성

annotation 유형의 경우 다음 특성은 문서를 강화할 수 있는 어노테이션을 표시합니다.

어노테이션 유형 특성
특성 유형 설명
type string (열거: entities, element_classes, document_classes) 기능이 나타내는 강화된 어노테이션의 유형입니다. entities 는 강화된 필드의 엔티티에 병합됩니다. element_classes 는 강화된 필드의 요소 클래스에 병합됩니다.  document_classes 는 문서 레벨 강화 필드의 클래스에 병합됩니다.
confidence double 외부 모델에 의한 선택적 신뢰도 점수입니다. 0- 1 사이에 있으며 기본적으로 0 입니다.
entity_type string 외부 모델이 사물에 지정하는 엔티티의 유형입니다. entities 유형에 필요합니다.
entity_text string 외부 애플리케이션이 추출하는 엔티티의 대표 텍스트입니다. entities 유형에 필요합니다.
class_name string 외부 애플리케이션이 사물에 지정하는 클래스의 이름입니다. element_classesdocument_classes 유형에 필요합니다.

알림 유형 특성

notice 유형의 경우 다음 특성은 문서를 강화하는 동안 외부 애플리케이션에서 발생한 오류 및 예외를 표시합니다.

통지 유형 등록 정보
특성 유형 설명
description string 외부 인리치먼트 중에 발생한 오류를 설명하는 메시지입니다.
created long 외부 인리치먼트 중에 오류가 발생한 Unix 에포크 시간 (밀리초) 입니다.