使用 Amazon Bedrock Ag

使用 Amazon Bedrock Agents 创建虚拟股票技术分析师

关键要点

在本文中,我们将介绍如何利用 Amazon Bedrock Agents创建一个可以回答股票相关技术分析问题的虚拟分析师。该分析师能够通过自然语言查询,处理复杂的技术指示符,如简单移动平均线(SMA)、指数移动平均线(EMA)和相对强弱指数(RSI)。使用 Amazon Bedrock,您可以轻松构建和扩展生成性 AI 应用,实现安全和有效的数据处理。


股票技术分析问题的多样性与每位分析师的独特性相辅相成。这些问题通常涉及多个技术指标,如简单移动平均线(SMA)、指数移动平均线(EMA)、相对强弱指数(RSI)等。要回答这些问题,需要编写复杂的业务逻辑来解析查询并提取必要的数据。由于可用指标的数量众多,各种指标可以以任意组合出现,且每种指标会应用于不同的时间周期,因此将这些逻辑功能实现为代码非常复杂。

随着 AI 技术的不断发展,生成性 AI 代理的能力也在不断扩展,这为您在竞争中获得优势提供了更多机会。处于这一演变前沿的是 ,这是一个完全托管的服务,提供来自 Amazon 与其他领先 AI公司高效的基础模型(FMs),通过单一 API 可用。使用 Amazon Bedrock,您可以安全地构建和扩展生成性 AI应用程序,保护隐私并确保负责任的 AI 使用。 负责规划和执行多步骤任务,涉及公司系统和数据源,包括回答客户关于产品可用性的问题以及接收订单。通过 AmazonBedrock,您只需几个简单步骤即可创建代理,首先选择一个 FM,提供访问企业系统、知识库以及安全执行 API 的权限。这些操作可以使用 在云中实现,或者您可以使用本地业务逻辑返回控制。代理会分析用户请求,并自动调用必要的 API 和数据源来完成请求。Amazon Bedrock Agents提供增强的安全性和隐私保护,用户无需自己编排提示、管理会话上下文或手动协调任务。

在本篇文章中,我们将创建一个虚拟分析师,该分析师能够借助 Amazon Bedrock Agents对满足特定技术指标标准的股票自然语言查询提供答案。作为代理的一部分,我们配置了包含 Lambda 函数的操作组,使得代理能够执行各种操作。AmazonBedrock 代理将用户的自然语言查询转换为相关的 Lambda 调用,并传递技术指标和所需的时长。Lambda将访问预先获取的开放源代码股票数据,该数据存储在 (AmazonS3) 桶中,实时计算技术指标,并将结果返回给代理。代理将进一步执行其他操作,如其他 Lambda 调用或根据任务进行筛选和排序。

解决方案概述

该技术分析助手解决方案将使用 Amazon Bedrock Agents 来回答自然语言技术分析查询,从简单的“您能给我一份 NASDAQ 100指数内股票的列表吗?”到复杂的“NASD 100 指数中哪些股票在过去六个月内增长超过 10% 且收盘价高于 20 日 SMA?”代理会协调并分析任务,把它分解为正确的逻辑顺序,并利用 FM 的推理能力。代理会自动调用必要的 Lambda函数,以获取相关的股票技术分析数据,同时在过程中判断是否可以继续或是否需要收集更多信息。

以下图表展示了解决方案的架构。

删除)

工作流程包括以下步骤:

  1. 解决方案启动一个基于 Python 的 Lambda 函数,该函数使用 yfinance 包获取过去一年每日股票数据。Lambda 函数通过一个 被设置为每天触发执行,并将最后一年的股票数据存入 S3 桶中。
  2. 用户提出自然语言问题,例如“您能给我一份 NASDAQ 100 指数的股票列表吗?”或“哪些股票的收盘价同时高于 20 SMA 和 50 EMA 在 FTSE 100 指数中?”
  3. 该查询将传递到由 Anthropic 的 Claude 3 Sonnet 提供支持的 Amazon Bedrock 代理。代理会分解用户查询,创建行动计划,并逐步执行,以获取回答问题所需的各种数据。为了提取所需的数据,代理有三个操作组,每个操作组通过 Lambda 函数利用储存在 S3 桶中的原始数据计算技术指标和其他与股票相关的信息。根据操作组的响应及代理的行动计划,代理将继续进行调用或采取其他措施,如筛选或汇总,直到得到问题的答案。操作组具体如下:
  4. get-index – 获取给定指数的成分股票符号。示例目前配置的有 Nasdaq 100、FTSE 100 和 Nifty 50 指数的成分。
  5. get-stock-change – 对给定的股票或股票列表,基于从 Amazon S3 中预先获取的原始数据,计算在特定周期内的变化百分比。该解决方案目前配置为包含过去 1 年的数据。
  6. get-technical-analysis – 对给定的股票或股票列表,计算在特定时间段内的技术指标。它还会根据预先获取的原始数据,提取股票的最新收盘价格。该解决方案目前配置可处理 SMA、EMA 和 RSI 技术指标,覆盖最多 1 年的数据。

先决条件

要设置此解决方案,您需要具备基本的 AWS 知识以及相关的 AWS 服务使用经验。此外,请为 Anthropic 的 Claude 3 Sonnet 。

部署解决方案

请完成以下步骤,以使用 部署该解决方案:

  1. us-east-1 AWS 区域发起 CloudFormation 堆栈:

删除)](https://console.aws.amazon.com/cloudformation/home?region=us- east-1#/stacks/new?stackName=stock-ta-bot&templateURL=https://aws-blogs- artifacts-public.s3.us-east-1.amazonaws.com/ML-16790/stock-ta-bot-cfn.yaml)

  1. 堆栈名称 输入您选择的堆栈名称。
  2. 其他选项保持默认设置。
  3. 选择 下一步
  4. 选择 下一步
  5. 选中确认框并选择 提交

删除)

  1. 等待堆栈创建完成。
  2. 在堆栈详细信息页面验证所有资源是否已成功创建。

CloudFormation 堆栈将创建上述解决方案和以下关键资源:

  • StockDataS3Bucket – 存储 1 年股票数据的 S3 桶。
  • YfinDailyLambda – 使用 yfinance 包获取 NASDAQ 100、FTSE 100 和 Nifty 50 指数的最后一年股票数据的 Python Lambda 函数:

# 示例调用 Yahoo 财经以获取股票历史数据

import yfinance as yf stock_ticker = yf.Ticker(<股票符号>) stock_history =
stock_ticker.history(period=<获取历史记录的时间周期,例如 1y>) ```

  * **YfinDailyLambdaScheduleRule** – EventBridge 规则,用于每天触发 `YfinDailyLambda` 函数以获取最新股票数据。

  * **InvokeYfinDailyLambda 和 InvokeLambdaFunction** – 自定义 CloudFormation 资源及其 Lambda 函数,用于在堆栈创建的同时调用 `YfinDailyLambda` 函数以获取初始数据。
  * **GetIndexLambda** – 此函数接收一个指数名称作为输入,并返回给定指数中的股票列表。
  * **GetStockChangeLambda** – 此函数接收股票列表和天数作为输入,从 S3 桶中提取股票数据,计算在特定天数内的股票百分比变化并返回数据。
  * **GetStockTechAnalysisLambda** – 此函数接收股票列表、天数和一个技术指标作为输入,并返回给定股票的最新收盘价和在指定天数内的技术指标。示例代码:

```python

# 计算简单移动平均线的示例代码

from ta.trend import SMAIndicator indicator_ta = SMAIndicator(<使用收盘价的 Pandas序列>, window=) stock_SMA = indicator_ta.sma_indicator() ```

  * **StockBotAgent** – 使用 Anthropic 的 Claude 3 Sonnet 模型创建的 Amazon Bedrock 代理,具有三个操作组,每个操作组映射到一个 Lambda 函数。我们给代理提供自然语言的指令。例如,在我们的解决方案中,部分指令是:“您可以获取给定指数的股票列表”,使代理了解它可以在指数中提取股票。我们将操作组配置为代理的一部分,并使用 OpenAPI 3 规范标准描述 Lambda 功能,以便代理了解何时以及如何调用 Lambda 函数。以下是 get-index 操作组 OpenAPI 模式的片段,其中我们描述其功能、输入和输出参数及格式:

`json { "openapi": "3.0.0", "info": { "title": "获取指数股票列表 API", "version":
"1.0.0", "description": "根据提供的指数返回股票符号列表" }, "paths": { "/get-index": { "get":
{ "summary": "获取指数中股票符号列表", "description": "根据所提供的指数返回股票符号列表", "operationId":
"getIndex", "parameters":  API 程序化地调用代理。调用代理别名所需的代理 ID 和代理别名 ID 可以在
CloudFormation 堆栈的 **输出** 选项卡中找到,分别命名为 `AgentId` 和
`AgentAliasId`。要了解有关程序化调用的更多信息,请参考以下  和
。

## 清理资源

为了避免在 AWS 账户中产生费用,请清理解决方案中配置的资源:

  1. 在 Amazon S3 控制台上, ,该桶是作为 CloudFormation 堆栈的一部分创建的。桶名应以你创建 CloudFormation 堆栈时输入的堆栈名称开头。您还可以在 CloudFormation 堆栈的 **资源** 部分检查桶的名称。
  2. 在 AWS CloudFormation 控制台中,选择您为此解决方案创建的堆栈并选择 **删除** 。

## 结论

在本文中,我们展示了如何利用 Amazon Bedrock Agents执行复杂任务,这些任务需要通过自然语言指令进行多步骤的编排。通过代理,您可以自动化客户的任务并回答他们的问题。我们鼓励您探索 ,以进一步了解其功能,并将其应用于您的使用案例。

Leave a Reply

Required fields are marked *