多 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 |
导出 |
| 文件 | 职责 |
|---|---|
base_agent.py |
BaseAgent 抽象基类 |
technical_agent.py |
技术面分析 |
intel_agent.py |
情报搜索与分析 |
risk_agent.py |
风险评估(可一票否决) |
portfolio_agent.py |
组合分析 |
decision_agent.py |
最终决策 |
| 文件 | 职责 |
|---|---|
router.py |
StrategyRouter 策略路由(auto/manual) |
aggregator.py |
StrategyAggregator 加权聚合 |
strategy_agent.py |
StrategyAgent 单策略执行 Agent |
| 文件 | 职责 |
|---|---|
registry.py |
ToolRegistry 工具注册表 |
market_tools.py |
市场数据工具(行情/指数/宏观) |
data_tools.py |
数据查询工具(日线/周线/基本面) |
search_tools.py |
搜索工具(新闻/研报) |
analysis_tools.py |
分析工具(技术指标/评分) |
backtest_tools.py |
回测工具 |
YAML 策略文件加载器;strategies/ 顶级目录下的 YAML 由此加载。
多 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 → Decisionstandard: Technical → Intel → Decisionfull: Technical → Intel → Risk → Decisionstrategy: 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
- 当
context = {code, name, metadata}
│
├─ TechnicalAgent.run(context)
│ └─ 输出: 技术面分析结果 → 合并到 context
│
├─ IntelAgent.run(context)
│ └─ 输出: 情报搜索结果 → 合并到 context
│
├─ RiskAgent.run(context)
│ ├─ 输出: 风险评估结果 → 合并到 context
│ └─ 检查: 是否一票否决?
│
└─ DecisionAgent.run(context)
└─ 输出: 最终决策仪表盘
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查找工具 - 执行并返回结果字符串
- 从
所有 Agent 的抽象基类。
name: str— Agent 名称role: str— 角色描述system_prompt: str— 系统提示词available_tools: List[str]— 可用工具列表run(context: dict) -> dict— 执行分析
| 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 结果) | 最终决策仪表盘 |
工具注册表。
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— 执行工具
| 工具名 | 来源 | 说明 |
|---|---|---|
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 | 运行回测 |
策略路由器。
route(code: str, metadata: dict) -> List[str]— 根据市场环境选择策略auto模式: 基于行情特征(趋势/震荡/反转)自动选择manual模式: 使用AGENT_SKILLS配置的策略列表
多策略结果加权聚合。
aggregate(results: List[dict]) -> dict— 加权聚合多个策略结果- 权重来源: 回测历史表现(
AGENT_STRATEGY_AUTOWEIGHT=true时) - 否则等权重
- 权重来源: 回测历史表现(
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 |
name: strategy_id
display_name: 策略显示名
description: 策略描述
category: trend/reversal/pattern/framework/fundamental/statistical/event
required_tools:
- get_daily_history
- analyze_trend
instructions: |
策略执行指令(自然语言)...- 依赖:
config、tickbridge、search、services、storage、litellm - 被依赖:
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调节