- Python 72.3%
- JavaScript 21.9%
- CSS 5.7%
- HTML 0.1%
| backend | ||
| data | ||
| frontend | ||
| prompts | ||
| skills/frontend-design | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| environment.yml | ||
| pytest.ini | ||
| README.md | ||
| requirements.txt | ||
| 企业研报智能体项目说明.md | ||
企业研报智能体 V2.0
基于 React + FastAPI + SQLite + Milvus + LangChain + LangGraph 的企业研报智能体原型。系统支持多知识库管理、PDF 文件生命周期、向量检索、联网调研、多轮问答、自动报告生成、表格结构化抽取、财务指标入表、企业能力评分、在线预览和 Markdown / PDF 导出。
当前版本默认使用 DeepSeek 的 OpenAI-compatible 接口。没有 API Key 时会自动走 mock 路径,仍可完成上传、解析、检索、问答和报告生成演示。
当前功能
- 多知识库管理:新建、重命名、删除知识库。
- 文件管理:按知识库上传 PDF、替换文件、删除文件、批量删除、页面内 PDF 预览。
- 本地 RAG 检索:PDF 解析、LangChain 文本切分、Embedding、Milvus / Memory 向量检索、证据页码与章节引用。
- 智能问答:按当前知识库检索,也支持限定到单个文件;使用多会话消息流支持上下文追问。
- 报告生成:按主题从当前知识库自动检索证据,生成更丰富的投研长报告 Markdown。
- 表格与指标:上传 PDF 时抽取表格,并自动识别营业收入、净利润、毛利率等常用财务指标。
- 企业能力评分:LangGraph 评分 Agent 综合知识库证据、结构化财务指标和联网搜索资料,输出总分、维度分、说明和证据。
- 报告预览与导出:页面内预览报告 PDF,支持下载 Markdown 和 PDF。
- 联网调研智能体:问答、报告和评分时,LangGraph 会通过 LangChain tool 调用 DuckDuckGo / DDGS 搜索,补充公司公开信息、新闻和行业背景。
- 专业控制台前端:左侧知识库,中间文档/问答/报告工作区,右侧历史记录栏。
工作流
问答、报告和评分均由 LangGraph 编排。问答与报告主链路:
validate_scope
-> retrieve_evidence
-> web_research
-> generate
-> persist_result
validate_scope:校验知识库或单文档范围。retrieve_evidence:通过 LangChain Embeddings / retriever 从 Milvus / Memory 向量库检索 PDF 与表格片段。web_research:通过 LangChain tool 联网搜索公司公开信息,失败时自动降级为空结果。generate:调用 DeepSeek 或 mock 生成回答 / 报告。persist_result:写入 SQLite,保留历史记录和证据引用。
内部知识库证据使用 [1]、[2] 引用;联网资料使用 [W1]、[W2] 引用。生成策略是内部文档证据优先,联网资料只作为补充背景。
技术栈
- 后端:FastAPI、SQLite、PyMuPDF、LangChain、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 渲染生成
- 前端设计 Skill:项目内
skills/frontend-design来自anthropics/skills
环境准备
推荐使用 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
python -m pip install --no-user langchain langchain-openai langchain-community langchain-text-splitters langchain-huggingface langchain-milvus langgraph-checkpoint-sqlite ddgs
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 "...\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