🐝 W&B Weave YFinance代理商
初学者友好的公开演示 金融研究代理人 构建于:
- 雅虎金融(yfinance) 市场和基本面数据。
- MCP(模型上下文协议) 工具(定义见
yfinance_server/tools_yfinance.py). - OpenAI代理SDK 用于工具使用代理行为。
- W&B Weave 用于丰富的可观察性、跟踪和监控(LLMOps)。
- 溪流 用于简单的web UI。
询问有关股票的自然语言问题(价格、财务报表、持有人、ESG、公司简介),代理人将调用正确的工具、理由和答案。
______________________________________________________________________
📦 这个回购中有什么?
yfinance_server/tools_yfinance.py:公开的MCP服务器 工具 获取价格、图表、财务报表、持有人、ESG和个人资料信息。yfinance_server/server.py:最小程序化运行器:构建代理、运行查询和使用 编织评分器 和 OpenAI代理SDK 输出护栏。01_Quickstart_Agent.ipynb:测试代理人的笔记本。streamlit_app/app.pyA. 溪流 应用程序在浏览器中与代理聊天。streamlit_app/utils_streamlit.py:用于渲染代理标记(包括图像支持)和“打开编织跟踪”按钮的辅助工具。
______________________________________________________________________
🧠 它是如何工作的(高级)
- 这 *MCP服务器* (
yfinance_server/tools_yfinance.py)使用以下命令定义Python工具 y融资. - 这 OpenAI代理SDK 代理商(
yfinance_server/server.py)通过以下方式连接到该服务器 标准 并且可以根据需要调用这些工具。 - 编织 (
yfinance_server/server.py)记录每个步骤(工具调用、输出),以便您可以在W&B项目中交互式地检查运行情况。 - 这 溪流 UI(
streamlit_app/app.py)是一个薄层,允许您选择模型并提交问题。
______________________________________________________________________
✅ 评分和输出护栏
此代理使用以下实现的两个输出护栏 W&B Weave Scorers 和 OpenAI Agents SDK Guardrails:
- 幻觉护栏:使用a
weave.scorers.HallucinationFreeScorer检测代理输出中未经支持或捏造的索赔,并将其与检索到的财务上下文进行比较。
- 数字一致性护栏:使用近似数字匹配和自定义,确保响应中提到的所有数值与工具输出(即检索到的财务上下文)中的数值相匹配
weave.Scorer,调用NumericConsistencyScorer.
如果任一护栏被触发,代理拒绝回答,并通过以下方式记录问题以进行监控 Weave.
______________________________________________________________________
🛠️ 暴露的工具 yfinance_server/tools_yfinance.py
下面是从文件中解析的列表,其中有一行摘要:
get_historical_prices:获取指定时间段内给定股票代码的历史每日OHLCV价格。plot_price_history:生成给定交易品种和时段的收盘价随时间变化的折线图。get_balance_sheet:获取给定股票代码和期间的最新资产负债表信息。get_income_statement:获取给定股票代码和期间的损益表数据(年度)。get_cash_flow:获取给定股票代码和期间的现金流量表数据(年度)。get_financials:获取给定股票代码和期间的财务摘要(年度)。get_major_holders:获取给定股票代码的主要持有人信息。get_institutional_holders:获取给定股票代码的顶级机构持有人。get_sustainability:获取给定股票代码的可持续性(ESG)得分和相关指标。get_info:在LLM友好的结构中获取给定股票代码的关键公司信息。
每个工具都返回LLM友好的数据(列表/字典),以便代理可以为您总结或格式化结果。
💡 示例问题(每个工具一个)
- 获取历史价格 → *过去6个月,AAPL的最高和最低价格是多少?*
- plot_price_历史 → *绘制AAPL过去一年的收盘价历史。*
- 获取平衡表 → *显示苹果最近一个财政年度的总资产和总负债。*
- get_come_statement → *微软去年报告的总收入和净收入是多少?*
- get_cash_flow → *特斯拉最近一年的经营活动产生了多少现金?*
- get_财务人员 → *总结亚马逊去年的主要财务数据(收入、营业收入、净收入)。*
- 获取主文件夹 → *内部人士和机构持有苹果公司多大比例的股份?*
- get_机构_持有者 → *谁是NVIDIA的顶级机构股东,他们拥有多少股份?*
- get_sustainability → *微软的ESG得分是多少,是否有任何可持续性标志?*
- 获取信息 → *请简要介绍一下Netflix的公司概况(行业、市值、员工、估值比率)。*
您可以将这些粘贴到Streamlit应用程序中,或通过笔记本电脑/脚本运行它们。
______________________________________________________________________
🚀 快速入门
1) 环境
- Python 3.10+推荐
- 设置API密钥(至少
OPENAI_API_KEY). - 对于
Weave跟踪,也设置WANDB_API_KEY.
创建一个 .env 项目根目录中的文件(或以其他方式导出env-vars):
OPENAI_API_KEY=sk-... # required for OpenAI models
WANDB_API_KEY=... # required for Weave traces2) 安装依赖项
pip install -U pip
pip install -r requirements.txt如果您使用虚拟环境:
python -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -U pip
pip install -r requirements.txt3) 运行Streamlit应用程序
streamlit run streamlit_app/app.py然后:
- 在侧边栏中(从应用程序中列出的预设中)选择一个模型。
- 问一个这样的问题: “绘制AAPL过去一年的收盘价历史。”
- 观察代理人的脚步,打开 编织痕迹 从应用程序。
4) 从终端运行(无UI)
python server.py编辑 user_questions 列表在底部 server.py 尝试自己的查询。
5) 以编程方式使用(Jupyter/Script)
看 01_Quickstart_Agent.ipynb 在这个仓库中,使用了一个最小的端到端示例 answer_questions 从 yfinance_server/server.py 以编程方式运行查询。
______________________________________________________________________
📘 笔记本预览
笔记本显示了如何:
- 打电话给
answer_questions功能(从yfinance_server/server.py)自动启动MCP工具服务器并初始化代理(使用默认或指定的模型)。 - 问一个问题并阅读最终的Markdown答案。
- (可选)显示任何生成的绘图图像。
______________________________________________________________________
🔍 故障排除
- 没有自动收报机数据:检查符号(例如。,
GOOG,AAPL,MSFT);非常新或流动性较差的股票可能数据有限。 - 模型误差:请确保您使用的模型名称存在于您的OpenAI帐户中,并且没有超过您的API配额。
- 编织不记录:确保设置
WANDB_API_KEY并致电weave.init(project_name="/")请注意,默认情况下,Weave可能会公开记录免费用户的运行情况。如果你想改变wandb从默认值中选择实体和项目,您可以将两个环境变量添加到.env文件:WANDB_ENTITY和WANDB_PROJECT. - 代理卡住或速度慢:代理可能正在等待工具。检查
yfinance_server/tools_yfinance.py对于任何打印语句(它们可以阻止MCP通信)。确保yfinance通话没有达到费率限制。 - 护栏已触发:由于护栏(例如,预测性问题),代理人拒绝回答。如果需要,调整问题或拆除护栏(不建议实际使用)。
______________________________________________________________________
🧾 许可证
MIT。
______________________________________________________________________
