- Python 72%
- JavaScript 25.8%
- CSS 2%
- HTML 0.2%
| backend | ||
| data | ||
| frontend | ||
| prompts | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| environment.yml | ||
| pytest.ini | ||
| README.md | ||
| requirements.txt | ||
| 企业研报智能体项目说明.md | ||
企业研报智能体
基于 React + FastAPI + SQLite + Milvus + LangGraph 的企业研报智能体原型。系统支持多知识库管理、PDF 文件生命周期、向量检索、联网调研、智能问答、自动报告生成、历史记录、在线预览和 Markdown / PDF 导出。
当前版本默认使用 DeepSeek 的 OpenAI-compatible 接口。没有 API Key 时会自动走 mock 路径,仍可完成上传、解析、检索、问答和报告生成演示。
当前功能
- 多知识库管理:新建、重命名、删除知识库。
- 文件管理:按知识库上传 PDF、替换文件、删除文件、批量删除、页面内 PDF 预览。
- 本地 RAG 检索:PDF 解析、文本切分、Embedding、Milvus / Memory 向量检索、证据页码与章节引用。
- 智能问答:按当前知识库检索,也支持限定到单个文件;右侧历史记录支持查看、单删、批量删除。
- 报告生成:按主题从当前知识库自动检索证据,生成投研模板 Markdown 报告。
- 报告预览与导出:页面内预览报告 PDF,支持下载 Markdown 和 PDF。
- 联网调研智能体:问答和报告生成时,LangGraph 会增加 Web Research 节点,用公开网页资料补充公司信息、新闻和行业背景。
- 专业控制台前端:左侧知识库,中间文档/问答/报告工作区,右侧历史记录栏。
工作流
问答与报告生成共用 LangGraph 编排:
validate_scope
-> retrieve_evidence
-> web_research
-> generate
-> persist_result
validate_scope:校验知识库或单文档范围。retrieve_evidence:从 Milvus / Memory 向量库检索 PDF 片段。web_research:联网搜索公司公开信息,失败时自动降级为空结果。generate:调用 DeepSeek 或 mock 生成回答 / 报告。persist_result:写入 SQLite,保留历史记录和证据引用。
内部知识库证据使用 [1]、[2] 引用;联网资料使用 [W1]、[W2] 引用。生成策略是内部文档证据优先,联网资料只作为补充背景。
技术栈
- 后端:FastAPI、SQLite、PyMuPDF、httpx、LangGraph
- 向量库:Milvus,测试和离线演示可用 Memory Vector Store
- Embedding:
sentence-transformers,默认模型BAAI/bge-small-zh-v1.5;网络不可达时可降级 hash embedding - LLM:DeepSeek OpenAI-compatible API,支持 mock 模式
- 前端:React、Vite、Ant Design
- 报告导出:Markdown 直接导出,PDF 由 Markdown 渲染生成
环境准备
推荐使用 conda,不要使用 pip install -r requirements.txt 作为主要安装方式,以免包安装到非当前 conda 环境。
conda env create -f environment.yml
conda activate enterprise-report-agent
如果需要手动安装依赖,请使用 conda:
conda install -c conda-forge fastapi uvicorn python-multipart python-dotenv pydantic pymupdf sentence-transformers pymilvus httpx numpy pytest pytest-cov langgraph
requirements.txt 仅作兼容和依赖查阅。
前端依赖:
cd frontend
npm install
如果项目路径包含空格,例如 Enterprise Research Report Agent,PowerShell 中进入目录时需要加引号:
cd "D:\文件\技术学习\Enterprise Research Report Agent\enterprise-report-agent"
配置
复制 .env.example 为 .env:
Copy-Item .env.example .env
DeepSeek 配置:
LLM_MODE=openai
LLM_BASE_URL=https://api.deepseek.com
DEEPSEEK_API_KEY=your-deepseek-key
LLM_MODEL=deepseek-v4-flash
也可以使用通用变量 LLM_API_KEY。当 DEEPSEEK_API_KEY 为空时,后端会读取 LLM_API_KEY。
Embedding 配置:
EMBEDDING_BACKEND=sentence_transformers
EMBEDDING_MODEL=BAAI/bge-small-zh-v1.5
EMBEDDING_ALLOW_HASH_FALLBACK=true
HASH_EMBEDDING_DIM=384
如果无法访问 HuggingFace,可以直接使用离线 hash embedding:
EMBEDDING_BACKEND=hash
联网调研配置:
WEB_RESEARCH_ENABLED=true
WEB_RESEARCH_PROVIDER=duckduckgo
WEB_RESEARCH_MAX_RESULTS=4
WEB_RESEARCH_TIMEOUT_SECONDS=6
mock 模式默认不联网,方便离线演示和测试。如需 mock 模式也验证联网节点:
WEB_RESEARCH_IN_MOCK=true
运行
启动 Milvus:
docker compose up -d
启动后端。推荐使用 python -m uvicorn,避免当前 PATH 找不到 uvicorn:
python -m uvicorn backend.main:app --reload
注意:必须在项目根目录运行,也就是包含 backend、frontend、README.md 的目录。如果不在项目根目录,会出现 ModuleNotFoundError: No module named 'backend'。
启动前端:
cd frontend
npm run dev
默认访问:
- 前端:http://127.0.0.1:5173
- 后端文档:http://127.0.0.1:8000/docs
- Milvus:127.0.0.1:19530
常见问题
PowerShell cd 路径报错
路径中有空格时需要加引号:
cd "D:\文件\技术学习\Enterprise Research Report Agent\enterprise-report-agent"
找不到 uvicorn
先确认已经激活项目 conda 环境:
conda activate enterprise-report-agent
python -m uvicorn backend.main:app --reload
也可以直接使用环境中的 Python:
& "D:\Anaconda_envs\envs\enterprise-report-agent\python.exe" -m uvicorn backend.main:app --reload
启动时报 No module named backend
请先进入项目根目录:
cd "D:\文件\技术学习\Enterprise Research Report Agent\enterprise-report-agent"
python -m uvicorn backend.main:app --reload
HuggingFace 模型下载超时
可改用 hash embedding:
EMBEDDING_BACKEND=hash
测试
默认测试使用 hash embedding、内存向量库和 mock LLM,不依赖 Milvus 或模型下载。
pytest
运行 Milvus 集成测试前需先启动 Milvus:
docker compose up -d
$env:RUN_MILVUS_TESTS="1"
pytest tests/test_milvus_store.py
当前限制
- PDF 预览为原始 PDF 预览,暂不提供 chunk 级可视化定位。
- 文件“编辑”当前主要是 PDF 替换,不包含复杂元数据编辑。
- 表格结构化抽取、财务指标自动入表、Hybrid Search、Reranker 仍属于后续增强方向。
- 联网调研依赖外部网络,搜索失败时会自动降级,不阻断主流程。