智能体架构:从自然语言到交易决策
当你说"回测 BTC-USDT 的双均线策略",背后发生了什么?LLM 选择工具、Loader 拉取数据、引擎执行回测、LLM 解读结果——这不是流水线,而是一个经过精心编排的智能体循环。
系统架构概览
Vibe-Trading 的智能体架构分为三层:
- LLM 编排层:基于 LangChain 的 ChatOpenAI 兼容层,负责理解用户意图、选择工具、组织对话
- 工具执行层:47+ 个交易专用工具,涵盖数据、分析、交易、文件处理等
- 持久化层:会话记忆 + Skills 技能系统 + 文件存储
┌─────────────────────────────────────────────────────┐
│ 用户输入 │
│ "回测沪深300在2024年的低波因子策略" │
└──────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────┐
│ LLM 编排层(LangChain) │
│ ① 理解意图 → ② 选择技能/工具 → ③ 规划步骤 → ④ 执行 │
└──────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────┐
│ 工具执行层 │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │回测 │ │数据 │ │因子 │ │分析 │ │交易 │ ... │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
└──────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────┐
│ 持久化层 │
│ 会话记忆(FTS5) │ Skills 库(77个) │ 用户文件 │ │
└─────────────────────────────────────────────────────┘LLM 编排层
多 Provider 支持
Vibe-Trading 通过 LangChain 的 ChatOpenAI 兼容层对接了 13 个 LLM provider,从云端服务到本地部署全覆盖:
- 大型云端:OpenAI、Anthropic(通过 OpenRouter)、Gemini、DeepSeek
- 国内平台:通义千问 / Qwen、智谱 GLM、月之暗面 Kimi、MiniMax、小米 MIMO
- 其他:Groq、Z.ai(零一万物)
- 本地部署:Ollama(无需 API key)
- 特殊:OpenAI Codex(通过 ChatGPT OAuth)
每个 provider 的配置在 Settings 页面或 .env 文件中管理,支持 reasoning_effort 参数调优(如 DeepSeek R1 和 Gemini 的思考链模式)。
Agent Loop
智能体运行的核心是一个循环:
- 接收输入:CLI 文本、Web UI 消息、MCP 调用或 REST API 请求
- 意图路由:系统 prompt 根据用户输入选择匹配的 finance skill
- 工具调用:LLM 决定调用哪些工具(回测、数据加载、文件读取等)
- 结果整合:LLM 解读工具输出,生成自然语言回答
- 记忆更新:关键信息写入持久记忆,供后续会话使用
- 迭代终止:达到目标或触发停止条件(最大迭代 50 轮)
一个关键的设计细节是:在迭代预算的 80% 处会注入 wrap-up nudge,并在最后一次迭代丢弃 tool 定义以强制产出文本答案。这避免了智能体无限循环、永不给出结论的问题。
Reasoning Content 保留
对于支持思考链(Chain-of-Thought)的模型,Vibe-Trading 会保留 reasoning_content 并在所有 ChatOpenAI 路径中传递。这意味着 Kimi、DeepSeek 和 Qwen 等模型的思维过程可以在全链路中保持连贯。
工具系统
截至最近的统计,Vibe-Trading 拥有 47 个 MCP 工具,分布在以下类别:
| 类别 | 工具数 | 示例 |
|---|---|---|
| 回测 | 3+ | run_backtest(含 validate/simulate/finalize 阶段进度通知) |
| 数据 | 7+ | read_document(PDF/Word/Excel/图片OCR/40+文本格式) |
| 因子 | 4+ | alpha_bench、alpha_compare、factor_analysis |
| 交易 | 5+ | trading_place_order、trading_cancel_order(mandate 守护) |
| 智能体 | 8+ | session_search、remember、goal_create、swarm_run |
| 文件 | 4+ | read_file、write_file、edit_file(安全路径约束) |
| Web | 2+ | web_search、web_reader(带获取/解析阶段进度) |
| 通用 | 10+ | shell、MCP 桥接、配置等 |
工具调用不仅产出结果,还会实时反馈进度:
- 3 秒一次的心跳信号
- 结构化阶段标记(如
validate/simulate/finalize) - CLI 和 Web UI 双端的进度可视化
- 第一次 Ctrl+C 优雅取消,第二次强制退出
记忆系统
Vibe-Trading 的记忆系统基于 SQLite FTS5 全文搜索,提供:
- 跨会话记忆:不同会话之间可以共享和检索关键信息
- FTS5 搜索:支持复杂查询和模糊匹配
- 可编辑技能:用户可以通过
skill_writer_tool创建和修改自己的技能 - 5 层上下文压缩:在长对话中自动压缩历史,节省 token
- Read/Write 批处理:减少 LLM 调用的往返次数
Research Goal 系统
Research Goal 是 Vibe-Trading 的任务运行器。它把一次研究请求转化为结构化的目标:
- Criteria:定义"什么算完成"的验收标准
- Claims:智能体提出的可验证声明
- Evidence:支撑 Claims 的数据与推理
- Budget:允许的迭代次数或 token 预算
- Completion Policy:何时算完成的判定规则
Goal 可以在 CLI、Web UI、REST API 和 MCP 任意一端创建,支持继续、编辑、取消和完成操作。当 goal 的 criteria 已覆盖但 goal 仍 active 时,智能体会进入 audit/status 更新模式,而不是静默停住。
Skills 技能系统
Vibe-Trading 的 77 个 finance skill 不只是文档,而是可被 LLM 动态加载和执行的知识模块。每个 skill 是一个 YAML/配置文件,包含:
- 触发条件:什么场景下自动激活
- 工具列表:该 skill 可以调用的工具
- 上下文提示:注入 LLM prompt 的领域知识
- 工作流模板:常见任务的执行步骤
系统支持 Skill 的热加载、依赖管理和版本追踪。用户也可以在运行时通过对话创建自定义 skill,实现真正的工作流复用。
安全与边界
智能体系统的安全性体现在多个层面:
- 路径隔离:
safe_path函数严格限制文件读写范围 - Shell 限制:shell-capable 工具按入口点限制
- 策略加载门禁:LLM 生成的策略代码在导入前经过 AST 校验
- 镜像安全:Docker 以非 root 用户运行
- API 认证:远程部署要求设置
API_AUTH_KEY - 会话隔离:不同 session 之间的数据不互通
检验标准
读完本文后,你应该能回答:
- Vibe-Trading 的智能体架构分哪三层?每层的核心职责是什么?
- Agent Loop 的工作流程是怎样的?它是如何避免无限循环的?
- 工具系统如何实现实时进度反馈?
- Research Goal 系统解决的核心问题是什么?
- 智能体系统的安全性如何在多个层面得到保证?
