# finance_rag **Repository Path**: shentsing/finance_rag ## Basic Information - **Project Name**: finance_rag - **Description**: 金融分析rag - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FinanceRAG — A 股金融分析对话系统 基于 RAG(检索增强生成)技术的 A 股金融分析平台,融合多维数据源,通过流式对话为用户提供行业趋势与个股深度分析。 --- ## 功能概览 ### 对话分析(核心功能) 通过网页对话窗口(`/chat/`)与 AI 进行多轮对话,系统自动识别问题类型并路由至对应分析模式: | 模式 | 触发条件 | 分析内容 | |------|----------|----------| | **个股分析** | 问题含6位股票代码或具体股票名 | 估值评级(5档)/ 技术面(RSI·MACD·量比)/ 研报观点 / 交易策略建议 | | **行业分析** | 问题含行业词、板块词或宏观词 | 技术面综合判断 / 基本面估值分布 / 龙头/低PE/小市值三类候选股 / 未来预期 | | **兜底回复** | 超出金融分析范围 | 引导用户提问方向,附免责声明 | **路由策略(三层)**:规则匹配(0ms)→ LLM 轻量分类(~0.8s)→ 兜底回复 **流式输出**:基于 SSE(Server-Sent Events),逐 token 实时展示,避免长文本等待白屏。 --- ## 数据层 ### 7 个 Weaviate 向量数据库 Class | Class | 数据内容 | |-------|----------| | `IndustryNews` | A 股行业新闻(东方财富 + NewsAPI + RSS),含情绪标注 | | `StockFundamentals` | 个股基本面(市值·PE·PB·ROE·营收同比),数据源:Tushare Pro | | `StockTechnicals` | 技术指标快照(RSI·MACD·均线·量比·换手率),数据源:Tushare Pro | | `ResearchReport` | 东方财富研报(PDF 全文提取·元数据),数据源:AKShare | | `CompanyDocument` | 公司公告·财报·研报切片(按页/段落分块,含结构化元数据) | | `MacroIndicator` | 宏观指标(来自 Weaviate 实时检索,与时序缓存互补) | | `TradingStrategy` | 量化交易策略描述(回测收益·夏普比率·最大回撤) | ### 宏观时序缓存(Django Cache / Redis) | 数据源 | 指标 | |--------|------| | 美国 FRED | 联邦基金利率·CPI·GDP·失业率·10年期国债·PMI 等 | | 国内 Tushare | M2·CPI·PPI·PMI·社融·SHIBOR 等 | 以时序趋势格式(`2024-01 → 2024-02 → ...`)拼入 Prompt,让 LLM 判断方向变化。 --- ## 技术架构 ``` 用户浏览器 │ POST /api/v1/chat/stream/ │ ← SSE 流式响应 ▼ Django(DRF)+ ChatStreamView │ ├── 路由器(router.py) │ ├── 规则路由:股票代码正则 / 行业关键词词表 │ ├── LLM 路由:temperature=0 轻量分类 │ └── 兜底:FallbackSkill │ ├── IndustrySkill │ ├── 5路分类检索(新闻/研报/宏观/基本面/技术面) │ ├── 自动提炼龙头/低PE/小市值三类候选股 │ └── 结构化 Prompt → 流式 LLM → SSE │ └── StockSkill ├── search_stock_context()(聚合 4 类数据 + 宏观) ├── 结构化提取基本指标 + 技术指标 └── 结构化 Prompt → 流式 LLM → SSE 向量检索:Weaviate(混合检索 BM25 + 向量,可调 alpha) 重排序: Cohere Rerank / CrossEncoder 本地 LLM: DeepSeek / OpenAI / 通义千问(.env ACTIVE_SCHEME 一键切换) Embedding:BAAI/BGE 本地 / OpenAI text-embedding(同上切换) ``` --- ## 定时数据采集(Celery Beat) | 任务 | 调度 | 说明 | |------|------|------| | `fetch_cn_stock_news` | 每天 18:30 | 东方财富个股新闻,写入 `IndustryNews` | | `update_fundamentals_akshare` | 工作日 16:00 | Tushare 基本面,写入 Weaviate + Django DB | | `update_technicals` | 工作日 17:00 | Tushare 技术指标,写入 Weaviate + Django DB(自动淘汰30天前旧快照) | | `update_macro_all` | 每月 1、15 日 2:00 | FRED + 国内宏观,写入 Redis 时序缓存 | | `fetch_research_reports` | 每周五 17:00 | 东方财富研报(PDF 文本提取),写入 `CompanyDocument` + Django DB | 所有调度参数均可在 **Django Admin → Periodic Tasks** 中运行时动态修改,无需重启 Worker。 --- ## 检索与推理流程 ``` 用户提问 ↓ 查询路由(规则 + LLM) ↓ 多路分类检索(Weaviate 混合检索) ↓ Cohere/CrossEncoder 重排序 ↓ 上下文拼装(按 Class 格式化:基本面/技术面/研报/新闻/宏观分块组装) ↓ 结构化 Prompt 填充(变量化插槽:龙头股列表/技术指标/研报切片...) ↓ LLM 流式推理 → SSE 逐 token 输出 ``` **个股分析输出结构**(Prompt 约束): 1. 估值评级(极度低估 💎 / 低估 🟢 / 合理 🟡 / 高估 🟠 / 极度高估 🔴) 2. 技术面分析(RSI 区间·MACD 信号·量价关系) 3. 基本面与研报观点 4. 交易策略建议(含5类策略适用性判断表) **行业分析输出结构**(Prompt 约束): 1. 技术面分析(龙头股 RSI/MACD 综合·资金活跃度) 2. 基本面分析(PE 分布·竞争格局) 3. 未来预期(催化剂·风险·中期展望) 4. 个股推荐(龙头配置 💎 / 动量追强 🚀 / 价值低估 💰 / 小市值弹性 🌱 / 创新业务 🔬) --- ## LLM 调用监控 每次 Skill 调用均通过 `llm_monitor` 上下文管理器自动记录以下指标: ``` [LLM-MONITOR] skill=stock | input_tokens≈820 | output_tokens≈340 | ttft=0.83s | total=18.2s | tps=18.7 [Router] 方式=rule | 结果=stock | 耗时=0.003s [IndustrySkill] Prompt 组装完成 | leader=8 fundamental_docs | reports=4 | news=6 | macro=5 | estimated_input_tokens≈760 ``` | 指标 | 说明 | |------|------| | `input_tokens≈` | Prompt 长度估算(`len(text) // 3`) | | `output_tokens≈` | 实际输出字符数估算 | | `ttft` | Time To First Token(首 token 延迟) | | `total` | 全程生成时间 | | `tps` | 输出 token 速率 | --- ## 前端对话页面 访问 `http://localhost:8000/chat/` - **流式渲染**:`fetch` + `ReadableStream` 接收 SSE,逐 token 追加显示 - **技能标识**:首帧 SSE 返回路由结果,页面侧边栏实时显示当前分析模式(个股/行业) - **多轮对话**:前端维护 `history` 数组,携带最近 10 轮上下文 - **新建对话**:清空历史 + 生成新 `session_id`,开启全新会话 - **停止生成**:`reader.cancel()` 中断 SSE 流,无需等待全量输出 - **快捷提问**:首页内置6个示例问题芯片,点击直接发送 --- ## 主要配置项(`.env`) | 变量 | 说明 | |------|------| | `ACTIVE_SCHEME` | LLM + Embedding 方案(`deepseek` / `openai` / `qwen` 等) | | `WEAVIATE_URL` | Weaviate 服务地址 | | `TUSHARE_TOKEN` | Tushare Pro Token(基本面·技术面·宏观) | | `FRED_API_KEY` | FRED API Key(美国宏观数据) | | `OPENAI_API_KEY` / `DEEPSEEK_API_KEY` | LLM 及 Embedding API Key | | `REDIS_URL` | Redis 连接(Celery Broker + 宏观时序缓存) | 多 Provider 方案在 [`stock_rag/provider_config.py`](stock_rag/provider_config.py) 中集中管理,修改 `ACTIVE_SCHEME` 即可一键切换,无需改代码。 --- > ⚠️ **免责声明**:本系统所有分析内容均由 AI 自动生成,仅供研究参考,不构成投资建议。投资有风险,入市需谨慎。