Finance Agent 是一个基于大语言模型的金融数据分析智能代理系统,支持自动化财务报表分析、指标计算、股票对比和结构化数据输出。
- 🔍 智能实体识别 - 支持股票名称/简称/代码自动识别
- 📊 多维度财务分析 - ROE、毛利率、净利率、资产负债率等
- 🤖 智能路由 - 自动识别查询意图(指标/分析/对比)
- 📈 产品化输出 - 结构化格式,结论清晰
- 🔄 多数据源支持 - 支持数据库/API/文件多种数据源
finance-agent/
├── src/
│ ├── main.py # FastAPI 服务入口
│ ├── router.py # 智能路由器
│ ├── query_parser.py # 查询解析器
│ ├── entity_preprocessor.py # 实体识别前置处理器
│ ├── metric_engine.py # 指标查询引擎
│ ├── compare_engine.py # 股票对比引擎
│ ├── analysis_engine.py # 财务分析引擎
│ ├── rag_engine.py # RAG 检索引擎
│ ├── reranker.py # 重排序器
│ ├── query_rewriter.py # 查询改写器
│ └── entity_layer.py # 实体识别层
├── data/ # 数据文件目录
├── output/ # 测试结果输出
├── requirements.txt # Python 依赖
└── README.md # 项目文档
自动识别查询意图,分发给对应引擎处理:
- metric - 指标查询(如 "贵州茅台ROE")
- analysis - 财务分析(如 "茅台基本面怎么样")
- compare - 股票对比(如 "茅台和五粮液对比")
- semantic - 语义查询
三层识别机制:
- 字典匹配 - 精确匹配股票名称
- Fuzzy匹配 - 处理简称/缩写(如"茅台"→600519)
- 代码匹配 - 直接识别6位股票代码
| 引擎 | 功能 | 示例查询 |
|---|---|---|
| Metric Engine | 单指标查询 | 贵州茅台ROE |
| Compare Engine | 股票对比 | 茅台和五粮液对比 |
| Analysis Engine | 综合分析 | 茅台基本面怎么样 |
| RAG Engine | 文档检索 | 茅台最新新闻 |
问题:
- 只支持精确查询(必须输入股票代码)
- 无智能路由,查询意图识别差
- 输出格式混乱
实现:
- 基础 Query Parser
- 简单 Metric Engine
- 单数据源支持
优化点:
- ✅ 添加 Query Parser - 智能解析查询意图
- ✅ 添加 Router - 多引擎路由
- ✅ 添加 Compare Engine - 股票对比
- ✅ 添加 Analysis Engine - 综合分析
测试结果:
| 功能 | 测试数 | 通过率 |
|---|---|---|
| 指标查询 | 20 | 95% |
| 对比查询 | 10 | 80% |
| 分析查询 | 15 | 75% |
优化点:
- ✅ Step 7: Query Rewrite - 查询改写
- ✅ Step 8: Reranker - 文档重排序
- ✅ Step 9: Answer Generator - 产品化输出格式
新增功能:
- 模糊问题自动补指标("茅台怎么样"→补充ROE/净利润)
- 结构化输出格式
- 分析结论自动生成
优化点:
- ✅ 实体识别前置 - 所有查询统一走实体识别
- ✅ 三层识别机制 - 字典+Fuzzy+代码匹配
- ✅ 输出编码修复 - 替换特殊字符,避免GBK编码错误
测试内容: 单指标查询(ROE、毛利率、净利润等)
| 测试项 | 输入 | 预期输出 | 实际结果 | 状态 |
|---|---|---|---|---|
| ROE查询 | 贵州茅台ROE | ROE: 24.64% | ✅ 匹配 | 通过 |
| 毛利率查询 | 贵州茅台毛利率 | 毛利率: 91.29% | ✅ 匹配 | 通过 |
| 净利润查询 | 比亚迪净利润 | 净利润数值 | ✅ 匹配 | 通过 |
| 代码查询 | 600519ROE | ROE: 24.64% | ✅ 匹配 | 通过 |
通过率: 95% (19/20)
测试内容: 综合财务分析
| 测试项 | 输入 | 输出示例 | 状态 |
|---|---|---|---|
| 基本面分析 | 贵州茅台基本面怎么样 | 见下方示例 | ✅ 通过 |
| 简称识别 | 茅台咋样 | 正确识别600519 | ✅ 通过 |
| 模糊问题 | 比亚迪现在值得买吗 | 返回财务分析 | ✅ 通过 |
输出示例:
【公司】贵州茅台 (600519)
【ROE】24.64%
【毛利率】91.29%
【净利率】52.08%
【资产负债率】12.81%
【盈利能力】优秀
【财务风险】低
通过率: 90% (18/20)
测试内容: 股票对比分析
| 测试项 | 输入 | 输出示例 | 状态 |
|---|---|---|---|
| 两股对比 | 茅台和五粮液对比 | ROE/营收/净利润对比 | ✅ 通过 |
| 优劣标注 | - | 最优指标标记 * | ✅ 通过 |
输出示例:
## 股票对比
### ROE
- 000858: 15.37%
- 600519: 24.64% *
### 营收
- 000858: 15.70亿
- 600519: 102.26亿 *
通过率: 85% (17/20)
测试内容: V3.1 新增实体识别前置
| 测试项 | 输入 | V3.0结果 | V3.1结果 |
|---|---|---|---|
| 全称识别 | 贵州茅台最近怎么样 | ❌ 未识别代码 | ✅ 识别600519 |
| 简称识别 | 茅台咋样 | ❌ 未识别 | ✅ 识别600519 |
| 口语化 | 比亚迪值得买吗 | ❌ 未识别 | ✅ 识别002594 |
改进效果:
- V3.0 通过率: 40%
- V3.1 通过率: 90%
测试规模: 100条查询
| 查询类型 | 数量 | 通过数 | 通过率 |
|---|---|---|---|
| metric | 30 | 28 | 93% |
| analysis | 40 | 36 | 90% |
| compare | 20 | 17 | 85% |
| semantic | 10 | 8 | 80% |
| 总计 | 100 | 89 | 89% |
- Python 3.8+
- FastAPI
- 见 requirements.txt
# 克隆仓库
git clone https://github.com/hqzzdsda/finance-agent.git
cd finance-agent
# 安装依赖
pip install -r requirements.txt
# 启动服务
python src/main.py服务将在 http://localhost:8000 启动
{
"question": "贵州茅台ROE"
}响应示例:
{
"status": "success",
"query_type": "metric",
"answer": "【公司】茅台\n【指标】ROE:24.64%\n\n【分析】公司盈利能力较强,股东回报水平较高",
"data": {
"code": "600519",
"metric": "ROE",
"value": 24.64
}
}- 三层实体识别 - 字典+Fuzzy+代码,识别率90%+
- 智能路由 - 自动识别查询意图,分发给最优引擎
- 产品化输出 - 结构化格式+分析结论,用户友好
- 多引擎协作 - Metric/Compare/Analysis/RAG 四大引擎
- 查询改写 - 口语化问题自动转专业术语
- 重排序优化 - 多因子Reranker提升检索质量
编辑 config/config.yaml:
model: "gpt-4"
api_key: "your-api-key"
cache_enabled: true
data_sources:
- database
- api
- file- 模糊问题识别失败
- 简称/口语化表达无法识别
- 对比输出编码错误
- 增加港股/美股支持
- 添加实时股价查询
- 支持自定义指标组合
- 添加历史趋势分析
欢迎提交 Issue 和 Pull Request。
MIT License
- ✨ 新增实体识别前置处理器
- 🐛 修复对比输出编码错误
- 📝 完善README文档
- ✨ 产品化输出格式
- ✨ 查询改写和重排序
- 📊 完整测试覆盖
- ✨ 智能路由系统
- ✨ 多引擎支持
- 🔧 架构重构
- 🎉 初始版本发布
- 基础指标查询功能