知识
← 返回

基于DSA的专家团队整体改造方案

2026-05-15 金融
#金融 #股票研究

基于 daily-stock-analysis 的专家团队整体改造方案

文档类型: 架构设计方案
创建时间: 2026-05-15
目标: 回答三个核心问题:DSA 是否就是 hunter?长线能否覆盖?可控性如何保证?


一、核心结论(先给答案)

daily-stock-analysis(以下简称 DSA)不是 hunter 本身,但它是 hunter 的”大脑+武器库”。

不能直接把 DSA 搬到专家团队里当 hunter,因为它缺少多用户隔离、对话历史管理、Matrix 推送等基础设施。但 DSA 的 agent 体系 + 策略系统 + 数据源,正是 hunter 做短线推荐最缺的分析引擎。

最佳方案是”嫁接”:financial-team 作为交互管理层(负责路由、记忆、隔离、推送),DSA 作为分析引擎层(负责数据源、策略、决策仪表盘)。

这样做,模型、提示词、记忆、持仓数据全部在 financial-team 框架下可控。


二、DSA 深度调研结果

2.1 DSA 的 Agent 体系 — 它本身就是一个”多专家协作系统”

DSA 的 src/agent/agents/ 目录下有 6 个专用 agent:

  • technical_agent:技术面分析(K线、均线、MACD、RSI 等)
  • intel_agent:情报分析(新闻、公告、舆情、社交情绪)
  • risk_agent:风险评估(波动率、集中度、下行风险)
  • portfolio_agent:持仓分析(成本、盈亏、仓位占比、行业重叠)
  • decision_agent:决策合成(汇总所有 agent 意见,输出决策仪表盘)
  • strategy_agent:策略执行(按选定的 YAML 策略文件执行分析)

这和 financial-team 的 research/strategy/risk 三角色结构高度相似,但 DSA 的粒度更细、协作更紧密。decision_agent 作为”总指挥”,把 technical + intel + risk + portfolio + strategy 的意见合成一份决策仪表盘。

但这套体系是单用户设计的:orchestrator.py 明确注释”Conversation history is managed externally by the caller”。DSA 没有 caller 隔离概念,没有多租户,所有用户共享同一个 SQLite 数据库和同一个配置。如果直接把 DSA 搬到 financial-team 里,junjun 和 ywz 的数据会混在一起。

2.2 DSA 的策略系统 — 短线、中线、长线全覆盖

DSA 内置 11 种策略(YAML 文件,自然语言描述,无需写代码):

长线策略:

  • 底部放量 — 检测长期下跌后底部放量信号,潜在趋势反转
  • 波浪理论 — 基于艾略特波浪理论判断大周期浪型与目标价

中线策略:

  • 多头趋势 — 识别多头排列、趋势延续与回踩低吸
  • 均线金叉 — 检测均线金叉配合量能确认
  • 箱体震荡 — 识别价格箱体区间,箱底买入、箱顶减仓
  • 缠论 — 基于笔、线段、中枢结构判断趋势级别与买卖点
  • 缩量回踩 — 检测缩量回踩均线支撑,趋势延续入场点
  • 放量突破 — 检测放量突破阻力位

短线策略:

  • 龙头策略 — 板块轮动中识别龙头股
  • 情绪周期 — 识别情绪低点(恐慌底)与情绪高点(狂热顶),逆情绪布局
  • 一阳夹三阴 — 检测K线整理形态,趋势延续入场信号

market_regimes 覆盖:trending_up(上涨)、trending_down(下跌)、sideways(横盘)、volatile(震荡)、sector_hot(热点轮动)。

结论:DSA 策略系统覆盖全周期,短线只是它的一个子集。它的强项不是”只做短线”,而是”按市场状态自动匹配最适合的策略”。

2.3 DSA 的可控性评估

LLM API — 完全可控

DSA 支持 15+ 种 LLM 渠道:

  • 国内:DeepSeek、Moonshot/Kimi、通义千问 DashScope、智谱 GLM、MiniMax、火山方舟、硅基流动
  • 国际:OpenAI、Anthropic Claude、Gemini
  • 聚合平台:Anspire、AIHubMix、OpenRouter
  • 本地:Ollama(无需 API Key)

每个渠道独立配置 base_url / api_key / models,支持多 Key 轮询与自动 fallback。可以配置自定义代理端点,也可以完全离线用 Ollama。

结论:完全可以接你自己的 API,而且比 financial-team 当前只支持 DeepSeek 灵活得多。

提示词 — 策略层完全可控,底层需要改代码

  • 策略提示词:完全可控。YAML 文件用自然语言写,放在 strategies/ 目录下,系统启动自动加载。你可以新增、修改、删除策略,无需改任何代码。
  • Agent 底层提示词:在代码里。比如 decision_agent.py 的 system_prompt() 方法直接返回 prompt 字符串,要改需要改代码。
  • 报告模板:Jinja2 模板,在 templates/ 目录下,可自定义。

结论:策略层面的提示词完全开放,但 agent 底层的行为逻辑(system prompt、post_process)需要改代码才能调。

记忆 — 有分析历史,无长期对话记忆

DSA 的记忆系统分两层:

  • AgentMemory:基于 SQLite 数据库,存储历史分析结果、预测准确率、技能胜率。有校准系统,根据历史准确率自动调整 agent 置信度。需要 AGENT_MEMORY_ENABLED=true 开启。
  • ConversationManager:有 session 级别对话历史(session_id 隔离),但 orchestrator 明确说”对话历史由 caller 外部管理”。DSA 没有跨 session 的长期对话记忆,也没有按用户隔离的对话历史。

结论:DSA 的分析历史记忆很强(可以追踪预测准确率并自我校准),但对话上下文记忆很弱(没有 financial-team 的 conversation_history.jsonl 那种跨 session 长期记忆)。

持仓数据 — 功能完整,但格式固定

DSA 的 portfolio 系统非常专业:

  • portfolio_service.py + portfolio_repo.py + SQLite 数据库
  • 支持完整的交易记录:买入/卖出、成本计算(FIFO/avg)、分红、拆股
  • 支持多账户、多市场(A股/港股/美股)
  • 有 portfolio_agent 专门处理持仓相关分析
  • 支持行业集中度、仓位上限等风险检查

但格式是固定的 SQLAlchemy ORM 模型,不像 financial-team 的 JSON 文件那样灵活可改。

交易日历 — 已经有,而且比我们计划自己写的更好

DSA 有 src/core/trading_calendar.py​,基于 exchange-calendars 库,支持:

  • A股(XSHG)、港股(XHKG)、美股(XNYS)的交易日判断
  • 按时区取”今日”日期(避免服务器 UTC 导致日期错误)
  • per-stock 过滤:只分析当日开市市场的股票

结论:我们计划自己写的交易日历工具,DSA 已经有了。直接调用它的接口即可。


三、为什么不能直接把 DSA 搬到专家团队里

三个不可调和的差距:

差距1:多用户隔离

financial-team 通过 FT_CALLER​ + shared/users/<caller>/ 物理隔离,junjun 和 ywz 的数据完全分开。DSA 没有 caller 概念,所有用户共享同一个数据库和配置。如果直接搬过来,junjun 的持仓会覆盖 ywz 的持仓。

差距2:对话历史管理

financial-team 有 conversation_history.jsonl​(最近10轮)和 investment_memory.json(长期投资画像),可以按用户注入专家 prompt。DSA 的 conversation_manager 是 session 级别的,没有跨 session 记忆,也没有按用户隔离。

差距3:推送渠道

financial-team 通过 Matrix 直接推送给用户。DSA 支持企业微信、飞书、TG、Discord、Slack、邮件,但不支持 Matrix。


四、改造方案:嫁接架构

不是”搬”,是”嫁接”。financial-team 做外壳,DSA 做引擎。

4.1 架构图

用户消息 (junjun/ywz)
    
    
[OpenClaw] 意图识别
    
    
[financial-team router] —— 按关键词路由到 hunter
                              caller 隔离时间感知对话历史注入
    
[hunter expert_runner] —— 加载 hunter.md prompt + 用户记忆
    
    ├─── 通用工具调用get_stock_spotread_portfolio 
    
    └─── DSA 分析引擎调用新增工具
              
              ├─── 单股深度分析  POST /api/v1/analysis/single
                                 返回决策仪表盘 JSON
              
              ├─── Agent 策略问答  POST /api/v1/agent/chat
                                 返回多轮策略分析结果
              
              ├─── 板块排名  GET /api/v1/market/sector-rankings
                            返回领涨/领跌板块
              
              └─── 交易日历  调用 trading_calendar.py
                              返回是否交易日前一个/后一个交易日
    
    
[hunter LLM] ——  DeepSeek 做最终解读
                  结合 DSA 数据 + 用户持仓 + 对话历史 + 时间感知
    
[Matrix 推送] —— 发给用户

4.2 为什么这样能保证可控性

LLM 模型可控:hunter 用自己的 DeepSeek API,DSA 只作为数据层,不消耗 LLM token(或只在需要时调用)。

提示词可控:hunter.md 完全自己写。DSA 提供结构化数据输入,最终推荐的措辞、风格、格式由 hunter prompt 控制。

记忆可控:financial-team 的记忆系统继续用。conversation_history.jsonl + investment_memory.json,按 caller 隔离。

持仓数据可控:portfolio.json 定期同步到 DSA。financial-team 保持自己的 JSON 格式不变。

时间感知可控:调用 DSA trading_calendar。已验证有交易日历模块,比自己写更准。

数据隔离可控:caller 隔离在 financial-team 层保证。DSA 不知道 caller,financial-team 为每个 caller 维护独立的调用上下文。

4.3 具体实施步骤

Step 1:启动 DSA FastAPI 服务

DSA 已经有 server.py(FastAPI 入口),端口 8000。启动命令:

cd /opt/vendor/daily-stock-analysis
source .venv/bin/activate
python server.py
# 或
uvicorn server:app --host 0.0.0.0 --port 8000 --reload

配置 .env

  • 至少配一个 LLM 渠道(DeepSeek 或 Gemini 免费额度)
  • 不需要配置任何通知渠道(推送由 financial-team 负责)
  • 数据源用免费版即可(akshare + efinance + baostock)

Step 2:在 financial-team 新增 DSA 调用工具

新增 tools/dsa_client.py

import requests

DSA_BASE_URL = "http://localhost:8000"

def dsa_analyze_stock(code: str, skills: list = None) -> dict:
    """调用 DSA 单股深度分析,返回决策仪表盘 JSON。"""
    ...

def dsa_agent_chat(message: str, session_id: str, skills: list = None) -> dict:
    """调用 DSA Agent 策略问答,返回多轮分析结果。"""
    ...

def dsa_sector_rankings(market: str = "cn") -> dict:
    """调用 DSA 板块排名。"""
    ...

def dsa_is_trading_day(date_str: str, market: str = "cn") -> dict:
    """调用 DSA 交易日历。"""
    ...

Step 3:改造 hunter.md prompt

在 hunter.md 的工具说明中增加 DSA 工具:

## 工具使用策略

| 场景 | 工具组合 | 说明 |
|------|---------|------|
| 单股深度分析 | dsa_analyze_stock | 获取决策仪表盘(评分、买卖点位、风险警报) |
| 策略问答 | dsa_agent_chat | 用缠论/龙头/波浪等策略做深入分析 |
| 板块热点 | dsa_sector_rankings | 获取当前领涨/领跌板块 |
| 时间校验 | dsa_is_trading_day | 校验目标日期是否为交易日 |

Step 4:portfolio 数据同步

写一个小脚本 scripts/sync_portfolio_to_dsa.py​,定期把 financial-team 的 shared/users/<caller>/portfolio.json 同步到 DSA 的 portfolio DB:

# 读取 financial-team portfolio.json
# 调用 DSA API POST /api/v1/portfolio/trades 写入交易记录
# 支持 junjun 和 ywz 两个账户

Step 5:测试验证

用 junjun 的测试消息跑一轮:

  • “明天有什么票可以追?” → hunter 路由 → 调用 dsa_sector_rankings 获取热点板块 → 调用 dsa_analyze_stock 深度分析龙头股 → hunter 做最终推荐
  • “中远海控下周能不能涨?” → hunter 路由 → 调用 dsa_analyze_stock + dsa_agent_chat(用波浪理论或缠论分析) → hunter 综合输出

4.4 和现有方案的对比

纯 financial-team 方案(原施工方案)

  • 数据源:新浪+腾讯+akshare(5个工具)
  • 策略系统:无(纯 prompt 驱动)
  • 板块资金流:需自己写 akshare 封装
  • 龙虎榜:需自己写 akshare 封装
  • 决策仪表盘:无
  • 回测验证:无
  • 实现工作量:大(需写大量 akshare 封装)
  • 可控性:高(全部自己写)
  • 维护成本:高(每个数据源自己维护)

嫁接 DSA 方案(本方案)

  • 数据源:10+数据源 + 自动 fallback
  • 策略系统:11种内置策略 + 可自定义
  • 板块资金流:DSA 已有 efinance/akshare 板块排名
  • 龙虎榜:DSA 暂未直接支持,但数据源更丰富
  • 决策仪表盘:有(评分、买卖点位、风险警报、操作清单)
  • 回测验证:有(可对历史分析做事后验证)
  • 实现工作量:中(主要是 API 调用封装)
  • 可控性:高(策略层开放,底层可调)
  • 维护成本:低(DSA 社区维护)

五、风险提示

风险1:DSA 的 LLM 依赖

DSA 的决策仪表盘、评分、买卖点位推荐依赖 LLM API。如果 LLM 服务中断,DSA 只能输出原始数据,无法做”智能分析”。但 financial-team 自己的 LLM(DeepSeek)不受影响,hunter 可以用原始数据自己做分析。

缓解措施:配置多渠道 fallback(DeepSeek + Gemini 免费额度)。

风险2:DSA 版本更新可能破坏 API

DSA 是开源项目,API 可能在版本更新时变化。

缓解措施:锁定 DSA 版本(不自动更新),financial-team 的 dsa_client.py 做 API 响应校验,异常时 fallback 到自有工具链。

风险3:单点故障

DSA FastAPI 服务如果挂了,hunter 的分析能力会降级。

缓解措施:dsa_client.py 每个调用加 try/except,DSA 异常时 fallback 到 financial-team 原有工具链(get_stock_spot + get_stock_history + calculate_technical)。


六、下一步行动建议

P0(本周)

  1. 启动 DSA FastAPI 服务,验证 API 可用
  2. tools/dsa_client.py,封装4个核心调用接口
  3. dsa_is_trading_day 替换原计划自己写的交易日历工具

P1(下周)
4. 改造 hunter.md,增加 DSA 工具使用策略
5. 写 scripts/sync_portfolio_to_dsa.py,实现持仓数据同步
6. 用 junjun 的测试消息跑一轮端到端验证

P2(下下周)
7. 根据测试结果微调 hunter prompt 和 DSA skill 选择
8. 观察 1-2 周推荐命中率和用户满意度
9. 如果效果好,考虑让 strategy 专家也接入 DSA(中线/长线策略)


七、附录:DSA 关键文件速查

文件 作用
/opt/vendor/daily-stock-analysis/server.py FastAPI 服务入口
/opt/vendor/daily-stock-analysis/analyzer_service.py 分析服务封装(可直接 import 调用)
/opt/vendor/daily-stock-analysis/src/agent/factory.py AgentExecutor 工厂
/opt/vendor/daily-stock-analysis/src/core/trading_calendar.py 交易日历
/opt/vendor/daily-stock-analysis/strategies/*.yaml 策略文件(可自定义)
/opt/vendor/daily-stock-analysis/src/agent/agents/*.py 6个专用 agent
/opt/vendor/daily-stock-analysis/api/v1/endpoints/agent.py Agent API 路由
/opt/vendor/daily-stock-analysis/api/v1/endpoints/analysis.py 分析 API 路由