Skip to content

Latest commit

 

History

History
260 lines (198 loc) · 8.93 KB

File metadata and controls

260 lines (198 loc) · 8.93 KB

stocklens/agent/ — 多 Agent 系统

职责

多 Agent 协作分析系统。支持 single(单 ReAct Agent)和 multi(编排器协调 5 个专业 Agent)两种架构。包含工具注册、策略路由、YAML 技能加载。

文件清单

根目录

文件 职责
orchestrator.py AgentOrchestrator 多 Agent 编排器
orchestrator_dashboard.py 决策仪表盘风格编排器
runner.py AgentRunner ReAct 循环执行器(工具并行用 AGENT_TOOLS 池,默认 5)
factory.py Agent 工厂
executor.py Agent 执行器
conversation.py 对话状态
memory.py Agent 记忆
llm_adapter.py LLM 适配器
protocols.py Agent 协议、Result 类型
__init__.py 导出

agents/(5 个专业 Agent)

文件 职责
base_agent.py BaseAgent 抽象基类
technical_agent.py 技术面分析
intel_agent.py 情报搜索与分析
risk_agent.py 风险评估(可一票否决)
portfolio_agent.py 组合分析
decision_agent.py 最终决策

strategies/(策略路由与聚合)

文件 职责
router.py StrategyRouter 策略路由(auto/manual)
aggregator.py StrategyAggregator 加权聚合
strategy_agent.py StrategyAgent 单策略执行 Agent

tools/(Agent 工具)

文件 职责
registry.py ToolRegistry 工具注册表
market_tools.py 市场数据工具(行情/指数/宏观)
data_tools.py 数据查询工具(日线/周线/基本面)
search_tools.py 搜索工具(新闻/研报)
analysis_tools.py 分析工具(技术指标/评分)
backtest_tools.py 回测工具

skills/(YAML 策略加载)

YAML 策略文件加载器;strategies/ 顶级目录下的 YAML 由此加载。

核心类

AgentOrchestrator(orchestrator.py)

多 Agent 编排器,协调 5 个专业 Agent 的执行顺序。

初始化

orchestrator = AgentOrchestrator(
    config: Config,
    data_manager: DataFetcherManager,
    search_service: SearchService,
)

关键方法

  • run(code: str, name: str, metadata: dict) -> dict — 执行多 Agent 分析

    • 根据 AGENT_ORCHESTRATOR_MODE 选择流水线:
      • quick: Technical → Decision
      • standard: Technical → Intel → Decision
      • full: Technical → Intel → Risk → Decision
      • strategy: Technical → Intel → Risk → Strategy×N → Decision
    • 超时预算: AGENT_ORCHESTRATOR_TIMEOUT_S(默认 600s)
    • 返回: 决策仪表盘 dict
  • _run_agent(agent: BaseAgent, context: dict) -> dict — 执行单个 Agent

    • 调用 AgentRunner.run() 执行 ReAct 循环
    • 将结果合并到共享 context
  • _check_risk_veto(risk_result: dict) -> bool — 检查风控是否一票否决

    • AGENT_RISK_OVERRIDE=true 且 Risk Agent 返回 veto 时,跳过后续 Agent

流水线示例(full 模式)

context = {code, name, metadata}
  │
  ├─ TechnicalAgent.run(context)
  │   └─ 输出: 技术面分析结果 → 合并到 context
  │
  ├─ IntelAgent.run(context)
  │   └─ 输出: 情报搜索结果 → 合并到 context
  │
  ├─ RiskAgent.run(context)
  │   ├─ 输出: 风险评估结果 → 合并到 context
  │   └─ 检查: 是否一票否决?
  │
  └─ DecisionAgent.run(context)
      └─ 输出: 最终决策仪表盘

AgentRunner(runner.py)

ReAct 循环执行器。

关键方法

  • run(agent: BaseAgent, context: dict) -> dict — 执行 ReAct 循环

    • 循环: Thought → Action → Observation → ... → Final Answer
    • 最大步数: AGENT_MAX_STEPS(默认 10)
    • 每步调用 LLM 决定下一步动作
    • 动作类型: 调用工具 / 返回最终答案
  • _execute_tool(tool_name: str, params: dict) -> str — 执行工具调用

    • ToolRegistry 查找工具
    • 执行并返回结果字符串

BaseAgent(agents/base.py)

所有 Agent 的抽象基类。

抽象属性/方法

  • name: str — Agent 名称
  • role: str — 角色描述
  • system_prompt: str — 系统提示词
  • available_tools: List[str] — 可用工具列表
  • run(context: dict) -> dict — 执行分析

5 个专业 Agent

Agent 名称 可用工具 输出
TechnicalAgent 技术面分析师 get_daily_history, analyze_trend, get_bollinger 技术面分析报告
IntelAgent 情报分析师 search_news, search_analyst_reports 情报摘要
RiskAgent 风控分析师 get_fundamental, get_macro, analyze_risk 风险评估 + veto 标志
PortfolioAgent 组合分析师 get_portfolio, calculate_position 仓位建议
DecisionAgent 决策分析师 无(汇总前序 Agent 结果) 最终决策仪表盘

ToolRegistry(tools/registry.py)

工具注册表。

关键方法

  • register(name: str, func: Callable, description: str, params: dict) -> None — 注册工具
  • get_tool(name: str) -> dict — 获取工具定义
  • get_all_tools() -> List[dict] — 获取所有工具
  • execute(name: str, params: dict) -> str — 执行工具

12 个内置工具

工具名 来源 说明
get_daily_history data_tools 获取日线历史数据
get_weekly_history data_tools 获取周线历史数据
get_fundamental data_tools 获取基本面数据
get_realtime_quote market_tools 获取实时行情
get_market_indices market_tools 获取大盘指数
get_macro_data market_tools 获取宏观数据
analyze_trend analysis_tools 趋势分析
get_bollinger analysis_tools 布林带分析
calculate_score analysis_tools 量化评分
search_news search_tools 搜索新闻
search_analyst_reports search_tools 搜索研报
run_backtest backtest_tools 运行回测

StrategyRouter(strategies/router.py)

策略路由器。

关键方法

  • route(code: str, metadata: dict) -> List[str] — 根据市场环境选择策略
    • auto 模式: 基于行情特征(趋势/震荡/反转)自动选择
    • manual 模式: 使用 AGENT_SKILLS 配置的策略列表

StrategyAggregator(strategies/aggregator.py)

多策略结果加权聚合。

关键方法

  • aggregate(results: List[dict]) -> dict — 加权聚合多个策略结果
    • 权重来源: 回测历史表现(AGENT_STRATEGY_AUTOWEIGHT=true 时)
    • 否则等权重

YAML 策略(strategies/ 目录)

11 个内置策略文件:

文件 策略名 类别
trend_following.yaml 趋势跟踪 trend
mean_reversion.yaml 均值回归 reversal
breakout.yaml 突破策略 trend
chanlun.yaml 缠论 framework
elliott_wave.yaml 波浪理论 framework
box_oscillation.yaml 箱体震荡 pattern
leading_stock.yaml 龙头战法 trend
value_investing.yaml 价值投资 fundamental
momentum.yaml 动量策略 trend
pairs_trading.yaml 配对交易 statistical
event_driven.yaml 事件驱动 event

YAML 策略格式

name: strategy_id
display_name: 策略显示名
description: 策略描述
category: trend/reversal/pattern/framework/fundamental/statistical/event

required_tools:
  - get_daily_history
  - analyze_trend

instructions: |
  策略执行指令(自然语言)...

依赖关系

  • 依赖:configtickbridgesearchservicesstoragelitellm
  • 被依赖:api(agent 端点)、bot(/ask 命令)

配置项

变量 默认值 说明
AGENT_MODE false 启用 Agent
AGENT_ARCH single 架构: single/multi
AGENT_ORCHESTRATOR_MODE standard 流水线级别
AGENT_MAX_STEPS 10 ReAct 最大步数
AGENT_SKILLS 激活的策略
AGENT_STRATEGY_DIR None 自定义策略目录
AGENT_RISK_OVERRIDE true 风控一票否决
AGENT_LITELLM_MODEL 继承主模型 Agent 专用模型
AGENT_ORCHESTRATOR_TIMEOUT_S 600 超时预算
AGENT_STRATEGY_AUTOWEIGHT true 回测自动加权
AGENT_STRATEGY_ROUTING auto 策略路由模式

注意事项

  • single 架构使用单个 ReAct Agent,适合简单场景
  • multi 架构使用编排器,Agent 间通过共享 context 传递信息
  • Risk Agent 的 veto 机制:当 AGENT_RISK_OVERRIDE=true 且风险评估为"高风险"时,直接跳到 Decision Agent 并标记为"观望"
  • YAML 策略文件支持热加载,修改后下次分析自动生效
  • AGENT_STRATEGY_DIR 可指定额外的策略目录,与内置 strategies/ 合并
  • Agent 专用模型(AGENT_LITELLM_MODEL)为空时继承 LITELLM_MODEL
  • Agent 工具并行执行使用 AGENT_TOOLS 池(默认 5),可用 STOCKLENS_AGENT_TOOLS_WORKERS 调节