开源项目将 Claude Code 交互编程理念迁移到金融量化交易,探索垂直领域应用潜力。
LangAlpha 是一套面向凭感觉投资的 AI 智能体框架,旨在帮助解读金融市场并辅助投资决策。
快速入门 • API 文档 • 智能体核心 • 后端 • Web • TUI • Skills • MCP
在仪表盘中置顶一份精选新闻简报,启动投资构思,并派遣多个并行子智能体筛选市场——随后,你将在内嵌的交互式仪表盘中获得五个根据你的投资组合校准过的多空配对交易方案。
如今,每款 AI 金融工具都把投资当作一次性任务:提出问题、获得答案,然后继续下一项工作。但真正的投资是贝叶斯式的——你从一个投资论点出发,每天都有新数据到来,并据此更新自己的确信程度。这是一个持续数周乃至数月的迭代过程:完善投资论点、重新审视持仓,并在既有分析之上叠加新的分析。任何一个提示词都无法涵盖这一切。
从凭感觉编程到凭感觉投资
这一理念受到软件工程的启发:代码库会持续存在,每一次提交都建立在此前成果之上。Claude Code 和 OpenCode 等代码智能体框架之所以取得成功,是因为它们构建的智能体遵循了这一模式:探索已有上下文,并在先前工作的基础上继续推进。LangAlpha 将同样的洞见带入投资研究:为智能体提供持久化工作区,研究成果便会自然积累并产生复利效应。
在实践中,你可以为每个研究目标创建一个工作区(“第二季度再平衡”“数据中心需求深度研究”“能源板块轮动”)。智能体会询问你的目标和风格,生成第一份交付成果,并将所有内容保存到工作区文件系统中。第二天回来时,你的文件、对话线程以及积累的研究仍然都在那里。
渐进式工具发现——所有 MCP 工具都会以摘要形式加载到上下文中,完整文档则写入工作区,使智能体能够真正按需发现和使用工具。同时支持将 JSON 工具与 Skills 绑定,并仅在相应 Skill 激活时向智能体公开。
程序化工具调用(PTC)——智能体通过编写并执行 Python 来处理来自 MCP 服务器的金融数据,而不是将原始数据直接灌入 LLM 上下文窗口。这既支持复杂的多步骤分析,也能显著减少 Token 浪费。
金融数据生态系统——采用多层级数据提供商体系:原生工具用于快速查询,MCP 服务器则用于在沙箱中执行批量数据处理、图表绘制和多年期分析。
持久化工作区——每个工作区都映射到一个专用沙箱,其中包含结构化目录和工作区笔记文件(agent.md),使研究成果能够跨会话、跨线程持续积累。独立的长期记忆存储(.agents/user/memory/、.agents/workspace/memory/)用于持久保存用户偏好和跨沙箱知识;用户管理的备忘录存储(.agents/user/memo/)则允许你上传 PDF 和 Markdown 研究笔记,供智能体按需读取。
金融研究 Skills——提供预构建工作流,涵盖 DCF 模型、首次覆盖报告、财报分析、晨报、文档生成等任务,可通过斜杠命令或自动检测激活。
金融研究工作台——Web UI 支持内嵌金融图表、多格式文件查看器、TradingView 图表、实时 WebSocket 市场数据、智能体绘制的图表标注、逐轮来源溯源面板、可分享的对话以及子智能体监控。
多提供商模型层——与提供商无关的 LLM 抽象层,并支持出错时自动故障转移。
自动化——安排周期性任务或一次性任务,也可以设置价格触发型自动化,当股票或指数满足实时价格条件时自动执行。
秘书——Flash 智能体还可充当秘书:创建和管理工作区、在后台派发深度 PTC 分析、监控运行中的任务并获取结果——所有操作都可通过自然语言命令完成,并由人工参与审批。
智能体集群——支持具有隔离上下文窗口的并行异步子智能体,并具备预加载工具集与 Skills、执行过程中的实时引导、基于检查点的恢复,以及 UI 中的实时进度监控。
实时引导——在智能体或子智能体工作期间发送后续消息,无须等待任务结束即可纠正方向、澄清要求或重定向任务。
中间件栈——一套深度、可组合的中间件栈,负责 Skill 加载、规划模式、多模态输入、自动压缩和上下文管理,以支持长时间运行的智能体会话。
安全与工作区保险库——通过 pgcrypto 实现静态数据加密,支持自动检测并脱敏凭据泄露、沙箱化执行,以及按工作区存储密钥,确保智能体安全访问。
渠道集成——可通过 Slack、Discord、飞书和 Telegram 使用 LangAlpha,并支持通过电子邮件投递定时任务结果。
生产就绪型基础设施——通过 SSE 流式传输智能体活动,利用 Redis 缓冲实现重连后的事件回放;后台执行与 HTTP 连接解耦,并通过 PostgreSQL 持久化状态。
%%{init: {'theme': 'neutral'}}%%
flowchart TB
Web["Web UI<br/>React 19 · Vite · Tailwind"] -- "REST · SSE" --> API
Web -- "WebSocket" --> WSP
CLI["CLI / TUI"] -- "REST · SSE" --> API
subgraph Server ["FastAPI Backend"]
API["API Routers<br/>Threads · Workspaces · Market Data<br/>OAuth · Automations · Skills"]
WSP["WebSocket Proxy"]
API --> ChatHandler["Chat Handler<br/>LLM Resolution · Workflow Dispatch"]
ChatHandler --> BTM["Background Task Manager<br/>Decoupled Execution · Workflow Lifecycle"]
end
subgraph PostgreSQL ["PostgreSQL — Dual Pool"]
AppPool[("App Data<br/>Users · Workspaces · Threads<br/>Turns · BYOK Keys · Automations")]
CheckPool[("LangGraph Checkpointer<br/>Agent State · Checkpoints")]
end
subgraph Redis ["Redis"]
EventBuf[("SSE Event Buffer<br/>150K events · Reconnect Replay")]
DataCache[("API Cache<br/>Market Data · SWR")]
Steering[("Steering Queue<br/>User Messages Mid-workflow")]
end
BTM --> AppPool
BTM --> CheckPool
BTM --> EventBuf
BTM --> Steering
API --> DataCache
BTM -. "Sandbox API" .-> Daytona["Daytona<br/>Cloud Sandboxes"]
API -. "REST" .-> FinAPIs["Financial APIs<br/>FMP · SEC EDGAR"]
WSP -. "WebSocket" .-> GData["ginlix-data<br/>Polygon.io · Massive"]
多提供商模型层
LangAlpha 运行在一个与提供商无关的模型层之上,该模型层对多个 LLM 后端进行了抽象。无论底层由哪个模型驱动,同一套中间件栈、工具和工作流都能正常运行。它提供两种模式:
PTC 模式用于深入的多步骤投资研究。强大的推理能力驱动多步骤分析:智能体会规划处理方式、深入分析金融数据,并编写代码完成复杂分析。长上下文使其能够在一次处理中交叉引用 SEC 申报文件和研究报告。
Flash 模式用于快速对话响应和工作区编排:快速查询市场、在 MarketView 中边看图表边对话、轻量级问答,以及充当秘书来管理工作区、在后台派发深度 PTC 分析,并通过自然对话返回结果。
自带模型——直接使用你现有的 AI 订阅和 API 密钥。可以通过 OAuth 连接 ChatGPT 或 Claude 订阅(OpenAI Codex OAuth、Claude Code OAuth),使用 Kimi(Moonshot)、GLM(Zhipu)、MiniMax 或 Doubao(Volcengine)的编程套餐,也可以通过 BYOK 为任何受支持的提供商提供自己的 API 密钥。所有密钥均通过 PostgreSQL pgcrypto 进行静态加密(参见“安全”)。
模型韧性——遇到瞬时错误时自动重试,随后故障转移到已配置的备用模型。推理强度(low/medium/high)会自动在不同提供商之间进行统一适配。
程序化工具调用(PTC)与工作区架构
大多数 AI 智能体通过一次性 JSON 工具调用与数据交互,并将结果直接写入上下文窗口。程序化工具调用则颠倒了这一过程:智能体不再让原始数据流经 LLM,而是在 Daytona 云沙箱中编写并执行代码,在本地处理数据,最后只返回最终结果。这在支持原本会超出上下文限制的分析任务的同时,也能显著减少 Token 浪费。
%%{init: {'theme': 'neutral'}}%%
flowchart LR
LLM["LLM"] -- "1 — Writes Python" --> EC["ExecuteCode Tool"]
EC -- "2 — Sends to sandbox" --> Run["Code Runner"]
subgraph Sandbox ["Daytona Cloud Sandbox"]
Run -- "3 — import tools.*" --> Wrappers["Generated Wrappers<br/>One module per MCP server"]
Wrappers -- "4 — JSON-RPC stdio" --> MCP["MCP Servers<br/>Subprocesses in sandbox"]
end
MCP -- "5 — REST / WS" --> APIs["Financial APIs<br/>FMP · Yahoo · Polygon"]
APIs -- "6 — Data" --> MCP
Run -- "7 — stdout · charts · files" --> EC
EC -- "8 — Result" --> LLM
此外,工作区环境还支持跨会话持久化。每个沙箱都有结构化的目录布局:work/<task>/ 用作各项任务的工作区(数据、图表、代码),results/ 用于存放最终报告,data/ 用于存放共享数据集,因此中间结果可以跨会话保留。根目录下有一个 agent.md,它是由 AI 智能体跨线程维护的工作区笔记文件,其中包含工作区目标、关键发现、线程索引以及重要产物的文件索引。中间件层会将 agent.md 注入每次模型调用,使 AI 智能体无需重新读取文件,就能始终掌握此前工作的完整上下文。与此相互独立的是,基于存储的长期记忆系统(.agents/user/memory/、.agents/workspace/memory/)会记录持久的用户偏好和跨沙箱知识,即使工作区重置也不会丢失;由用户管理的备忘录存储(.agents/user/memo/)则用于保存你上传的文档——PDF 会在服务端提取文本,并由 LLM 异步生成元数据,使 AI 智能体能够按主题查找并引用这些文档。每个工作区都支持多个围绕同一研究目标的会话线程。
每个工作区都映射到一个持久化沙箱——你可以按照主题、投资组合或投资论点来组织研究。
AI 智能体通过编写代码构建交互式仪表盘——此处展示的是“科技七巨头 + 半导体”催化剂日历。
虽然 PTC 擅长多步骤数据处理、金融建模和图表创建等复杂工作,但每次查询数据都启动代码执行显得大材小用。因此,我们还构建了一套原生金融数据工具集,将常用数据转换为便于 LLM 消化的格式。这些工具还附带可直接在前端渲染的产物,让用户在查看 AI 智能体分析的同时,立即获得直观的视觉背景信息。
通过直接调用工具进行快速查询的原生工具:
公司概览,包括实时报价、价格表现、关键财务指标、分析师共识和营收构成
SEC 申报文件(10-K、10-Q、8-K),包括财报电话会议文字稿和便于引用的格式化 markdown
市场指数和行业表现,用于提供整体市场背景
Web 搜索(Tavily、Serper、Bocha、Exa、Parallel)——通过清单驱动的方式选择提供商,支持分层搜索深度(从快速查询到深度研究),还提供图像搜索和 AI 研究模式,用户可以自行选择;Web 抓取则提供无需密钥的内置爬虫,并可选择委托给其他提供商(Firecrawl 等),每个提供商都由独立的断路器保护,同时支持可选的网站爬取(WebCrawl/WebMap)
通过 PTC 代码执行来使用原始数据的 MCP 服务器:
价格数据,涵盖股票、大宗商品、加密货币和外汇的 OHLCV 时间序列,以及空头持仓和卖空成交量分析
基本面数据,包括多年期财务报表、财务比率、增长指标、估值、内部人士交易、股息与拆股、流通股本、关键高管和技术指标
宏观经济数据,包括 GDP、CPI、失业率、联邦基金利率、美国国债收益率曲线(1 个月至 30 年)、国家风险溢价、经济日历和财报日历
期权数据,包括支持筛选的期权链、期权合约的历史 OHLCV,以及实时买卖报价快照
Yahoo Finance 工具套件(价格、基本面、分析、市场),无需密钥即可获取财务报表、分析师评级、持仓者信息、筛选数据和日历
X(Twitter)只读帖子搜索、用户及推文查询、线程抓取,用于追踪市场情绪和事件;另有一个抓取服务器,用于处理由 JavaScript 渲染及受反爬虫机制保护的页面
AI 智能体会自动选择合适的层:对于能够放入上下文的快速查询,使用原生工具;当任务需要在沙箱中进行批量数据处理、绘图或多年趋势分析时,则使用 MCP 工具。
每个工作区都可以单独配置 MCP 服务器。内置服务器可以逐一禁用,也可以通过 API 或 UI 添加自定义 HTTP 或 stdio 服务器——包括从工作区凭据保险库读取凭据的服务器。配置会在数秒内生效,无需重启。
LangAlpha 支持三级数据提供商层级。每一层都是可选的——当较高级别不可用时,系统会平稳降级:
默认启用所有层级。若只使用免费数据(Yahoo Finance),请运行 make config 并按照提示进行选择。你也可以手动编辑 agent_config.yaml。
Yahoo Finance 数据由社区提供,因此存在一些限制:不提供时间间隔短于 1 小时的盘中数据、报价存在延迟、宏观数据覆盖有限,并且偶尔会触发限流。强烈建议配置 FMP_API_KEY(提供免费套餐)。
AI 智能体内置 23 项预构建的金融研究技能,每项技能都可以通过斜杠命令激活,也可以由系统自动检测并启用。这些技能遵循 Agent Skills Spec,并且可以通过将 SKILL.md 文件放入工作区来扩展。
致谢:部分技能改编自 anthropics/financial-services-plugins。
可比公司分析技能会生成一个 Excel 模型和一份 PDF 报告,其中包含根据同业公司估值倍数推算的隐含价格区间。
AI 智能体原生支持读取图像(PNG、JPG、GIF、WebP)和 PDF——多模态中间件会拦截文件读取操作,从沙箱或 URL 下载内容,将其编码为 base64 后注入对话,以便模型直接进行视觉理解。在 MarketView 中,可以捕获用户的实时 K 线图,并将其作为多模态上下文发送给 AI 智能体——捕获内容既包括图表图像,也包括结构化元数据(交易代码、时间间隔、OHLCV、移动平均线、RSI、52 周价格区间),使 AI 智能体能够同时分析视觉形态和底层数据。
MarketView 会将实时图表发送给 AI 智能体,以进行实时技术分析。
让 AI 智能体标注 MarketView 图表,它便会直接在画布上绘制价格水平线、趋势线、斐波那契回撤线、事件徽标、矩形和文本标记。标注通过 SSE 实时流式传输,并按工作区和 交易代码:时间周期 组合分别持久化(例如,NVDA:1day 上的绘图与 NVDA:1hour 上的绘图彼此独立),重新连接后还会自动重放。当对话发生在 MarketView 之外时,聊天记录中会显示一个包含标注图例的迷你预览卡片,并提供一个可一键打开实时图表的链接。只要消息是从 MarketView 发出的,图表标注技能就会自动加载,因此 AI 智能体始终知道“该图表”具体指的是哪个交易代码和时间周期。
AI 智能体可以直接在对话中为自己安排任务——无需使用单独的 UI。用户也可以通过专用的 Automations 页面管理自动化任务,该页面支持完整的 CRUD、执行历史记录和手动触发。所有自动化类型都共用同一个 AutomationExecutor,支持配置 AI 智能体模式(PTC 或 Flash),并会在连续失败后自动禁用。
基于时间——使用标准 cron 表达式设置重复执行计划(“每周一上午 9 点运行此分析”),或通过指定日期时间安排未来仅执行一次的任务。
价格触发——为任意股票或主要指数设置目标价格或涨跌幅,一旦满足条件,AI 智能体便会立即执行你的指令。PriceMonitorService 通过共享的上游 WebSocket 连接订阅 ginlix-data,以接收实时报价更新(股票使用实时数据层,指数使用延迟数据层)。基于 Redis 的去重机制可以防止任务在多个服务器实例上被重复触发。
多个条件可以组合使用(AND 逻辑),每项价格自动化任务都支持仅触发一次,或以可配置的冷却时间重复触发(最短为 4 小时,默认每个交易日最多触发一次)。
价格触发的自动化任务需要 ginlix-data 提供的实时 WebSocket 数据源。在测试阶段,此功能仅在托管平台上提供。未来版本计划支持更多 WebSocket 数据源。
安排周期性研究——此处展示的是在每次财报发布前自动运行的“科技七巨头”财报前分析。
%%{init: {'theme': 'neutral'}}%%
flowchart TB
subgraph Orchestrator ["BackgroundSubagentOrchestrator"]
direction TB
Agent["Main Agent · LangGraph ReAct"]
end
Agent -- "Task(init · update · resume)" --> SubPool
SubPool -- "results" --> Orchestrator
subgraph SubPool ["Subagent Pool — Parallel Async"]
direction LR
S1["general-purpose"]
S2["research"]
S3["user-defined"]
end
subgraph Middleware ["Middleware Stack"]
direction LR
MW1["Tool Safety<br/>Leak Detection<br/>Protected Paths<br/>Error Handling"]
MW2["Context & Skills<br/>agent.md Injection<br/>Skill Loading<br/>Multimodal"]
MW3["Coordination<br/>HITL · Plan Mode<br/>Steering<br/>Subagent Dispatch"]
MW4["Resilience<br/>Compaction<br/>Retry + Fallback<br/>Prompt Caching"]
end
Agent -- "wraps model + tool calls" --> Middleware
Middleware --> LLM["Multi-Provider LLM<br/>OpenAI · Anthropic · Gemini · DeepSeek<br/>Qwen · Kimi · Doubao · GLM · MiniMax · ..."]
Agent <--> Tools
subgraph Tools ["工具层"] direction LR T1["execute_code<br/>bash"] T2["文件系统<br/>read · write · edit<br/>glob · grep"] T3["金融<br/>市场数据 · SEC<br/>期权 · 筛选器"] T4["Web<br/>搜索 · 获取"] T5["ShowWidget<br/>内嵌 HTML"] end
T1 <--> Workspace T2 <--> Workspace
subgraph Workspace ["工作区 — Daytona 沙箱"] direction LR W1["agent.md<br/>工作区笔记"] W2["work/‹task›/<br/>数据 · 图表"] W3["results/<br/>报告"] W4["tools/<br/>MCP 封装器"] end
核心 AI 智能体基于 LangGraph 运行,并通过 Task() 工具生成并行异步子智能体。子智能体拥有相互隔离的上下文窗口并发执行,可避免长推理链中的思路漂移。每个子智能体都会将综合整理后的结果返回给主智能体,从而让编排器保持精简。主智能体可以选择等待子智能体的结果,也可以继续处理其他待办工作。你还可以切换到 UI 中的「子智能体」视图,实时查看它们的进度(仅限 Web 前端)。
除了简单的任务分派,主智能体还可以向仍在运行的子智能体发送后续指令,或者在保留完整上下文的情况下恢复已完成的子智能体,以便进行迭代优化。如果服务器重启,系统会根据子智能体最近的检查点自动重建其状态。
研究子智能体会在整个算力产业链中并行运行——最终结果被整合为一条交互式 AI 算力时间线,涵盖 NVIDIA、Google、AMD、AWS 以及行业中的其他公司。
该 AI 智能体内置了一套中间件栈,包括:
实时引导——AI 智能体可能会走错方向、追踪无关数据,或者在分析过程中误解你的意图。引导功能让你无需等待即可纠正其方向。在 AI 智能体工作期间,你可以随时发送后续消息——更新后的指令、澄清说明,甚至是全新的问题——AI 智能体会在下一步操作前接收这些信息,就像你当时实时说出这些内容一样。引导功能适用于每一个层级:你可以重新引导主智能体、向各个后台子智能体发送后续指令;如果工作流先一步完成,系统也可以将尚未处理的消息平稳地退回你的输入框。工作不会丢失,也无须重新启动。
通过 LoadSkill 工具动态加载技能,使 AI 智能体能够按需发现并激活技能工具集,在保持默认工具集合精简的同时,按需提供专业能力。
多模态功能会拦截对图像和 PDF 的文件读取操作,从沙箱或 URL 下载内容,并将其以 base64 格式注入对话,使多模态模型能够原生理解这些内容。
带有人机协同中断机制的计划模式允许你在执行前审查并批准 AI 智能体的策略。
自动压缩会在接近 token 上限时压缩对话历史,在释放空间的同时保留关键上下文。
上下文管理会自动将大型工具结果转存至工作区文件系统,只在上下文中保留简短预览;随着对话变长,它还会进行压缩——总结较早的轮次,同时确保完整记录仍可从工作区恢复。研究会话可以无限期运行,而不会触及上下文限制。
完整内容请参阅 `src/ptc_agent/agent/middleware/`。
致谢:部分中间件组件的实现改编自 LangChain DeepAgents,或受其启发。
## 流式传输与基础设施
服务器通过 SSE 流式传输 AI 智能体的所有活动:文本片段、包含参数和结果的工具调用、子智能体状态更新、文件操作产物,以及人机协同中断。AI 智能体的每一项决策都可以在 UI 中完整追踪。
工作流作为彼此独立的后台任务运行,与 HTTP/SSE 连接完全解耦。即使浏览器标签页关闭或网络中断,AI 智能体仍会继续工作。重新连接后,最多可重放 150,000 个已缓冲事件,使客户端能够准确地从中断位置继续。
PostgreSQL 为 LangGraph 检查点、对话历史和用户数据(关注列表、投资组合、偏好设置)提供持久化支持,因此 AI 智能体状态和用户上下文可以跨会话保留。Redis 缓冲 SSE 事件,确保浏览器刷新和网络中断不会导致正在传输的消息丢失:客户端会自动重新连接并重放事件。用户数据以虚拟 JSON 文件的形式提供给 AI 智能体,并由数据库直接支持——读取时按需序列化实时数据行,写入则在一次经过验证的事务中完成,无须与沙箱往返同步;技能会在会话初始化时通过基于清单的缓存同步至沙箱,并且仅在发生变更时重新上传。详情请参阅完整的 API 参考。
AI 智能体访问的每个外部数据源都会被追踪并呈现出来。来源追踪中间件会记录每次 Web 搜索、页面获取、SEC 文件、市场数据调用、MCP 工具调用和工作区文件读取——包括后台子智能体发起的访问——并为每个来源发出一个来源追踪流事件,而这些事件均不会进入 LLM 上下文。UI 会在每轮对话旁边的「来源」面板中呈现这些信息:来源按类型分组,Web 来源显示网站图标,详情视图则展示提供商、时间戳、捕获的参数、内容指纹和内容片段。「本轮 / 所有来源」切换项可以显示整个对话线程的完整数据足迹;点击文件或备忘录来源,则会直接在工作区文件面板中打开它,从而形成一条完全可审计的追踪链,展示每项研究输出背后所使用的数据。
## 安全与工作区保险库
LangAlpha 针对凭据、代码执行和用户提供的密钥采用分层安全模型。
静态加密——所有敏感数据(BYOK API 密钥、OAuth token、保险库密钥)均使用 pgcrypto 在 PostgreSQL 内加密。数据库永远不会存储明文。
凭据泄漏检测——每项工具输出在进入 LLM 上下文之前都会经过扫描。中间件会解析所有已知的密钥值(MCP 服务器密钥、沙箱 token、保险库密钥),并将任何匹配项编辑为 `[REDACTED:KEY_NAME]`。同样的编辑规则也适用于面向用户的界面——文件读取结果和下载内容在传送到客户端之前都会被清理。
沙箱化代码执行——每个工作区都运行在各自独立的 Daytona 云沙箱中,拥有专用的文件系统和网络边界。受保护路径的防护机制会阻止 AI 智能体访问内部系统目录——既会拦截工具输入(在执行前直接终止调用),也会处理工具输出(编辑泄漏的路径)。
每个工作区都内置有一个