Amazon Bedrock 및 Amazon Neptune을 사용하여 구조화되지 않은 금융 데이터에서 숨겨진 연결 발견
이 리포지토리에는 Generative AI와 지식 그래프를 결합하여 금융 서비스용 비정형 데이터를 처리하는 확장 가능한 이벤트 기반 서버리스 시스템을 만드는 방법을 보여주는 프로토타입 솔루션을 배포하기 위한 코드가 포함되어 있습니다. 이 솔루션은 조직의 자산 관리자가 투자 포트폴리오에서 숨겨진 연결을 찾아내는 데 도움이 될 수 있으며, 금융 뉴스를 소비하고 투자 포트폴리오와의 연결을 이해할 수 있는 사용하기 쉬운 샘플 사용자 인터페이스를 제공합니다.
비즈니스 사용 사례
자산 관리자는 일반적으로 자신의 포트폴리오에 있는 다수의 회사에 투자하며, 해당 회사와 관련된 모든 뉴스를 추적할 수 있어야 합니다. 이러한 뉴스는 시장 동향에 앞서고, 투자 기회를 식별하고, 투자를 더 잘 관리하는 데 도움이 되기 때문입니다. 포트폴리오.
일반적으로 뉴스 추적은 피투자 회사명을 사용하여 간단한 키워드 기반 뉴스 알림을 설정하면 쉽게 수행할 수 있지만, 뉴스 이벤트가 피투자 회사에 직접적인 영향을 미치지 않는 경우에는 이것이 점점 더 어려워집니다. 예를 들어, 잠재적으로 회사의 공급망을 혼란에 빠뜨릴 수 있는 피투자 회사의 공급업체에 영향을 미칠 수 있습니다. 또는 피투자 회사의 고객에게 영향이 미칠 수 있습니다. 이러한 회사의 수익이 소수의 주요 고객에게 집중되어 있다면 이는 잠재적으로 귀하의 투자에 부정적인 재정적 영향을 미칠 수 있습니다.
이러한 2차 또는 3차 영향은 식별하기 어렵고 추적하기가 더욱 어렵습니다. 이 자동화된 솔루션을 통해 자산 관리자는 투자 포트폴리오를 둘러싼 관계에 대한 지식 그래프를 구축한 다음 이 지식을 활용하여 최신 뉴스에서 상관 관계 및 통찰력을 얻을 수 있습니다.
건축학
단계 함수 그래프(지점 #4부터)
솔루션 흐름(단계별)
- 공식 프록시/연간/10,000개 보고서(.PDF)를 Amazon S3 버킷에 업로드합니다.
- 업로드할 S3 버킷의 이름은 CloudFormation 콘솔 - 기본 스택 출력 - "IngestionBucket"에서 검색할 수 있습니다.
- 사용되는 보고서는 (뉴스/타블로이드와 달리) 지식 그래프에 부정확한 데이터가 포함되는 것을 최소화하기 위해 공식적으로 게시된 보고서여야 합니다.
- S3 이벤트 알림은 S3 버킷/파일 이름을 Amazon Simple Queue Service Queue(FIFO)로 보내는 AWS Lambda 함수를 트리거합니다.
- FIFO 대기열을 사용하면 보고서 수집 프로세스가 순차적으로 수행되어 지식 그래프에 중복 데이터가 포함될 가능성이 줄어듭니다.
- Amazon EventBridge 시간 기반 이벤트는 매분 실행되어 AWS Lambda 함수를 호출합니다. 이 함수는 SQS에서 사용 가능한 다음 대기열 메시지를 검색하고 AWS Step Function의 실행을 비동기식으로 시작합니다.
- 단계 함수 상태 머신은 주요 정보를 추출하고 지식 그래프에 삽입하여 업로드된 문서를 처리하는 일련의 작업을 실행합니다.
- 작업
- Amazon Textract를 사용하여 Amazon S3의 프록시/연간/10k 보고서 파일(PDF)에서 텍스트 콘텐츠를 추출하고 처리를 위해 여러 개의 작은 텍스트 청크로 분할합니다. Amazon DynamoDB에 텍스트 청크를 저장합니다.
- Amazon Bedrock에서 Anthropic의 Claude v3 Sonnet을 사용하여 처음 몇 개의 텍스트 청크를 처리하여 관련 속성(예: 산업)과 함께 보고서에서 언급하는 주요 엔터티를 결정합니다.
- DynamoDB에서 텍스트 청크를 검색하고 각 텍스트 청크에 대해 람다 함수를 호출하여 Amazon Bedrock을 사용하여 엔터티(회사/사람) 및 기본 엔터티에 대한 관계(고객/공급업체/파트너/경쟁자/이사)를 추출합니다.
- 추출된 모든 정보를 통합합니다.
- Amazon Bedrock을 사용하여 소음/관련 없는 엔터티(예: "소비자"와 같은 일반적인 용어)를 필터링합니다.
- Amazon Bedrock을 사용하면 지식 그래프에서 유사한 개체 목록에 대해 추출된 정보를 사용하여 추론하여 모호성을 제거할 수 있습니다. 엔터티가 없으면 삽입합니다. 그렇지 않으면 지식 그래프에 이미 존재하는 엔터티를 사용하세요. 추출된 모든 관계를 삽입합니다.
- SQS 대기열 메시지 및 S3 파일을 삭제하여 정리를 수행합니다.
- 이 단계가 완료되면 지식 그래프가 업데이트되어 사용할 수 있습니다.
- 사용자는 엔터티/감정/연결 경로 정보가 풍부한 뉴스 기사를 보기 위해 React 기반 웹 애플리케이션에 액세스합니다.
- 웹 애플리케이션의 URL은 CloudFormation 콘솔 - webapp 스택 출력 - "WebApplicationURL"에서 복사할 수 있습니다.
- 이는 데모용 샘플 솔루션이므로 사용자는 오른쪽 상단에 있는 기어 아이콘을 클릭하여 웹 애플리케이션에서 API 엔드포인트, API 키 및 뉴스 API 키를 지정합니다.
- API 엔드포인트는 CloudFormation 콘솔 - 메인 스택 출력 - "APIEndpoint"에서 복사할 수 있습니다.
- API 키는 API Gateway API 키 콘솔 - 메인 스택에서 복사할 수 있습니다.
- 뉴스 API 키는 무료로 계정을 만든 후 NewsAPI.org에서 얻을 수 있습니다.
- 값을 입력한 후 "설정 새로 고침" 버튼을 클릭하세요.
- 사용자는 웹 애플리케이션을 사용하여 모니터링할 연결 경로의 홉 수(기본값 N=2)를 지정합니다.
- 이렇게 하려면 오른쪽 상단 모서리에 있는 기어 아이콘을 클릭한 다음 N 값을 지정합니다.
- 사용자는 웹 애플리케이션을 사용하여 추적할 엔터티 목록을 지정합니다.
- 그렇게 하려면 오른쪽 상단 모서리에 있는 기어 아이콘을 클릭한 다음 해당 엔터티를 INTERESTED=YES/NO로 표시하는 "관심 있음" 스위치를 전환하세요.
- 이는 중요한 단계이며 뉴스 기사가 처리되기 전에 완료해야 합니다.
- 가상 뉴스를 생성하려면 사용자가 "샘플 뉴스 생성" 버튼을 클릭하여 뉴스 수집 프로세스에 입력할 무작위 콘텐츠가 포함된 10개의 샘플 금융 뉴스를 생성합니다.
- 콘텐츠는 Amazon Bedrock을 사용하여 생성되었으며 순전히 허구입니다.
- 실제 뉴스를 다운로드하려면 사용자가 "최신 뉴스 다운로드" 버튼을 클릭하여 오늘 발생하는 주요 뉴스(NewsAPI.org 제공)를 다운로드합니다.
- 뉴스(.TXT)를 S3 버킷에 업로드합니다.
- 업로드할 S3 버킷의 이름은 CloudFormation 콘솔 - 기본 스택 출력 - "NewsBucket"에서 검색할 수 있습니다.
- 8단계 또는 9단계에서는 뉴스를 S3 버킷에 자동으로 업로드했지만, AWS Data Exchange 또는 타사 뉴스 제공자와 같은 선호하는 뉴스 제공자에 대한 통합을 구축하여 뉴스 기사를 S3 버킷에 파일로 드롭할 수도 있습니다.
- 뉴스 데이터 파일 콘텐츠의 형식은 다음과 같습니다: {dd mmm yyyy}{title}{news content}
- S3 이벤트 알림은 S3 버킷/파일 이름을 SQS(표준)로 전송하여 여러 람다 함수를 트리거하여 뉴스 데이터를 병렬로 처리합니다.
- Amazon Bedrock을 사용하면 Lambda 함수가 뉴스에 언급된 엔터티와 관련 정보, 관계 및 언급된 엔터티의 감정을 추출합니다.
- 그런 다음 지식 그래프를 확인하고 Amazon Bedrock을 사용하여 뉴스와 지식 그래프 내에서 사용 가능한 정보를 사용하여 추론하여 명확성을 수행하여 해당 엔터티를 식별합니다.
- 엔터티를 찾으면 N=2 홉 내에 있는 지식 그래프에서 INTERESTED=YES로 표시된 엔터티에 연결되는 모든 연결 경로를 검색하고 반환합니다.
- 웹 애플리케이션은 1초마다 자동으로 새로 고쳐져 처리된 최신 뉴스 세트를 가져와 웹 애플리케이션에 표시합니다.
React 웹 애플리케이션 - 설정
그래프 탐색기
이 리포지토리는 또한 사용자가 추출된 엔터티 및 관계를 시각화할 수 있는 React 기반 웹 애플리케이션인 Graph Explorer(github/aws/graphexplorer)를 배포합니다.
- Graph Explorer에 액세스하려면 CloudFormation 콘솔 - 메인 스택 출력 - "GraphExplorer"에서 URL을 검색하십시오.
- 웹 애플리케이션에 액세스할 때 사이트에 사용되는 인증서가 자체 서명되어 있으므로 브라우저에 잠재적인 보안 위험에 대한 경고가 표시됩니다. 계속 진행하시면 됩니다. 경고를 없애려면 이 글을 읽어보세요.
- 애플리케이션이 시작되면 자동으로 AWS Neptune 데이터베이스에 연결되어 데이터를 동기화합니다. 언제든지 새로 고침 아이콘을 클릭하여 데이터를 다시 동기화할 수 있습니다.
- 지식 그래프 시각화를 시작하려면 오른쪽 상단의 "그래프 탐색기 열기"를 클릭하세요.
- 그래프 탐색기에 대한 자세한 내용을 보려면 github/aws/graphexplorer로 이동하세요.
- Graph Explorer는 솔루션의 일부로 필요하지 않지만 추출된 관계를 더 쉽게 탐색할 수 있도록 해줍니다.
데모 - 그래프 탐색기 시작하기
그래프 탐색기 시작하기.mp4
다음은 Graph Explorer의 기능에 대한 또 다른 비디오 데모입니다. 비디오 데모 링크
그래프 탐색기 - 지식 그래프
(그래프 탐색기 도구를 사용하여 Amazon Neptune 그래프 데이터베이스의 시각적 탐색)
배포 지침
이 리포지토리는 두 개의 CDK 스택에 전체 프로토타입 솔루션을 배포하는 CDK 애플리케이션을 제공합니다.
- 필요한 서비스와 Amazon Bedrock 모델이 있는 모든 지역(예: us-east-1, us-west-2)에 배포할 수 있는 기본 애플리케이션 스택("메인 스택")입니다.
- AWS WAF가 필요하므로 us-east-1 에만 배포할 수 있는 웹 애플리케이션 스택("webapp 스택")입니다.
두 스택을 서로 다른 지역이나 동일한 지역(예: us-east-1)에 배포할 수 있습니다.
사용된 AWS 서비스
- 아마존 기반암
- 아마존 해왕성
- 아마존 텍스트랙트
- 아마존 다이나모DB
- AWS 단계 함수
- AWS 람다
- Amazon Simple Queue Service(SQS)
- 아마존 이벤트브리지
- 아마존 심플 스토리지 서비스(S3)
- 아마존 클라우드프론트
- AWS WAF
- Amazon Elastic Compute Cloud(EC2)
- 아마존 VPC
- 아마존 API 게이트웨이
- AWS ID 및 액세스 관리
사전 요구 사항
- Amazon Bedrock - Anthropic Claude v3 Sonnet에 액세스해야 합니다. Amazon Bedrock에서 모델 액세스를 설정하려면 이 내용을 읽어보세요.
- Python - Python 3 이상이 필요합니다.
- 노드 - v18.0.0 이상이 필요합니다.
- Docker - Docker Buildx에는 v24.0.0 이상이 필요하며 docker 데몬이 실행되어야 합니다.
virtualenv 설정
MacOS 및 Linux에서 virtualenv를 수동으로 생성하려면:
init 프로세스가 완료되고 virtualenv가 생성되면 다음 단계를 사용하여 virtualenv를 활성화할 수 있습니다.
$ source .venv/bin/activate
Windows 플랫폼인 경우 다음과 같이 virtualenv를 활성화합니다.
% .venvScriptsactivate.bat
virtualenv가 활성화되면 필요한 종속성을 설치할 수 있습니다.
$ pip install -r requirements.txt
배포 전
CDK를 통해 AWS 계정에 코드를 처음 배포하는 경우 먼저 us-east-1과 배포할 리전 모두에서 AWS 계정을 부트스트랩해야 합니다. 그렇지 않으면 이 단계를 건너뛸 수 있습니다.
$ cdk bootstrap aws:///us-east-1 aws:///
그런 다음 아래 명령을 실행하여 다음을 수행하십시오.
- React 기반 웹 애플리케이션 구축
- AWS Lambda 계층 생성에 필요한 Python 종속성을 다운로드합니다.
- 사용자 정의 라이브러리 복사(connectionsinsights)
배포
솔루션을 배포하려면(약 30분 소요):
정리하다
솔루션을 삭제하려면 다음을 수행하세요.
S3 버킷이 비어 있지 않아 삭제 실패가 발생하는 경우 이는 cdk 삭제 프로세스의 일부로 S3 버킷이 비워진 후 S3 버킷에 기록된 액세스 로그 파일 때문일 수 있습니다. 이런 일이 발생하면 해당 버킷을 비우고 정리 명령을 다시 실행하세요.