🧠 Agent Ticker研究——多步AI股票分析师
轻量级 代理AI后端 使用 快速API, 双子座法学硕士,以及 紫外线 包管理器。 它为可以执行以下操作的Chrome扩展程序提供动力 基于多步骤推理的股票研究,结合 新闻、价格和分析 通过代理反馈回路。
______________________________________________________________________
⚡ 概述
此后端运行 代理工作流 股票代码(AAPL、TSLA、NVDA等)。 给定一个类似以下的查询:
“查找有关AAPL的最新消息,并将其与过去30天的价格变化联系起来。”
该系统不仅仅是总结,它的行为就像 自主金融分析师:
- 收集股票的最新信息 价格走势
- 获取和链接 最近的新闻头条 来自雅虎财经
- 逐一总结这些头条新闻
- 将它们与股票走势联系起来
- 返回基于推理的最终分析
______________________________________________________________________
🎬 演示视频

______________________________________________________________________
🧩 项目结构
建筑遵循经典 代理4层设计:
| 图层 | 文件 | 描述 |
|---|---|---|
| 感知 | app.py | FastAPI编排器——接收用户查询、偏好和触发流。 |
| 记忆 | memory.py | 缓存用户会话、回合和首选项。 |
| 决定 | decision.py | 使用Gemini的计划器--生成FUNCTION_CALL或FINAL_ANSWER。 |
| 行动 | action.py | MCP工具层——运行股票/新闻/摘要工具。 |
| 模式 | models.py | 定义所有数据契约的Pydantic I/O模型。 |
| 快速评估 | prompt_eval.py | 根据系统提示运行基于Gemini的评估。 |
______________________________________________________________________
🧱 认知架构(4层)
👁️ Perceive → 🧠 Remember → 🧭 Decide → 🎯 Act| 层 | 认知角色 | 实施 | 关键行为 |
|---|---|---|---|
| 🧩 感知 | 理解用户意图+查询 | app.py | 解析JSON输入,合并首选项,启动循环 |
| 💭 记忆 | 存储过去的推理转折 | memory.py | 维护每节课的成绩单和偏好 |
| 🧠 决定 | 计划下一步或最终答案 | decision.py | 使用具有结构化“FUNCTION_CALL/FINAL_ANSWER”输出的Gemini |
| ⚙️ 行动 | 执行实际功能 | action.py | 运行MCP工具,用于股票、新闻、摘要 |
______________________________________________________________________
⚙️ 设置(通过 紫外线)
1.️⃣ 安装依赖项
uv sync2.️⃣ 添加您的Gemini API密钥
创建一个 .env 文件:
GEMINI_API_KEY=your_api_key_here3.️⃣ 验证系统提示
运行Gemini验证器以确保合规性:
uv run prompt-verify产生 prompt_evaluation.json.
4.️⃣ 启动服务器
uv run agent-server
# or start MCP tools for other agents
uv run mcp-server______________________________________________________________________
🧩 安装Chrome扩展程序
一旦你的后端(agent-server)如果正在运行,您可以侧载Chrome扩展程序以在本地与之交互。
步骤
- 打开Chrome浏览器
首选 chrome://extensions/
- 启用开发者模式
切换 开发人员模式 在右上角。
- 点击“加载解包”
选择包含扩展文件的文件夹(必须包括 manifest.json, popup.html, background.js等等)。
- 扩展应该出现在您的工具栏中——单击图标将其打开。
- 扩展程序的弹出窗口将您的查询和偏好发送到
http://localhost:8080/agent.
🧭 参考: 如果您在手动加载时遇到问题,请查看以下有用的StackOverflow讨论: 👉 从Chrome网上应用商店外部安装Chrome扩展程序
______________________________________________________________________
🧠 代理流程(逐步)
- 用户输入: Chrome扩展程序发送查询+偏好(点赞、位置、兴趣)。
- 感知:
app.py合并prefs+query并创建新会话。
- 决定: Gemini读取上下文并输出一行:
- FUNCTION_CALL: ticker_info|ticker=AAPL|days=30 - FUNCTION_CALL: summarize_news|headline="Apple delays iPhone 17" - FINAL_ANSWER: AAPL remained steady amid mixed news sentiment.
- 行动: 执行工具并存储结果。
- 内存: 保存所有回合和反馈以供下一次迭代。
- 循环: 重复,直到生成最终答案或达到限制。
______________________________________________________________________
🧰 MCP工具层
action.py 现在兼作 MCP服务器,公开用于内部和外部代理访问的工具。
| 工具 | 说明 |
|---|---|
ticker_info(ticker, days) | 使用yfinance获取价格数据 |
news_vs_price(ticker, days) | 将最新新闻标题与价格变化相关联 |
summarize_news(headline) | 使用Gemini简洁地总结新闻标题 |
独立运行:
uv run mcp-server______________________________________________________________________
🧾 示例输出
输入
Find the news about AAPL in the last 30 days and link it with daily stock price changes.输出
# Agent Transcript
**User:** Find the news about AAPL in the last 30 days and link it with daily stock price changes.
**Tool `ticker_info` Result:**
AAPL Price Info (last 30d):
- Latest close: 255.46
- Change over 30d: -1.12%
- High: 263.10, Low: 249.32
**Tool `news_vs_price` Result:**
# News vs Price — AAPL (last 30d)
2025-09-26 | 255.46 | -1.00% | Apple (AAPL) Stock: UBS Reiterates Neutral...
2025-09-27 | 255.46 | -1.00% | AI Semiconductor Stock Will Join Nvidia, Apple...
**Tool `summarize_news` Result:**
Apple (AAPL) Stock... → UBS expects weaker iPhone demand, maintaining neutral outlook.
**Assistant:**
AAPL saw a minor decline around Sep 26–27. The UBS Neutral rating likely caused short-term selling, while positive AI-related headlines offset part of the sentiment. Overall, market confidence remained stable.______________________________________________________________________
🧩 主要特点
| 特性 | 描述 |
|---|---|
| 双子座驱动的推理 | Planner遵循确定性协议,使用 FUNCTION_CALL: 和 FINAL_ANSWER: 线。 |
| 多步循环 | Planner–tool–Planner循环带上限,以避免失控的调用。 |
| 工具抽象 | 每个工具都是独立的,并通过Pydantic模式进行验证。 |
| 转录记忆 | 每个代理回合都存储在内存中,用于反馈和重新提示。 |
| 可读输出 | Markdown转录为在Chrome扩展程序中直接显示而构建。 |
| 弹性LLM电话 | 处理过载错误(503秒),截断长提示,优雅重试。 |
______________________________________________________________________
🏗️ 文件工作流
┌───────────────┐
│ Chrome Popup │
│ (user query) │
└──────┬────────┘
│ POST /agent
▼
┌───────────────┐
│ app.py │ ← Orchestrator (Perception)
│ • Receives request
│ • Loads prefs
│ • Iterates planner loop
└──────┬────────┘
▼
┌───────────────┐
│ decision.py │ ← Decision Layer
│ • LLM Planner
│ • Produces FUNCTION_CALL or FINAL_ANSWER
└──────┬────────┘
▼
┌───────────────┐
│ action.py │ ← Action Layer
│ • Runs tools
│ • Summarize / Fetch news / Price
└──────┬────────┘
▼
┌───────────────┐
│ memory.py │ ← Memory Layer
│ • Stores turns + prefs
└──────┬────────┘
▼
📤 Returns → Markdown transcript (displayed in Chrome extension)______________________________________________________________________
🧠 日志记录
所有服务器端操作都使用结构化日志记录而不是打印:
- 记录LLM调用、工具执行和输出(截断)
- 帮助追踪推理链
- 简化调试和分级
例子:
2025-10-29 21:45:11 INFO Calling tool: news_vs_price args={'ticker': 'AAPL', 'days': 30}
2025-10-29 21:45:17 INFO Planner step decided: summarize_news______________________________________________________________________
🧰 技术栈
| 组件 | 技术 |
|---|---|
| 语言 | Python 3.13+ |
| 环境 | uv包管理器 |
| 框架 | FastAPI |
| LLM | 双子座2.0闪光灯 |
| 数据 | 金融,熊猫 |
| 验证 | Pydantic |
| 编排 | MCP工具+代理循环 |
| 基础设施 | 本地后端/Chrome扩展桥 |
______________________________________________________________________
🧩 下一步(计划)
- 与Chrome扩展程序弹出窗口集成,以传递ticker+prefs。
- 允许对多个股票进行比较。
- 将转录历史记录存储在小型SQLite或DynamoDB表中。
- 添加连续监控模式(价格预警触发)。
______________________________________________________________________
🏁 总结
这 代理票务研究 后端演示了一个经过验证的模块化 代理认知架构 与满 Gemini提示验证, MCP工具暴露,以及 Pydantic型认知层.
它不仅仅是一个股票总结器,它是一个 自检、多步骤推理代理 符合以下标准 显式推理、结构化输出和回退鲁棒性.
