面向 vibe investing 的 agent harness
LangAlpha 帮你解读金融市场,辅助投资决策。
快速开始 • API 文档 • Agent 核心 • 后端 • 前端 • TUI • Skills • MCP
把 dashboard 里的精选新闻简报 pin 给 agent,让多个并行 subagent 扫描市场并生成选股思路——结果会回到对话内嵌的交互式 dashboard 里,给出五组贴合你持仓风格的多空配对交易思路。
如今的 AI 金融工具大多把投资当成一次性问答:问一个问题,得到一个答案,然后结束。但真实的投资更像持续更新判断——先有一个投资假设,每天有新数据进来,再据此调整信心。这个过程往往以周、月为单位展开:修正假设、复盘仓位、在已有分析之上叠加新分析。单靠一句 prompt,很难承载这些。
灵感来自软件工程:一个 codebase 会一直留存,每一次 commit 都建立在此前的基础上。Claude Code、OpenCode 这类代码 agent harness 之所以有效,正是因为它们让 agent 先理解已有上下文,再基于已有工作继续推进。LangAlpha 把同样的思路带到投资里:给 agent 一个持久的 workspace,让研究可以持续积累。
具体来说,你为每个研究目标建一个 workspace(比如“二季度再平衡”“数据中心需求深挖”“能源板块轮动”)。agent 会先了解你的目标和风格,生成第一份交付物,并把相关文件保存到 workspace 文件系统里。第二天回来,你的文件、thread 和此前积累的研究都还在。
agent.md),让研究在多次 session 和多个 thread 之间不断累积。另有一套独立的长期 memory 存储(.agents/user/memory/、.agents/workspace/memory/),保存长期有效的用户偏好和跨 sandbox 的知识;还有一套用户自管的 memo 存储(.agents/user/memo/),你可以上传 PDF 和 markdown 研究笔记,agent 按需读取。系统架构
%%{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 运行在与具体 provider 解耦的模型层上,统一封装多个 LLM 后端。不管底层由哪个模型驱动,同一套 middleware、工具和工作流都可以照常运行。内置两种模式:
使用你自己的模型和 API key(BYOK) — 直接用你已有的 AI 订阅和 API key。通过 OAuth 接入 ChatGPT 或 Claude 订阅(OpenAI Codex OAuth、Claude Code OAuth),使用 Kimi(月之暗面)、GLM(智谱)、MiniMax 或豆包(火山引擎)的 coding plan,或者通过 BYOK 为任何受支持的 provider 填入自己的 API key。所有 key 都用 PostgreSQL 的 pgcrypto 做静态加密(详见安全)。
模型容错 — 遇到瞬时错误自动重试,之后 failover 到配置好的备用模型。推理力度(low/medium/high)会在各家 provider 之间自动对齐。
大多数 AI agent 通过一次性的 JSON 工具调用处理数据,并把结果直接放进上下文窗口。Programmatic Tool Calling 的做法不同:agent 不把原始数据交给 LLM,而是在 Daytona 云 sandbox 里写代码、执行代码,就地处理数据,只返回最终结果。这样既减少 token 浪费,也能完成原本会超出上下文上限的分析。
PTC 执行流程
%%{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
除此之外,workspace 环境让数据不再局限于单次 session。每个 sandbox 都有一套结构化目录:work/<task>/ 放各任务的工作区(数据、图表、代码),results/ 放定稿报告,data/ 放共享数据集,中间结果因此可以跨 session 留存。根目录下的 agent.md 是 agent 跨 thread 维护的 workspace 笔记,记录 workspace 目标、关键发现、thread 索引和重要产物的文件索引。一层 middleware 会把 agent.md 注入每一次模型调用,因此 agent 不必反复重读文件,也能掌握此前工作的完整上下文。另有一套基于 store 的长期 memory 系统(.agents/user/memory/、.agents/workspace/memory/),记录长期有效的用户偏好和跨 sandbox 的知识;用户自管的 memo 存储(.agents/user/memo/)则用于存放你上传的文档。PDF 会在服务端抽取文本,元数据由 LLM 异步生成,方便 agent 按主题找到并引用。每个 workspace 支持多个对话 thread,并共同服务于同一个研究目标。
每个 workspace 对应一个持久 sandbox——按主题、投资组合或论点来组织研究。