多模态数据是金融行业的宝贵组成部分,包括市场、经济、客户、新闻和社交媒体以及风险数据。金融机构生成、收集和使用这些数据以获得对金融业务的洞见,做出更好的决策并提高绩效。然而,多模态数据存在挑战,由于金融系统和数据格式以及质量的复杂性和缺乏标准化,以及数据的碎片化和非结构化特性。金融客户经常描述从多模态数据中获取金融洞见的操作开销,这需要复杂的提取和转换逻辑,从而导致工作量和成本的膨胀。多模态数据的技术挑战还包括整合和建模不同数据类型的复杂性,多模态数据(文本、图像、音频、视频)的组合困难以及需要先进的计算机科学技能和复杂的分析工具。
处理多模态数据的一种越来越受欢迎的方法是使用多模态代理。多模态代理是能够使用工具包中的适当工具理解和分析多模态数据的AI系统。它们能够连接这些不同数据类型的洞见,以获得更全面的理解并生成适当的响应。多模态代理与生成式AI结合在金融市场中有广泛的应用。以下是一些常见的用例:
- 智能报告和市场情报 – AI可以分析各种金融信息来源以生成市场情报报告,帮助分析师、投资者和公司保持趋势更新。多模态代理可以快速总结冗长的财务报告,为分析师节省大量时间和精力。
- 定量建模和预测 – 生成模型可以综合大量金融数据来训练机器学习(ML)模型,用于股票价格预测、组合优化、风险建模等应用。理解多样化数据源的多模态模型可以提供更强大的预测。
- 合规和欺诈检测 – 此解决方案可以扩展到包括分析通信渠道(如电话、电子邮件、聊天、访问日志等)以识别潜在的内幕交易或市场操纵的监控工具。跨数据类型检测欺诈性勾结需要多模态分析。
具有生成式AI的多模态代理通过自动化重复和例行任务提高金融分析师的工作效率,为分析师腾出时间专注于高价值工作。多模态代理可以增强分析师获取洞见的能力,协助研究和分析。多模态代理还可以生成增强的定量分析和金融模型,使分析师能够更快速、更准确地工作。
使用AWS实现多模态代理可以在大规模上整合各种结构化和非结构化数据的关键洞见。多模态代理可以轻松地将Amazon Bedrock和Amazon SageMaker JumpStart的生成式AI功能与AWS Analytics和AI/ML服务的数据处理能力相结合,以在AWS内以安全可扩展的方式提供敏捷解决方案,使金融分析师能够高效地分析和获取多模态数据的洞见。亚马逊提供了一套能够实现自然语言处理(NLP)、语音识别、文本提取和搜索的AI服务:
- Amazon Comprehend是一种NLP服务,可以分析文本的关键短语和情感分析
- Amazon Textract是一种智能文档处理服务,可以准确提取文本和数据
- Amazon Transcribe是一种自动语音识别服务,可以将语音转换为文本
- Amazon Kendra是一种由ML驱动的企业搜索服务,可在各种数据源(包括文档和知识库)中查找信息
在本文中,我们展示了一个场景,金融分析师与组织的多模态数据进行交互,这些数据存储在专门构建的数据存储中,以获取金融洞见。在交互过程中,我们演示了多模态代理如何计划和运行用户查询,并从相关数据源检索结果。所有这些都是通过使用AWS服务实现的,从而提高金融分析师分析多模态金融数据(文本、语音和表格数据)的效率。
以下截图显示了界面的示例。
解决方案概述
以下图表说明了使用代理来使用多模态数据的生成式AI的概念架构。涉及的步骤如下:
- 金融分析师通过诸如聊天机器人等平台提出问题。
- 平台使用框架确定最适合的多模态代理工具来回答问题。
- 一旦确定,平台运行与先前确定的工具链接的代码。
- 工具按照金融分析师的要求生成金融数据的分析结果。
- 在总结结果时,大型语言模型检索并向金融分析师报告。
技术架构
多模态代理根据业务用户的自然语言提示来协调各种工具,以生成洞察力。对于非结构化数据,代理使用AWS Lambda函数和Amazon Textract进行文档分析,使用Amazon Transcribe进行语音识别,使用Amazon Comprehend进行自然语言处理,使用Amazon Kendra进行智能搜索。对于结构化数据,代理使用SQL Connector和SQLAlchemy进行数据库分析,其中包括Amazon Athena。代理还利用Lambda中的Python和Amazon SageMaker SDK进行计算和定量建模。代理还具有在Amazon DynamoDB中存储提示和结果的长期记忆。多模态代理位于SageMaker笔记本中,并根据业务用户的英语提示在Streamlit UI中协调这些工具。
技术架构的关键组件如下:
- 数据存储和分析 – 季度财务收入记录作为音频文件,财务年度报告作为PDF文件,S&P股票数据作为CSV文件托管在Amazon Simple Storage Service(Amazon S3)上。使用Athena对股票数据进行数据探索。
- 大型语言模型 – 大型语言模型(LLMs)可通过Amazon Bedrock,SageMaker JumpStart或API使用。
- 代理 – 我们使用LangChain的代理作为LLMs和其他工具的用户输入的非预定链式调用。在这些类型的链式调用中,有一个代理可以访问一套工具。每个工具都是为特定任务构建的。根据用户输入,代理决定调用哪个工具或哪些工具的组合来回答问题。针对我们的场景,我们创建了以下专用代理工具:
- 股票查询工具 – 使用Athena和SQLAlchemy查询S&P股票数据。
- 投资组合优化工具 – 根据选择的股票构建投资组合。
- 财务信息查找工具 – 使用Amazon Kendra搜索存储在多页PDF文件中的财务收入信息。
- Python计算工具 – 用于数学计算。
- 情感分析工具 – 使用Amazon Comprehend识别和评分特定主题上的情感。
- 检测短语工具 – 使用Amazon Comprehend在最近的季度报告中找到关键短语。
- 文本提取工具 – 使用Amazon Textract将季度报告的PDF版本转换为文本文件。
- 转录音频工具 – 使用Amazon Transcribe将音频录音转换为文本文件。
保存与代理的用户交互链的代理内存保存在DynamoDB中。
以下各节解释了一些主要步骤及其相关代码。要深入了解此解决方案和所有在此处显示的步骤的代码,请参阅GitHub存储库。
先决条件
要运行此解决方案,您必须具有LLM的API密钥,例如Anthropic Claude v2,或者可以访问Amazon Bedrock基础模型。
使用LLMs和LangChain从结构化和非结构化数据生成响应,您需要通过Amazon Bedrock、SageMaker JumpStart或API密钥访问LLMs,并使用与SQLAlchemy兼容的数据库。还需要AWS身份和访问管理(IAM)策略,详细信息可以在GitHub存储库中找到。
多模态代理的关键组件
多模态代理有几个关键组件:
- 为多模态代理工具定义的函数
- 为多模态代理定义的工具
- 多模态代理的长期记忆
- 基于计划执行器的多模态代理(使用工具、LLMs和记忆定义)
在本节中,我们将用相关的代码片段来说明这些关键组件。
为多模态代理工具定义的函数
多模态代理需要使用各种AI服务来处理不同类型的数据-文本、语音、图像等。其中一些函数可能需要调用AWS AI服务,如Amazon Comprehend来分析文本,Amazon Textract来分析图像和文档,以及Amazon Transcribe来将语音转换为文本。这些函数可以在代理内部本地调用,也可以部署为代理可以调用的Lambda函数。Lambda函数内部调用相关的AWS AI服务,并将结果返回给代理。这种方法将逻辑模块化,使代理更易于维护和扩展。
以下函数定义了如何根据选择的股票计算优化投资组合。将基于Python的函数转换为LLM工具的一种方法是使用BaseTool包装器。
class OptimizePortfolio(BaseTool):
name = "投资组合优化工具"
description = """
在构建最优投资组合或优化股票价格时使用此工具。
stock_ls应该是一个股票符号的列表,例如['WWW', 'AAA', 'GGGG']。
"""
def _run(self, stock_ls: List):
session = boto3.Session(region_name=region_name)
athena_client = session.client('athena')
database=database_name
table=table_Name
...
以下是调用AWS AI服务(Amazon Comprehend、Amazon Textract、Amazon Transcribe) API的Lambda代码:
def SentimentAnalysis(inputString):
print(inputString)
lambda_client = boto3.client('lambda')
lambda_payload = {"inputString:"+inputString}
response=lambda_client.invoke(FunctionName='FSI-SentimentDetecttion',
InvocationType='RequestResponse',
Payload=json.dumps(inputString))
print(response['Payload'].read())
return response
为多模态代理定义的工具
多模态代理可以访问各种工具以实现其功能。它可以查询股票数据库以回答关于股票的问题。它可以使用专用工具优化投资组合。它可以从Amazon Kendra检索信息,这是Amazon的企业搜索服务。Python REPL工具允许代理运行Python代码。以下代码显示了工具的结构,包括它们的名称和描述。本文的实际工具箱有八个工具:股票查询工具、投资组合优化工具、金融信息查找工具、Python计算工具、情感分析工具、检测短语工具、文本提取工具和转录音频工具。
tools = [
Tool(
name="金融信息查找工具",
func=run_chain,
description="""
使用Kendra查找金融信息时有用。
"""
),
Tool(
name="情感分析工具",
func=SentimentAnalysis,
description="""
在需要分析主题的情感时很有用。
"""
),
Tool(
name="检测短语工具",
func=DetectKeyPhrases,
description="""
在最近的季度报告中检测关键短语时很有用。
"""
),
...
]
多模态代理的长期记忆
以下代码说明了为多模态代理配置长期记忆。在这个代码中,我们将DynamoDB表作为记忆添加到其中,以存储提示和答案以供将来参考。
chat_history_table = dynamodb_table_name
chat_history_memory = DynamoDBChatMessageHistory(table_name=chat_history_table, session_id=chat_session_id)
memory = ConversationBufferMemory(memory_key="chat_history",
chat_memory=chat_history_memory, return_messages=True)
基于规划执行的多模态代理
基于规划执行的多模态代理架构有两个主要组件:一个规划器和一个执行器。规划器生成一个高级计划,其中包含运行和回答提示问题所需的步骤。然后,执行器使用语言模型和必要的工具为每个计划步骤生成适当的系统响应来运行此计划。请参阅以下代码:
llm = ChatAnthropic(temperature=0, anthropic_api_key=ANTHROPIC_API_KEY, max_tokens_to_sample = 512)
model = llm
planner = load_chat_planner(model)
system_message_prompt = SystemMessagePromptTemplate.from_template(combo_template)
human_message_prompt = planner.llm_chain.prompt.messages[1]
planner.llm_chain.prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
executor = load_agent_executor(model, tools, verbose=True)
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True, max_iterations=2)
根据金融分析师提出的问题的示例场景
在本节中,我们探讨了两个示例场景,以说明基于金融分析师提出的问题,多模态代理执行的端到端步骤。
场景1:金融分析师提出与结构化数据相关的问题
在此场景中,金融分析师用英语提出了一个与公司股票相关的问题给多模态代理。多模态LangChain代理根据问题提出了一个多步计划,并决定每个步骤使用哪些工具。以下图示了一个示例工作流程,其中包含以下步骤:
- 金融分析师通过用户界面用英语提出金融问题给多模态代理。
- 代理识别出它需要数据库工具来回答问题。它使用基于问题的LLM生成一个SQL查询,并查询Athena数据库。
- Athena运行SQL查询,检索相关结果(五家公司的股价时间序列),并将结果与相关数据传递给代理。
- 代理识别出它需要第二个工具来回答问题。它将检索到的数据传递给Python工具进行投资组合优化。
- Python工具计算所需的最优投资组合,包括权重,并将答案传递给代理内的LLM。
- 代理使用LLM编译所需的信息和计算,并用英语通过用户界面回答金融分析师。
金融分析师提出了以下问题:
“2018年AAAA、WWW、DDD股票的收盘价是多少?能用这三只股票构建一个优化投资组合吗?”
以下代码显示了多模态代理的规划器识别出的步骤:
steps=[Step(value='使用股票查询工具查找2018年AAAA、WWW和DDD的收盘股价。'),
Step(value='使用投资组合优化工具使用这三只股票构建一个优化投资组合。'),
Step(value='提供收盘股价和优化的投资组合分配。')]
代理将问题提示翻译成以下SQL查询:
SELECT date, aaaa, www, ddd
FROM "blog-stock-prices-db"."stock_prices"
WHERE date BETWEEN '2018-01-01' AND '2018-12-31'
ORDER BY date DESC
以下代码显示了基于问题的多模态代理的最终答案:
2018年AAAA、WWW和DDD的收盘股价为:
AAAA:$172.44
WWW:$85.91
DDD:$9.82
AAAA、WWW和DDD的优化投资组合分配为:
AAAA:55%
WWW:45%
DDD:0%'
场景2:金融分析师提出与非结构化数据相关的问题
在此场景中,金融分析师向多模态代理提出关于公司财务状况的多个问题。代理调用两个工具代理,Amazon Kendra用于非结构化数据和Python计算工具,以收集信息并执行必要的计算。然后,代理使用其语言模型从工具中汇编信息,并向分析师提供完整的答案。该场景的关键在于代理能够记住之前的问题和答案,并将上下文融入对话中。以下图示了工作流程,其中包含以下步骤:
- 金融分析师通过用户界面用英语向多模态代理提出金融问题。
- 代理识别需要使用Amazon Kendra工具来回答问题,并调用Amazon Kendra代理工具。
- Amazon Kendra在Amazon S3中搜索非结构化数据语料库,并检索包含答案的相关文档。
- 使用检索增强生成(RAG)技术,Amazon Kendra将来自相关文档的答案传递给代理内的LLM。
- 代理识别需要第二个工具来回答问题的第二部分。它将第一个工具的信息传递给Python计算工具。
- Python工具计算所需的比率,并将答案传递给代理内的LLM。
- 代理使用LLM编译所需的信息和计算结果,并通过用户界面回答金融分析师的问题。
以下是分析师和多模态代理之间的问答。
代理回答了问题“亚马逊2022年度财务年度净亏损是多少?”的答案是“亚马逊报告了2022年度总净销售额为5140亿美元,净亏损为27亿美元。”来源是亚马逊2022年度财务报告,使用了Retrive_Kendra
工具进行检索。
对于问题“同一年度的净亏损是多少?”代理回答“27亿美元。”来源是亚马逊2022年度财务报告,使用了Retrive_Kendra
工具。请注意,尽管该问题与第二个问题相似,但这个问题没有指定公司名称或年份。然而,代理能够根据对话记忆中的上下文使用正确的公司名称和年份。
对于问题“净利润率公式是什么,它是一种利润率类型?”代理回答“亚马逊报告了2022年度总净销售额为5140亿美元,净亏损为27亿美元。亚马逊2022年度的净利润率为-0.5%。”来源是Retrieve_Kendra
和PythonREPLTool()
。
深入了解解决方案
要深入了解本文中显示的解决方案和代码,请查看GitHub存储库。
在GitHub存储库中,您将能够找到一个Python笔记本,其中包含端到端解决方案,用于提供基础设施的AWS CloudFormation模板,非结构化数据(财报PDF文件,财报电话音频文件)和结构化数据(股票时间序列)。
在附录中,列出了金融分析师提出的不同问题、调用的代理工具以及多模态代理的答案。
清理
运行多模态代理后,请确保清理不会使用的任何资源。关闭并删除使用的数据库(Athena)。此外,删除Amazon S3中的数据并停止任何SageMaker Studio笔记本实例,以避免产生进一步的费用。删除作为长期记忆的Lambda函数和DynamoDB表但未使用的部分。如果您使用SageMaker JumpStart将LLM部署为SageMaker实时终端节点,请通过SageMaker控制台或SageMaker Studio删除终端节点。
结论
本文展示了广泛的AWS存储、AI/ML和计算服务,您可以使用它们构建先进的多模态AI解决方案,以及LangChain框架和生成式AI。通过集成NLP、语音识别和ML技术,本场景中开发的多模态代理能够分析多样的金融数据模态(结构化和非结构化),并以自然语言(英语)回应提示。这提高了金融分析师的生产力和效率,使他们能够专注于高价值的战略工作。由AWS提供支持的多模态AI解决方案有潜力通过自动化重复任务、增强人类能力和高效生成数据驱动的见解来改变金融市场。对于结构化数据,可以将现代数据架构与生成式AI和LLM结合使用。有关更多详细信息,请参阅重新定义数据体验: 使用生成式AI和现代数据架构解锁见解。此外,请参阅Amazon Bedrock,了解生成式AI、基础模型和大型语言模型的用例。
附录
以下表格包含了基于结构化和非结构化数据,金融分析师向多模态代理提出的示例问题。
问题目的 | 金融分析师通过UI提出的问题 | 代理工具调用 | 代理工具使用的主要AWS服务 | 多模态代理的回答 |
提示LangChain代理对收集到的数据进行预处理和信息提取 | 将亚马逊最近几个季度的10K和10Q文件转换为文本格式 |
1. 文本提取工具 |
Textract 2. AWS Lambda 3. 亚马逊S3 |
包含亚马逊财务报表的文本文件已经被清理并准备好分析。 |
提示LangChain代理将音频记录转录为文本 | 请将最近一个季度的盈利电话会议音频记录转录为文本格式? |
|
Transcribe 2. AWS Lambda 3. 亚马逊S3 |
我已经有了盈利电话会议的转录,现在可以提取重要短语。 |
提示LangChain代理分析公司的财务健康和业绩 | 基于10K报告,分析亚马逊的财务健康。计算重要的财务比率。请限制回答在5个句子内。 |
信息查询工具 2. Python 计算工具 |
|
以下是亚马逊财务健康的摘要,用5个句子描述:亚马逊的利润率较低,相对于收入来说利润能力较低。然而,亚马逊的资产回报率较高,表明其有效利用资产来生成利润。亚马逊的负债权益比率较低,表明财务杠杆和风险较低。亚马逊的流动比率较高,表明良好的短期流动性和偿付短期债务的能力。总体而言,亚马逊在财务上处于良好的位置,运营高效且风险较低。 |
提示LangChain代理分析公司的财务业绩 | 本季度公司的收入增长的主要驱动因素是什么?请限制回答在5个句子内。 |
信息查询工具 |
Comprehend 2. 亚马逊Kendra 3. AWS Lambda 4. 亚马逊S3 |
以下是收入增长的主要驱动因素的摘要,用5个句子描述:亚马逊的收入增长是因为新客户的订阅和支持收入的增加。现有客户账户也有扩张,为收入增长做出贡献。更高的净销售额推动了公司的收入增长。虽然无法计算出确切的收入增长百分比,但提取的关键短语和信息指向收入增长主要由新订阅、现有客户扩张和更高的净销售额驱动。 |
提示LangChain代理分析公司管理团队和未来计划 | 公司未来一年的首要任务是什么?公司面临的最大风险是什么?请限制回答在5个句子内。 |
信息查询工具 |
Comprehend 2. 亚马逊Kendra 3. AWS Lambda 4. 亚马逊S3 |
以下是对公司未来任务的摘要回答,用5个句子描述:亚马逊的首要任务是投资于增长和进入新市场。然而,消费者需求的变化和竞争是威胁他们业务的因素。通过分析财务报告中的关键短语,可以看出他们的重点是履行、技术和新产品,并出现了供应商、汇率和零售竞争等风险。尽管面临压力,亚马逊的目标是创新、提高客户体验,并加强自身地位。价格、速度和选择方面的持续进展将推动他们的竞争优势。 |
提示LangChain代理分析公司的战略 | 公司未来财年/季度的财务和业务目标是什么?请限制回答在5个句子内。 |
信息查询工具 2. 短语检测工具 |
Comprehend 2. 亚马 关于作者Sovik Kumar Nath是一名在AWS担任AI/ML解决方案架构师的专业人士。他在金融、运营、市场营销、医疗保健、供应链管理和物联网等领域拥有丰富的经验,设计了端到端的机器学习和业务分析解决方案。Sovik曾发表文章并拥有一项机器学习模型监控的专利。他拥有美国南佛罗里达大学、瑞士弗里堡大学的双硕士学位,以及印度理工学院卡拉格普尔分校的学士学位。在工作之外,Sovik喜欢旅行、乘坐渡轮和观看电影。 Mohan Musti是一名驻达拉斯的高级技术客户经理。Mohan帮助客户在AWS上架构和优化应用程序。Mohan在印度JNT大学获得计算机科学与工程学位。在业余时间,他喜欢和家人一起度过时间和露营。 Jia (Vivian) Li是AWS的高级解决方案架构师,专注于AI/ML领域。她目前支持金融行业的客户。在2022年加入AWS之前,她有7年的经验,帮助企业客户在云端使用AI/ML推动业务结果。Vivian拥有北京大学的学士学位和南加州大学的博士学位。在业余时间,她喜欢进行各种水上活动,并在家乡科罗拉多州美丽的山区徒步旅行。 Uchenna Egbe是一名AIML解决方案架构师,喜欢构建可重用的AIML解决方案。Uchenna拥有阿拉斯加大学的硕士学位。他利用空闲时间研究草药、茶叶、超级食物以及如何将它们融入日常饮食中。 Navneet Tuteja是亚马逊网络服务的数据专家。在加入AWS之前,Navneet曾担任组织现代化和实施全面AI/ML解决方案的促进者。她拥有塔帕尔大学的工程学位和德克萨斯农工大学的统计学硕士学位。 Praful Kava是AWS的高级解决方案架构师。他指导客户在AWS上设计和构建云规模的分析流水线。工作之外,他喜欢与家人一起旅行,探索新的徒步旅行线路。 |