No description
  • Python 75.7%
  • JavaScript 20.1%
  • CSS 4.1%
Find a file
2026-05-23 15:31:15 +08:00
.pytest_cache Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
backend Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
data Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
frontend Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
logs Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
prompts Initial competition submission 2026-05-07 18:03:16 +08:00
show Add S1W3 showcase assets and log placeholders 2026-05-23 15:27:10 +08:00
skills/frontend-design Submit competition project 2026-05-14 20:35:44 +08:00
tests Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
volumes Add complete project directory artifacts 2026-05-23 15:31:15 +08:00
.env.example Initial competition submission 2026-05-07 18:03:16 +08:00
.gitignore Add S1W3 showcase assets and log placeholders 2026-05-23 15:27:10 +08:00
docker-compose.yml Initial competition submission 2026-05-07 18:03:16 +08:00
environment.yml S1W3 v3 platform upgrade 2026-05-23 15:21:55 +08:00
pytest.ini Initial competition submission 2026-05-07 18:03:16 +08:00
README.md Add S1W3 showcase assets and log placeholders 2026-05-23 15:27:10 +08:00
requirements.txt S1W3 v3 platform upgrade 2026-05-23 15:21:55 +08:00
企业研报智能体项目说明.md Add S1W3 showcase assets and log placeholders 2026-05-23 15:27:10 +08:00

企业研报智能体

赛段S1W3
项目版本v3

企业研报智能体是一个面向企业年报、研报、财报和行业资料的智能分析系统。v3 版本在原有 PDF 知识库、RAG 问答和研报生成基础上完成了平台化升级引入用户认证与多用户隔离、LangChain / LangGraph 智能体编排、真正的 SSE 流式输出、异步文档入库任务、OCR、用户自定义模型配置、自定义报告模板、表格结构化抽取、财务指标入表和语义化企业能力评分。

系统仍保持核心链路:上传 PDF -> 解析 / OCR -> chunking -> embedding -> retriever -> agent 编排 -> Markdown 生成 -> PDF 导出

v3 更新摘要

  • 用户体系支持注册、登录、JWT 鉴权和按 user_id 隔离知识库、文档、对话、报告、评分、模型配置和报告模板。
  • 文档入库:上传 PDF 默认进入 SQLite 轻量任务队列后台异步完成解析、OCR、分块、embedding 和向量入库。
  • OCR集成 Tesseract支持扫描件 PDF 页面文本不足时自动 OCR默认语言为 chi_sim+eng
  • LangChain / LangGraph文档切分、embedding、retriever、LLM answer、web search tool、报告生成和评分流程统一接入 LangChain并由 LangGraph 编排。
  • 真流式输出:问答和报告生成新增 SSE 接口,前端使用 fetch + ReadableStream 增量渲染 Markdown。
  • 多轮对话:问答从单次 QA 升级为多会话消息流,加入历史摘要和 token 预算截断策略。
  • 用户模型配置:登录后可配置 OpenAI-compatible 模型填写模型名、API Key、Base URL 后即可用于问答、报告和评分。
  • 联网搜索web research 抽象为 provider registry默认 DuckDuckGo并预留 Bing / SerpAPI provider。
  • 报告模板:支持用户自定义章节结构,按模板生成 Markdown再转换为 PDF。
  • 语义化企业评分:评分 Agent 使用 LLM 结构化语义评估,结合知识库证据、财务指标和联网资料输出总分、维度分、置信度和原因。
  • 前端体验:使用项目目录 skills/frontend-design 的设计原则优化专业投研控制台,支持消息流、任务进度、模型配置、模板管理和评分可视化。

项目展示

展示素材位于仓库内 show/ 目录。

文件预览

文件预览

多轮问答

问答

报告生成

报告

企业评分

评分

自定义模型配置

支持自定义模型配置

自定义报告模板

自定义报告模板

当前功能

1. 用户与权限

  • 用户注册、登录、当前用户信息查询。
  • JWT 鉴权,前端自动携带 Authorization: Bearer <token>
  • 知识库、文档、对话、报告、评分、模型配置、报告模板按用户隔离。
  • 首个注册用户为 admin并接管升级前历史数据。
  • 非本人资源访问返回 404,避免泄露资源存在性。

2. 知识库与文档

  • 多知识库管理:新建、重命名、删除。
  • PDF 上传、替换、删除、批量删除和在线预览。
  • 上传后立即返回任务,后台异步索引。
  • 文档状态支持 queuedprocessingindexedfailed
  • 任务进度接口支持轮询和 SSE 事件。
  • PDF 预览和报告下载支持登录鉴权。

3. 文档解析、表格和财务指标

  • PyMuPDF 解析 PDF 文本、页码和表格。
  • 页面文本过少时自动调用 Tesseract OCR。
  • LangChain RecursiveCharacterTextSplitter 完成 chunking。
  • 表格作为 chunk_type="table" 的 Document 入库,参与问答、报告和评分检索。
  • document_tables 保存结构化表格。
  • financial_metrics 自动识别常见财务指标营业收入、净利润、归母净利润、毛利率、净利率、经营现金流、资产负债率、ROE、研发费用、研发费用率等。

4. RAG 问答

  • 支持按知识库问答,也支持限定单个文档问答。
  • 支持多会话、多轮对话和历史消息查看。
  • 使用 token 预算 + 最近消息 + 历史摘要控制上下文长度。
  • 新增 SSE 流式接口,前端实时渲染 Markdown。
  • 引用证据仅显示文档名、页码和章节,不展示证据原文,避免乱码和界面噪声。

5. 报告生成

  • 根据主题从知识库检索证据,并调用联网搜索补充公开资料。
  • 支持同步生成和 SSE 流式生成。
  • 支持用户自定义报告模板。
  • 报告正文先生成 Markdown再转换为 PDF。
  • 支持 Markdown 导出、PDF 下载和在线 PDF 预览。
  • 优化 Markdown 表格到 PDF 的排版稳定性。

6. 企业能力评分 Agent

评分维度总分 100 分:

  • 财务健康与盈利质量25
  • 成长性与业务韧性20
  • 行业地位与竞争壁垒20
  • 创新能力与研发投入15
  • 治理合规与风险控制10
  • 外部舆情与可持续发展10

v3 已将评分从“证据数量公式”升级为“LLM 结构化语义评估 + 规则兜底”:

  • 每个维度先检索候选证据,再由 LLM 判断相关性和质量。
  • 输入包含维度定义、rubric、内部证据、财务指标、联网资料和数据缺口。
  • 输出包含 scoreconfidencerationalekey_factsdata_gapsevidence_assessmentsmetric_assessmentsweb_assessments
  • 无模型或 mock 模式下使用 deterministic fallback并标记 scoring_method="rule_fallback"
  • 前端展示总分、评级、置信度、维度分数条、说明、数据缺口和来源定位。

7. 用户模型配置

登录后可在前端配置模型:

  • display_name:展示名称。
  • provider:当前优先支持 openai_compatible
  • base_url:例如 https://api.deepseek.com
  • model_name:例如 deepseek-v4-flashdeepseek-v4-pro 或其他兼容模型名。
  • api_key:写入数据库前加密,响应不回显明文。

问答、报告和评分请求可指定模型配置;未指定时使用用户 active model无用户配置时回退 .env 环境变量。

技术栈

  • 前端React、Vite、Ant Design
  • 后端FastAPI、SQLite、PyMuPDF、Tesseract OCR
  • 智能体框架LangChain、LangGraph
  • 向量库Milvus测试和离线演示可使用 Memory Vector Store
  • Embeddingsentence-transformers,默认 BAAI/bge-small-zh-v1.5;支持 hash fallback
  • LLMOpenAI-compatible Chat Model默认 DeepSeek 配置;支持 mock 模式
  • 联网搜索LangChain tool 封装 DuckDuckGo / DDGS预留 Bing / SerpAPI
  • 报告导出Markdown 原文导出Markdown 渲染为 PDF
  • 前端设计:项目内 skills/frontend-design,来源为 anthropics/skills

环境准备

推荐使用 conda 环境,不要把依赖安装到用户 site。

conda env create -f environment.yml
conda activate enterprise-report-agent

如果已经存在环境,可更新依赖:

conda env update -p "D:\Anaconda_envs\envs\enterprise-report-agent" -f environment.yml --prune

手动安装 Python 依赖时,使用明确解释器和 --no-user

$env:PYTHONNOUSERSITE="1"
& "D:\Anaconda_envs\envs\enterprise-report-agent\python.exe" -m pip install --no-user -r requirements.txt

前端依赖:

cd frontend
npm install

配置

复制 .env.example.env

Copy-Item .env.example .env

LLM

LLM_MODE=openai
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-v4-flash
DEEPSEEK_API_KEY=your-deepseek-key

也可以使用通用变量:

LLM_API_KEY=your-api-key

无 API Key 时系统会走 mock 路径,便于离线演示和测试。

Embedding

EMBEDDING_BACKEND=sentence_transformers
EMBEDDING_MODEL=BAAI/bge-small-zh-v1.5
EMBEDDING_ALLOW_HASH_FALLBACK=true
HASH_EMBEDDING_DIM=384

无法访问 HuggingFace 时可使用:

EMBEDDING_BACKEND=hash

OCR

v3 默认启用 Tesseract OCR

OCR_ENABLED=true
OCR_ENGINE=tesseract
OCR_LANG=chi_sim+eng
OCR_MIN_TEXT_CHARS=40

如果 Tesseract 没有在 PATH 中,可显式指定:

TESSERACT_CMD=D:\Anaconda_envs\envs\enterprise-report-agent\Library\bin\tesseract.exe

Web Research

WEB_RESEARCH_ENABLED=true
WEB_RESEARCH_PROVIDER=duckduckgo
WEB_RESEARCH_MAX_RESULTS=4
WEB_RESEARCH_TIMEOUT_SECONDS=6

可选:

BING_SEARCH_API_KEY=your-bing-key
SERPAPI_API_KEY=your-serpapi-key

Auth

AUTH_ENABLED=true
APP_SECRET=change-me-in-production
JWT_EXPIRE_MINUTES=10080

生产环境必须设置稳定的 APP_SECRET,否则 token 和 API Key 加密会受影响。

运行

必须在项目根目录运行后端,也就是包含 backendfrontendREADME.md 的目录。

启动 Milvus

docker compose up -d

启动后端:

python -m uvicorn backend.main:app --reload

如果当前 shell 的 PATH 不稳定,可直接使用 conda 环境解释器:

& "D:\Anaconda_envs\envs\enterprise-report-agent\python.exe" -m uvicorn backend.main:app --reload --host 127.0.0.1 --port 8000

启动前端:

cd frontend
npm run dev

默认访问:

如果 5173 被占用Vite 可能自动使用 5174请以终端输出为准。

主要 API

Auth

  • POST /api/auth/register
  • POST /api/auth/login
  • GET /api/auth/me

Knowledge Base / Document

  • GET /api/knowledge-bases
  • POST /api/knowledge-bases
  • PATCH /api/knowledge-bases/{id}
  • DELETE /api/knowledge-bases/{id}
  • GET /api/documents
  • GET /api/knowledge-bases/{id}/documents
  • POST /api/knowledge-bases/{id}/documents/upload
  • PUT /api/documents/{id}/replace
  • DELETE /api/documents/{id}
  • GET /api/documents/{id}/preview
  • GET /api/documents/{id}/tables
  • GET /api/knowledge-bases/{id}/financial-metrics

Tasks

  • GET /api/tasks
  • GET /api/tasks/{task_id}
  • GET /api/tasks/{task_id}/events

Chat

  • POST /api/chat/ask
  • POST /api/chat/ask/stream
  • GET /api/chat/conversations
  • POST /api/chat/conversations
  • GET /api/chat/conversations/{id}/messages
  • DELETE /api/chat/conversations/{id}

Reports

  • POST /api/reports/generate
  • POST /api/reports/generate/stream
  • GET /api/reports
  • GET /api/reports/{id}
  • DELETE /api/reports/{id}
  • GET /api/reports/{id}/export.md
  • GET /api/reports/{id}/export.pdf
  • GET /api/reports/{id}/preview.pdf

Scores

  • POST /api/scores/generate
  • GET /api/scores
  • GET /api/scores/{id}
  • DELETE /api/scores/{id}

User Model Configs / Report Templates

  • GET /api/model-configs
  • POST /api/model-configs
  • PATCH /api/model-configs/{id}
  • POST /api/model-configs/{id}/activate
  • DELETE /api/model-configs/{id}
  • GET /api/report-templates
  • POST /api/report-templates
  • PATCH /api/report-templates/{id}
  • DELETE /api/report-templates/{id}

测试

默认测试使用 hash embedding、内存向量库和 mock LLM不依赖真实模型 API。

pytest

运行 Milvus 集成测试前先启动 Milvus

docker compose up -d
$env:RUN_MILVUS_TESTS="1"
pytest tests/test_milvus_store.py

前端构建:

cd frontend
npm run build

常见问题

启动时报 No module named backend

请先进入项目根目录:

cd "D:\文件\技术学习\Enterprise Research Report Agent\enterprise-report-agent"
python -m uvicorn backend.main:app --reload

端口 8000 报权限或占用

检查占用:

netstat -ano | findstr :8000

也可以换端口:

python -m uvicorn backend.main:app --reload --host 127.0.0.1 --port 8001

OCR 找不到 Tesseract

确认 conda 环境里有 Tesseract

conda list -p "D:\Anaconda_envs\envs\enterprise-report-agent" tesseract

必要时显式配置:

TESSERACT_CMD=D:\Anaconda_envs\envs\enterprise-report-agent\Library\bin\tesseract.exe
OCR_LANG=chi_sim+eng

HuggingFace 模型下载慢

可临时切换为 hash embedding

EMBEDDING_BACKEND=hash

iframe 预览提示未登录

v3 已支持给 PDF 预览和报告导出链接附加登录 token。若仍出现该问题请重新登录并刷新前端。

v3 已知边界

  • OCR 已支持扫描件文本检索,但扫描件表格结构化抽取仍不保证高精度。
  • Web search 质量受搜索 provider 和网络环境影响,搜索失败时会自动降级为空引用。
  • Claude、GLM 等模型优先通过 OpenAI-compatible 网关接入;原生 provider 适配可继续扩展。
  • 任务队列为 SQLite in-process worker适合课程项目和单机演示生产场景可升级为 Redis / Celery。