Top Secret은 단순 정규 표현식만으로는 식별하기 어려운 민감 정보를 효과적으로 처리하기 위해 NER(Named-Entity Recognition) 기술을 활용합니다. NER은 사람 이름, 위치 등 실제 세계의 객체를 식별하고 분류하는 데 사용되며, MITIE Ruby와 같은 도구를 통해 NER 모델과의 연동이 용이합니다. Top Secret은 이러한 기술들을 결합하여 자유 텍스트에서 민감 정보를 식별하고 대체하는 강력한 기능을 제공합니다.
Top Secret의 주요 기능 및 활용
-
민감 정보 필터링: 자유 텍스트 내의 민감 정보(예: 이름, 주소, 이메일, 전화번호)를 식별하여
[PERSON_1],[LOCATION_1]과 같은 대체 값으로 변환합니다. 이는 외부 API(챗봇, LLM 등)로 전송하기 전에 데이터를 보호하는 데 필수적입니다.ruby result = TopSecret::Text.filter("Ralph lives in Boston.") result.output # => [PERSON_1] lives in [LOCATION_1]. -
필터링된 정보 복원: Top Secret은 필터링 과정에서 원본 정보와 대체 값 간의 매핑(
result.mapping)을 제공합니다. 이를 통해 외부 API로부터 받은 응답을 사용자에게 보여주기 전에 원래의 민감 정보로 복원할 수 있습니다.ruby mapping = result.mapping # => { PERSON_1: "Ralph", LOCATION_1: "Boston" } response = "Hi [PERSON_1]! How is the weather in [LOCATION_1] today?" restored_response = TopSecret::FilteredText.restore(response, mapping: mapping).output # => Hi Ralph! How is the weather in Boston today? -
대화 상태 관리: 챗봇과의 대화에서 이전 메시지의 민감 정보가 유출되지 않도록 모든 메시지를 필터링한 후 LLM에 전달하는 데 사용될 수 있습니다.
TopSecret::Text.filter_all메서드를 통해 여러 메시지를 한 번에 처리할 수 있습니다. -
데이터베이스 유효성 검사: 데이터베이스에 민감 정보가 저장되는 것을 방지하기 위한 유효성 검사 도구로 활용됩니다.
ApplicationRecord모델 내에서 콜백을 통해 콘텐츠에 민감 정보가 포함되어 있는지 확인하고, 필요시 오류를 추가할 수 있습니다. -
필터 사용자 정의: 필터링 규칙이 너무 엄격하다고 판단될 경우, 특정 필터(예:
people_filter,location_filter)를nil로 설정하여 비활성화하거나 재정의하여 유연하게 적용할 수 있습니다.