使用 Amazon Bedrock 和 Amazon Neptune 发现非结构化财务数据中的隐藏连接
该存储库包含用于部署原型解决方案的代码,该解决方案演示了如何将生成式 AI 和知识图结合起来创建可扩展的、事件驱动的无服务器系统来处理金融服务的非结构化数据。该解决方案可以帮助组织中的资产管理者发现其投资组合中隐藏的联系,并提供易于使用的示例用户界面来消费金融新闻并了解其与投资组合的联系。
业务用例
资产管理公司通常投资于其投资组合中的大量公司,他们需要能够跟踪与这些公司相关的任何新闻,因为这些新闻将帮助他们领先于市场动向,识别投资机会,并更好地管理他们的投资文件夹。
一般来说,新闻跟踪可以通过使用被投资公司名称设置一个简单的基于关键字的新闻提醒来轻松完成,但当新闻事件不直接影响被投资公司时,这会变得越来越困难。例如,影响可能是针对被投资公司的供应商,这可能会扰乱该公司的供应链。或者,影响可能会影响到您所投资公司的客户的客户。如果这些公司的收入集中于少数关键客户,这可能会对您的投资产生负面的财务影响。
这种二阶或三阶影响很难识别,更难以追踪。通过这种自动化解决方案,资产管理者可以建立围绕其投资组合的关系的知识图,然后利用这些知识从最新新闻中得出相关性和见解。
建筑学
阶跃函数图(从第 4 点开始)
解决方案流程(逐步)
- 将官方代理/年度/10k 报告 (.PDF) 上传到 Amazon S3 存储桶。
- 可以从 CloudFormation 控制台 - 主堆栈输出 -“IngestionBucket”检索要上传到的 S3 存储桶的名称
- 请注意,使用的报告应该是正式发布的报告,以最大限度地减少知识图中包含不准确的数据(而不是新闻/小报)。
- S3 事件通知触发 AWS Lambda 函数,该函数将 S3 存储桶/文件名发送到 Amazon Simple Queue Service 队列 (FIFO)。
- 使用 FIFO 队列是为了确保报告摄取过程按顺序执行,以减少将重复数据引入知识图谱的可能性。
- Amazon EventBridge 基于时间的事件每分钟运行一次以调用 AWS Lambda 函数。该函数将从 SQS 检索下一条可用队列消息并异步启动 AWS Step Function 的执行。
- 阶跃函数状态机执行一系列任务,通过提取关键信息并将其插入到知识图中来处理上传的文档。
- 任务
- 使用 Amazon Textract,从 Amazon S3 中的代理/年度/10k 报告文件 (PDF) 中提取文本内容,并将其拆分为多个较小的文本块进行处理。将文本块存储在 Amazon DynamoDB 中。
- 在 Amazon Bedrock 上使用 Anthropic 的 Claude v3 Sonnet,处理前几个文本块以确定报告所指的主要实体以及相关属性(例如行业)。
- 使用 Amazon Bedrock 从 DynamoDB 检索文本块,并针对每个文本块调用 lambda 函数来提取实体(公司/个人)及其与主实体的关系(客户/供应商/合作伙伴/竞争对手/董事)。
- 整合所有提取的信息
- 使用 Amazon Bedrock 过滤掉噪音/不相关实体(即“消费者”等通用术语)。
- 使用 Amazon Bedrock 通过使用提取的信息针对知识图中的相似实体列表进行推理来消除歧义。如果该实体不存在,则插入它。否则,使用知识图中已存在的实体。插入提取的所有关系。
- 通过删除 SQS 队列消息和 S3 文件来执行清理。
- 此步骤完成后,您的知识图就会更新并可供使用。
- 用户访问基于 React 的 Web 应用程序来查看富含实体/情感/连接路径信息的新闻文章。
- 可以从 CloudFormation 控制台复制 Web 应用程序的 URL - web 应用程序堆栈输出 - “WebApplicationURL”
- 由于这是用于演示目的的示例解决方案,用户通过单击右上角的齿轮图标来指定 Web 应用程序上的 API 端点、API 密钥和新闻 API 密钥。
- 可以从 CloudFormation 控制台 - 主堆栈输出 - “APIEndpoint”复制 API 端点。
- API 密钥可以从 API Gateway API 密钥控制台 - 主堆栈复制。
- 创建帐户后,可以免费从 NewsAPI.org 获取新闻 API 密钥。
- 填写值后单击“刷新设置”按钮。
- 使用 Web 应用程序,用户指定要监视的连接路径上的跃点数(默认 N=2)。
- 为此,请单击右上角的齿轮图标,然后指定 N 的值。
- 用户使用 Web 应用程序指定要跟踪的实体列表。
- 为此,请单击右上角的齿轮图标,然后切换“感兴趣”开关,将相应的实体标记为“感兴趣=是/否”。
- 这是重要的一步,必须在处理任何新闻文章之前完成。
- 要生成虚构新闻,用户单击“生成样本新闻”按钮即可生成 10 条样本财经新闻,其中的随机内容将被输入到新闻摄取过程中。
- 内容是使用 Amazon Bedrock 生成的,纯属虚构。
- 要下载实际新闻,用户单击“下载最新新闻”按钮即可下载今天发生的热门新闻(由 NewsAPI.org 提供支持)。
- 将新闻 (.TXT) 上传到 S3 存储桶。
- 可以从 CloudFormation 控制台 - 主堆栈输出 -“NewsBucket”检索要上传到的 S3 存储桶的名称
- 步骤 #8 或 #9 已自动将新闻上传到 S3 存储桶,但您也可以构建与首选新闻提供商(例如 AWS Data Exchange 或任何第三方新闻提供商)的集成,以将新闻文章作为文件放入 S3 存储桶中。
- 新闻数据文件内容的格式应为:{dd mmm yyyy}{title}{news content}
- S3 事件通知将 S3 存储桶/文件名发送到 SQS(标准),SQS 会触发多个 lambda 函数并行处理新闻数据。
- 使用 Amazon Bedrock,lambda 函数提取新闻中提到的实体以及所提到实体的任何相关信息、关系和情绪。
- 然后,它会对照知识图进行检查,并使用 Amazon Bedrock 通过使用新闻和知识图中的可用信息进行推理来执行消歧操作,以识别相应的实体。
- 一旦找到实体,它就会搜索并返回连接到知识图中标记为 INTERESTED=YES 且距离 N=2 跳以内的实体的任何连接路径。
- Web 应用程序每 1 秒自动刷新一次,以提取最新的一组已处理新闻以显示在 Web 应用程序上。
React Web 应用程序 - 设置
图形浏览器
该存储库还部署了 Graph Explorer (github/aws/graphexplorer),这是一个基于 React 的 Web 应用程序,使用户能够可视化提取的实体和关系。
- 要访问 Graph Explorer,请从 CloudFormation 控制台检索 URL - 主堆栈输出 - “GraphExplorer”
- 访问 Web 应用程序时,您将收到浏览器潜在安全风险的警告,因为该网站使用的证书是自签名的。您可以继续进行。要消除警告,请阅读此内容。
- 启动后,应用程序将自动连接到AWS Neptune数据库并同步其数据。您可以随时单击刷新图标来重新同步数据。
- 点击右上角的“Open Graph Explorer”开始可视化知识图谱。
- 有关 Graph Explorer 的更多信息,请访问 github/aws/graphexplorer。
- 请注意,解决方案中不需要 Graph Explorer,但它可以让您更轻松地探索提取的关系。
演示 - Graph Explorer 入门
开始使用-graph-explorer.mp4
这是有关 Graph Explorer 功能的另一个视频演示:视频演示链接
Graph Explorer - 知识图谱
(使用 Graph Explorer 工具对 Amazon Neptune 图形数据库进行可视化探索)
部署说明
该存储库提供了一个 CDK 应用程序,它将在两个 CDK 堆栈上部署整个原型解决方案:
- 主应用程序堆栈(“主堆栈”)可部署到具有所需服务和 Amazon Bedrock 模型的任何区域(例如 us-east-1、us-west-2)。
- Web 应用程序堆栈(“webapp 堆栈”)只能部署到us-east-1,因为它需要 AWS WAF。
您可以将两个堆栈部署到不同的区域或同一区域(即 us-east-1)。
使用的 AWS 服务
- 亚马逊基岩
- 亚马逊海王星
- 亚马逊文本
- 亚马逊动态数据库
- AWS 步进函数
- AWS Lambda
- 亚马逊简单队列服务 (SQS)
- 亚马逊事件桥
- 亚马逊简单存储服务(S3)
- 亚马逊云前
- AWS 网络应用防火墙
- 亚马逊弹性计算云 (EC2)
- 亚马逊专有网络
- 亚马逊 API 网关
- AWS 身份和访问管理
先决条件
- Amazon Bedrock - 您将需要访问 Anthropic Claude v3 Sonnet。要在 Amazon Bedrock 中设置模型访问,请阅读本文。
- Python - 您需要 Python 3 及更高版本。
- 节点 - 您需要 v18.0.0 及更高版本。
- Docker - 您需要使用 Docker Buildx v24.0.0 及更高版本,并运行 docker 守护进程。
设置虚拟环境
要在 MacOS 和 Linux 上手动创建 virtualenv:
初始化过程完成并创建 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 的 Web 应用程序
- 下载创建 AWS Lambda 层所需的 python 依赖项
- 复制自定义库(connectionsinsights)
部署
部署解决方案(大约需要 30 分钟):
清理
销毁解决方案:
如果由于 S3 存储桶不为空而导致删除失败,这可能是由于在 cdk 销毁过程中清空 S3 存储桶后,访问日志文件写入了这些存储桶。如果发生这种情况,只需清空这些存储桶并再次重新运行清理命令即可。