利用LangGraph 和 OpenAI 打造金融分析师Agent
stock: str我们将工具集成到 LangGraph 中,并创建一个反馈循环进行分析。
引言
在股票交易的世界中,投资者依赖各种工具和方法来做出明智的决策。基本面分析是一种常见的方法,它通过评估公司的财务健康状况和股票表现来提供可操作的见解。随着人工智能和机器学习的进步,股票分析现在可以高度自动化。在这篇文章中,我们将探索如何使用 LangChain、LangGraph 和 Yahoo Finance 来创建一个股票表现分析Agent,充分利用实时股票数据和关键的技术指标。
无论你是金融爱好者、开发者还是数据科学家,这篇逐步教程都将帮助你创建自己的智能代理。让我们深入了解!
这个具有自主性的金融分析师Agent将做什么?
-
使用 Yahoo Finance 获取股票价格数据。
-
计算技术指标,如 RSI、MACD、VWAP 等。
-
评估财务指标,如市盈率、债务股本比率和利润率。
-
利用 OpenAI 强大的语言模型提供结构化的、基于 AI 的分析。
我们将使用的工具
-
LangGraph:一个用于编排工具和构建对话代理的库。
-
OpenAI GPT-4:用于生成智能且结构化的金融见解。
-
yfinance:用于检索股票价格和财务比率。
-
ta(技术分析库):用于计算关键的技术指标。
-
Python 库:pandas、dotenv 和 datetime 用于数据操作和环境设置。
第一步:设置环境
首先,安装所需的库:
pip install -U langgraph langchain langchain_openai pandas ta python-dotenv yfinance
设置一个 .env
文件以安全地存储你的 OpenAI API 密钥:
OPENAI_API_KEY=your_openai_api_key
第二步:为分析师准备工具
获取股票价格
这个工具获取股票的历史数据并计算几个技术指标。
from typing import Union, Dict, Set, List, TypedDict, Annotated
import pandas as pd
from langchain_core.tools import tool
import yfinance as yf
from ta.momentum import RSIIndicator, StochasticOscillator
from ta.trend import SMAIndicator, EMAIndicator, MACD
from ta.volume import volume_weighted_average_price
import datetime as dt
@tool
def get_stock_prices(ticker: str) -> Union[Dict, str]:
"""
获取给定股票的历史价格数据和所有技术指标。
"""
try:
data = yf.download(
ticker,
start=dt.datetime.now() - dt.timedelta(weeks=24*3),
end=dt.datetime.now(),
interval='1wk'
)
df = data.copy()
data.reset_index(inplace=True)
data.Date = data.Date.astype(str)
indicators = {}
rsi_series = RSIIndicator(df['Close'], window=14).rsi().iloc[-12:]
indicators["RSI"] = {date.strftime('%Y-%m-%d'): int(value) for date, value in rsi_series.dropna().to_dict().items()}
sto_series = StochasticOscillator(df['High'], df['Low'], df['Close'], window=14).stoch().iloc[-12:]
indicators["Stochastic_Oscillator"] = {date.strftime('%Y-%m-%d'): int(value) for date, value in sto_series.dropna().to_dict().items()}
macd = MACD(df['Close'])
macd_series = macd.macd().iloc[-12:]
indicators["MACD"] = {date.strftime('%Y-%m-%d'): int(value) for date, value in macd_series.to_dict().items()}
macd_signal_series = macd.macd_signal().iloc[-12:]
indicators["MACD_Signal"] = {date.strftime('%Y-%m-%d'): int(value) for date, value in macd_signal_series.to_dict().items()}
vwap_series = volume_weighted_average_price(
high=df['High'],
low=df['Low'],
close=df['Close'],
volume=df['Volume'],
).iloc[-12:]
indicators["vwap"] = {date.strftime('%Y-%m-%d'): int(value) for date, value in vwap_series.to_dict().items()}
return {'stock_price': data.to_dict(orient='records'), 'indicators': indicators}
except Exception as e:
return f"Error fetching price data: {str(e)}"
获取财务指标
这个工具获取关键的财务健康比率。
@tool
def get_financial_metrics(ticker: str) -> Union[Dict, str]:
"""
获取给定股票的关键财务比率。
"""
try:
stock = yf.Ticker(ticker)
info = stock.info
return {
'pe_ratio': info.get('forwardPE'),
'price_to_book': info.get('priceToBook'),
'debt_to_equity': info.get('debtToEquity'),
'profit_margins': info.get('profitMargins')
}
except Exception as e:
return f"Error fetching ratios: {str(e)}"
第三步:构建 LangGraph
LangGraph 允许我们高效地编排工具和管理对话逻辑。
1. 定义图
我们首先定义一个 StateGraph 来管理流程:
from langgraph.graph import StateGraph, START, END
from langchain_core.messages import SystemMessage
from langchain_core.messages import HumanMessage
from langchain_core.messages import AIMessage
class State(TypedDict):
messages: List
stock: str
graph_builder = StateGraph(State)
2. 定义 OpenAI 并绑定工具
我们将工具集成到 LangGraph 中,并创建一个反馈循环进行分析。
import dotenv
dotenv.load_dotenv()
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model='gpt-4')
tools = [get_stock_prices, get_financial_metrics]
llm_with_tools = llm.bind_tools(tools)
3. 分析师节点
提示确保 AI 理解其角色并提供结构化的输出。
FUNDAMENTAL_ANALYST_PROMPT = """ 你是一个专门评估公司(其股票代码为 {company})的基本面分析师。
你有权使用以下工具:
Medium Q Search
### 你的任务:
1. ** 输入股票代码 **:使用提供的股票代码查询工具并获取数据。
2. ** 分析数据 **:评估工具返回的结果,并识别潜在的趋势。
3. ** 提供总结 **:编写一个简洁、结构良好的总结,突出以下内容:
- 近期股票价格走势、趋势和潜在阻力位。
- 技术指标的关键见解(例如,股票是否超买或超卖)。
- 基于财务指标的财务健康状况和表现。
### 限制:
- 仅使用工具提供的数据。
- 避免使用推测性语言;专注于可观察的数据和趋势。
- 如果任何工具未能提供数据,请在总结中明确说明。
### 输出格式:
以以下格式回复:“stock”: “<股票代码>”,
“price_analysis”: “<股票价格趋势的详细分析>”,
“technical_analysis”: “<所有技术指标的详细时间序列分析>”,
“financial_analysis”: “<财务指标的详细分析>”,
“final Summary”: “<基于上述分析的完整结论>”
请确保你的回答客观、简洁且具有可操作性。
"""
def fundamental_analyst(state: State):
messages = [
SystemMessage(content=FUNDAMENTAL_ANALYST_PROMPT.format(company=state['stock'])),
HumanMessage(content="请分析这个股票。")
] + state['messages']
return {'messages': llm_with_tools.invoke(messages)}
4. 将工具添加到图中并编译
graph_builder.add_node('fundamental_analyst', fundamental_analyst)
graph_builder.add_edge(START, 'fundamental_analyst')
graph_builder.add_node(ToolNode(tools))
graph_builder.add_conditional_edges('fundamental_analyst', tools_condition)
graph_builder.add_edge('tools', 'fundamental_analyst')
graph = graph_builder.compile()
5. 执行图
events = graph.stream({'messages': [('user', '我应该购买这只股票吗?')], 'stock': 'TSLA'}, stream_mode='values')
for event in events:
if 'messages' in event:
event['messages'][-1].pretty_print()
示例输出
{
"stock": "TSLA",
"price_analysis": "TSLA 的近期股票价格显示出波动性,...",
"technical_analysis": "技术指标呈现出混合的前景。RSI 指标显示超买状态,...",
"financial_analysis": "TSLA 的财务指标表明估值较高,...",
"final Summary": "总之,TSLA 显示出强劲的近期价格恢复潜力,但也有高估值和超买指标,...",
"Asked Question Answer": "鉴于当前的超买指标和高估值,..."
}
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓
更多推荐
所有评论(0)