跳转至

构建基于多智能体架构的深度思考交易系统

Ch04.205 构建基于多智能体架构的深度思考交易系统

📊 Level ⭐⭐ | 10.9KB | entities/构建基于多智能体架构的深度思考交易系统.md

深度分析

系统架构的核心理念

该系统采用分层协同架构,将交易决策分解为情报收集 → 策略形成 → 风险辩论 → 最终审批四个阶段。每个阶段由专门的智能体团队负责,通过结构化的对抗性辩论得出结论,而非依赖单一智能体的判断。 这种设计的核心优势在于:

  • 信息多样性保障:四类分析师(市场/社交媒体/新闻/基本面)并行工作,确保决策输入的全面性
  • 冲突显性化:多空辩论将隐藏的矛盾(如高估值 vs 强动量)暴露出来,防止确认偏误
  • 风险分层把控:风控团队从激进/保守/中性三个视角对提案进行压力测试

状态管理模式的设计亮点

AgentState 采用 TypedDict + 嵌套状态 的设计,主状态包含 investment_debate_staterisk_debate_state 两个子状态。这种模式使得:

  • 辩论过程中的中间结论得以完整保留
  • 各智能体可以读取并修改属于自己的子状态字段
  • 最终决策可以追溯完整的推理链

记忆系统的实现策略

FinancialSituationMemory 使用 ChromaDB 向量存储,实现了案例式学习(Case-Based Learning)。每个智能体拥有独立的记忆空间(collection),确保学到经验的高度相关性。例如,多头智能体学到"在强劲上升趋势中估值担忧不那么重要",这个教训不会污染保守型风险分析师的判断。

工厂模式的灵活应用

create_analyst_nodecreate_researcher_nodecreate_risk_debator 等工厂函数大量复用,降低了代码重复。这种模式的核心价值在于:通过注入不同的 role_prompt,同一套代码逻辑可以产生完全不同行为的智能体。

潜在局限与改进方向

  1. Token 成本:完整流程需要多次 LLM 调用(分析师×4 + 辩论×4 + 主管×1 + 交易员×1 + 风控×3 = 至少 13 次),在生产环境中需优化
  2. 实时性约束:当前设计适合日内分析,但无法处理需要毫秒级响应的日内交易
  3. 回测缺失:文章未提供历史绩效评估,系统有效性需要验证
  4. 信号解析脆弱性FINAL TRANSACTION PROPOSAL: **BUY** 这种模式匹配依赖 LLM 输出格式的稳定性,可靠性存疑

实践启示

在生产环境中部署的要点

  1. 追踪先行:使用 LangSmith 是正确选择,但建议额外记录每个智能体的 tool_calls 序列,便于审计 LLM 的工具选择是否合理
  2. 缓存策略:设置 online_tools: False 用于日常回测,避免重复消耗 API 配额
  3. 安全限制max_recur_limit: 100 是必要的,但 100 轮对于复杂辩论仍可能不足,建议配合超时机制

快速验证的最小化方案

如需快速验证该架构的有效性,可以: 1. 减少分析师数量(只保留市场+基本面 2 个) 2. 将辩论轮数设为 1 轮 3. 使用 gpt-4o-mini 替代 gpt-4o 降低成本 4. 选择高流动性股票(如 AAPL)作为测试标的

多智能体协作的关键设计原则

  • 每个智能体的工具集应最小化:市场分析师不应访问社交媒体工具,这强制了专注性
  • 辩论结构应强制对立:多头和空头必须直接引用对方的论点,而非独立陈述
  • 状态字段的命名应自解释bull_history vs bear_history 的分离使得追踪每位辩论者的论点更容易

从该系统借鉴的架构思想

  1. 对抗性设计:任何关键决策都应经过立场对立的智能体验证
  2. 双模型策略:简单任务用小模型降低成本,复杂推理用大模型保证质量
  3. 记忆分离:不同角色的智能体应有独立的经验库,防止知识污染

相关实体

原文存档

构建基于多智能体架构的深度思考交易系统

在本文中,我们将编写代码并可视化一个先进的基于智能体的交易系统,其中分析师、研究员、交易员、风险经理和投资组合经理协同工作,执行智能交易。

一个深度思考的交易系统包含多个部门,每个部门由若干子智能体组成,它们通过逻辑流程做出明智决策。例如,分析师团队从各种来源收集数据,研究员团队对这些数据进行辩论和分析以形成策略,执行团队则与投资组合管理及其他辅助子智能体协同工作,对交易进行优化和审批。 在系统底层,有许多复杂的流程在运行,一个典型的流程是这样的…… 1. ** 首先,一个由专业分析师智能体组成的团队收集360度全方位市场情报 ** ,从技术数据、新闻,到社交媒体情绪和公司基本面,无所不包。 2. ** 然后,多头和空头智能体进行对抗性辩论 ** ,对研究结果进行压力测试,由研究主管将其整合成一个平衡的投资策略。 3. ** 接着,交易员智能体将该策略转化为具体、可执行的提案 ** ,并立即接受多角度风控团队(激进型、保守型、中性型)的审查。 4. ** 最终决策由投资组合经理智能体做出 ** ,它权衡交易员的计划与风险辩论的结果,给出最终批准。 5. ** 批准后,系统从经理的自然语言决策中提取出清晰、机器可读的信号 ** (买入、卖出或持有),用于执行和审计。 6. ** 最后,整个过程形成一个反馈闭环 ** 。智能体反思交易结果,生成新的经验教训,并存入长期记忆,以持续提升未来表现。

环境搭建、LLM 与 LangSmith 追踪

首先,我们需要妥善保管 API 密钥,并使用 LangSmith 设置追踪。追踪非常重要,因为它能让我们一步步观察多智能体系统内部发生的事情。这大大简化了调试问题、理解智能体工作方式的过程。如果要打造一个可靠的生产级系统,追踪不是可选项,而是必备项。

# 首先,确保已安装所需库  
# !pip install -U langchain langgraph langchain_openai tavily-python yfinance finnhub-python stockstats beautifulsoup4 chromadb rich  
import os
from getpass import getpass

# 定义一个辅助函数,安全地设置环境变量  
def _set_env(var: str):

    # 如果环境变量尚未设置,则提示用户输入  
    if not os.environ.get(var):
        os.environ[var] = getpass(f"请输入你的 {var}: ")

# 设置我们将使用的服务的 API 密钥  
_set_env("OPENAI_API_KEY")
_set_env("FINNHUB_API_KEY")
_set_env("TAVILY_API_KEY")
_set_env("LANGSMITH_API_KEY")

# 启用 LangSmith 追踪,实现智能体系统的完全可观测性  
os.environ["LANGSMITH_TRACING"] = "true"

# 为 LangSmith 定义项目名称,用于组织追踪记录  
os.environ["LANGSMITH_PROJECT"] = "Deep-Trading-System"

我们正在设置 ** OpenAI ** 、 ** Finnhub ** 和 ** Tavily ** 的 API 密钥。

  • OpenAI 用于运行我们的大语言模型(你也可以使用 ** Together AI ** 等开源大模型提供商的免费额度进行测试)。
  • Finnhub [1] 用于获取实时股市数据(免费套餐的 API 调用次数有限)。
  • Tavily [2] 用于网页搜索和新闻获取(提供免费套餐)。
  • LangSmith 用于追踪和可观测性(免费套餐可让你轻松追踪和调试智能体)。 LANGSMITH_PROJECT 变量尤为重要,它能确保本次运行的所有追踪记录在 LangSmith 仪表板中归为一组,便于隔离和分析本次具体执行。 为了让系统模块化,我们将使用一个中心配置字典。这相当于我们的控制面板,让我们能够轻松尝试不同的模型或参数,而无需修改核心智能体逻辑。 from pprint import pprint

    定义本次笔记本运行的中心配置

    config = {     "results_dir": "./results",

    # LLM 设置,指定不同认知任务使用哪些模型
        "llm_provider": "openai",     "deep_think_llm": "gpt-4o",       # 用于复杂推理和最终决策的强大模型     "quick_think_llm": "gpt-4o-mini", # 用于数据处理和初步分析的快速、低成本模型     "backend_url": "https://api.openai.com/v1",

    # 辩论与讨论设置,控制协作智能体的流程
        "max_debate_rounds": 2,          # 多空辩论将进行 2 轮     "max_risk_discuss_rounds": 1,    # 风控团队进行 1 轮辩论     "max_recur_limit": 100,          # 智能体循环的安全限制

    # 工具设置,控制数据获取行为
        "online_tools": True,            # 使用实时 API;设为 False 则使用缓存数据,实现更快、更低成本的运行     "data_cache_dir": "./data_cache"# 缓存在线数据的目录 }

    如果缓存目录不存在,则创建它

    os.makedirs(config["data_cache_dir"], exist_ok=True) print("配置字典已创建:") pprint(config) 这些参数在后面会更有意义,但这里我们先解释几个关键参数。选择两种不同的模型( deep_think_llmquick_think_llm )是一种深思熟虑的架构决策,旨在优化成本和性能。

  • ** deep_think_llm ( ** **gpt-4o** ** ) ** → 处理复杂推理和最终决