Skip to content

xingfenyizhen/TodayAI

Repository files navigation

Today AI 企业知识问答与质检中台

一个面向企业知识库和金融财报场景的多工具 Agent + RAG 项目。当前仓库已经落地了前台智能问答、后台知识资产治理、坏案例回收、AI 自动巡检与黄金问答沉淀等能力。

项目概览

Today AI 的目标不是只做一个聊天机器人,而是做一套可运营、可追溯、可持续修复的企业知识问答系统。

当前项目包含两条主线:

  1. 前台问答链 基于 LangGraph 把企业知识库、实时行情、联网搜索和金融 SQL 查询统一成一个多工具问答入口。
  2. 后台治理链 提供文档上传、异步切片、人工审核、发布入库、坏案例回收、AI 自动巡检、人工修复和 BI 看板。

当前已实现的核心功能

1. 多工具 Agent 问答

前台主接口是 POST /api/v1/chat,当前支持 4 类工具能力:

  1. enterprise_kb 企业知识库与上传 PDF 检索
  2. finance_market 实时行情查询
  3. web_search 联网搜索公开新闻、政策、公告
  4. finance_sql 结构化金融指标查询与对比

系统会先根据当前知识库启用的插件,再根据问题意图进行预路由,最后由 LangGraph 驱动模型执行工具调用。

适合的问题类型包括:

  1. 企业制度、FAQ、历史报告、上传 PDF 的静态知识问答
  2. 最新股价、实时行情
  3. 最新新闻、最近公告、外部动态
  4. 同比、环比、对比、平均、聚合等结构化金融问题

2. 纯知识库问答

项目保留了 POST /api/v1/kb_chat 这条纯知识库链路,用于:

  1. 后台 Ground Truth 抽证据
  2. 自动巡检判案
  3. 需要绕开 LangGraph 多工具编排的场景

3. 临时 PDF 会话检索

前台支持通过 POST /api/v1/upload_temp 上传临时 PDF。

上传后的文档只绑定当前 session_id,不会直接进入正式知识库,适合临时问答和快速验证。

4. RAG 检索与混合重排

知识库检索不是简单向量搜索,而是:

  1. 向量召回
  2. 词法召回
  3. 混合重排

当前实现基于 LlamaIndex + Chroma + 自定义 RAG 逻辑,并针对中文财报指标问答做了业务增强,包括:

  1. 中文 query token 化
  2. BM25 风格词法打分
  3. RRF 融合
  4. 财报表格和指标字段 boost
  5. 财务噪声 penalty

5. 可解释问答结果

前台回答不是只有一段文本,还会返回:

  1. sources 展示 KB 证据、网页来源、行情来源或 SQL 来源
  2. tool_trace 展示当前问题调用了哪个工具、输入摘要和工具结果摘要

这使系统具备基础的可解释性和排障能力。

6. 知识资产上传、切片审核、发布入库

后台支持完整的文档治理流程:

  1. 上传文档
  2. 异步解析和切片
  3. 查看 chunk 列表
  4. 手工修改 chunk
  5. 废弃错误 chunk
  6. 审核通过后发布入库

发布后,文档的有效 chunk 会同步进入向量库。

7. 多知识库、多租户与插件绑定

后台支持:

  1. 创建租户
  2. 创建知识库
  3. 绑定知识库所属租户
  4. 配置知识库启用的插件
  5. 基础访问控制和角色校验

8. 连接器管理

后台支持基础连接器能力:

  1. 创建连接器
  2. 查看连接器列表
  3. 手动触发同步

当前连接器主要面向本地目录和单文件导入场景。

9. 坏案例回收与 RLHF 反馈闭环

前台支持点赞/点踩,点踩会将坏案例写入 bad_cases_staging.json,同时支持撤销点踩和去重幂等。

后台支持:

  1. 查看 bad cases
  2. 人工修复
  3. 忽略误报
  4. AI 一键自动巡检

10. AI 自动巡检与黄金问答沉淀

后台提供 POST /admin/api/bad_cases/auto_heal,用于对 bad case 做自动巡检和尝试修复。

当前逻辑会尽量先做 Ground Truth 抽取,再结合工具类型和问题性质分流:

  1. 静态知识缺失 尝试自动修复
  2. 动态问题 归档,不强行修知识库
  3. 无把握案例 转人工审核

修复成功的结果会写入 golden_qa,形成高质量纠偏样本池。

11. BI 埋点与运营看板

前台会记录搜索行为,包括:

  1. query
  2. session_id
  3. latency
  4. kb_id
  5. tenant_id

后台可查看:

  1. 搜索总量
  2. 平均延迟
  3. 搜索日志明细

技术架构

前端

  1. app_frontend_network.py 用户问答界面,默认运行在 7860
  2. admin_frontend.py 后台管理界面,默认运行在 7861

后端

  1. app_backend.py 前台问答与纯 KB API,运行在 8000
  2. admin_backend.py 后台治理、上传、反馈、自动巡检与 BI API,运行在 8001

编排层

  1. core/graph.py 基于 LangGraph 的请求级 Agent 编排
  2. core/agent_tools.py 请求级工具封装、sources 汇总和 tool_trace 记录

知识库层

  1. core/chat_service.py 纯 KB 问答服务
  2. tools/rag_tool.py RAG 检索、混合重排、证据封装
  3. core/document_pipeline.py 文档读取、切片、chunk payload 构造

存储层

  1. knowledge_draft.db 主业务 SQLite,存文档、chunk、知识库、租户、bad case、golden_qa、search logs、connectors
  2. finance_data.db 金融 SQL 示例库,当前用于结构化财务问题
  3. chroma_db/ Chroma 本地向量库

SQLite 与 Chroma 的分工

在当前项目里,SQLite 和 Chroma 是分层协作关系:

  1. SQLite 负责业务真相 存文档、chunk、发布状态、租户、反馈、golden_qa 和结构化金融指标
  2. Chroma 负责语义检索 存 chunk 向量、文本和 metadata,用于向量召回

查询时:

  1. SQLite 提供精确状态和词法候选
  2. Chroma 提供向量候选
  3. 最后在 RAG 层做融合和重排

简单说:

  1. SQLite 解决“系统里到底有什么”
  2. Chroma 解决“语义上最像什么”

目录结构

.
├── app_backend.py              # 前台 API
├── admin_backend.py            # 后台 API
├── app_frontend_network.py     # 前台 Gradio
├── admin_frontend.py           # 后台 Gradio
├── core/
│   ├── graph.py                # LangGraph 编排
│   ├── agent_tools.py          # 请求级工具封装
│   ├── chat_service.py         # 纯 KB 服务
│   ├── chat_models.py          # 请求/响应模型
│   ├── document_pipeline.py    # 文档解析和切片
│   ├── db_schema.py            # 主业务库表结构
│   ├── plugin_registry.py      # 插件注册与绑定
│   └── ...
├── tools/
│   ├── rag_tool.py             # RAG 检索
│   ├── price_tool.py           # 行情工具
│   ├── web_search_tool.py      # 联网搜索工具
│   ├── sql_tool.py             # 金融 SQL 工具
│   └── ...
├── data/                       # 本地种子文档
├── chroma_db/                  # Chroma 向量库
├── knowledge_draft.db          # 主业务 SQLite
├── finance_data.db             # 金融 SQL 示例库
├── bad_cases_staging.json      # bad case 草稿箱
├── dynamic_cases_archive.json  # 动态问题归档
└── init_sql_db.py              # 初始化 finance_data.db

环境准备

1. 安装依赖

pip install -r requirement.txt

2. 配置 .env

项目默认使用 OpenAI 兼容接口,至少需要配置:

api_key="your_api_key"
base_url="https://api.siliconflow.cn/v1"
model="Qwen/Qwen2.5-7B-Instruct"

如果要启用后台 AI 自动巡检里的 LongCat 修复链,还需要:

LONGCAT_API_KEY="your_longcat_api_key"

3. 初始化金融 SQL 示例库

如果你要验证 finance_sql 工具,请先执行:

python init_sql_db.py

启动方式

建议分别打开 4 个终端启动服务:

python -X utf8 app_backend.py
python -X utf8 admin_backend.py
python -X utf8 app_frontend_network.py
python -X utf8 admin_frontend.py

默认地址:

  1. 前台 API: http://127.0.0.1:8000
  2. 后台 API: http://127.0.0.1:8001
  3. 前台 Gradio: http://127.0.0.1:7860
  4. 后台 Gradio: http://127.0.0.1:7861

后台 Gradio 当前带基础认证:

username: admin
password: 123456

注意:

当前仓库里的 run.sh 只是顺序命令列表,不是 Windows 下真正的多进程启动器。Windows 环境下建议手动分终端启动,或自行改成 PowerShell / bat 脚本。

关键 API

前台 API

  1. POST /api/v1/chat 多工具 Agent 问答
  2. POST /api/v1/kb_chat 纯知识库问答
  3. POST /api/v1/upload_temp 上传临时 PDF

后台 API

  1. POST /admin/api/upload 上传文档并异步解析
  2. GET /admin/api/docs 文档看板
  3. GET /admin/api/docs/{doc_id}/chunks 获取文档切片
  4. PUT /admin/api/chunks/{chunk_id} 修改 chunk
  5. DELETE /admin/api/chunks/{chunk_id} 废弃 chunk
  6. POST /admin/api/docs/{doc_id}/publish 发布文档入库
  7. GET /admin/api/bad_cases 读取坏案例
  8. POST /admin/api/bad_cases/auto_heal 启动 AI 自动巡检
  9. POST /admin/api/bad_cases/{case_id}/fix 人工修复 bad case
  10. GET /admin/api/analytics BI 看板

当前项目的几个亮点

  1. 不是单一路由到 RAG,而是基于 LangGraph 做多工具 Agent 编排
  2. 不是只做向量检索,而是做了混合召回和重排
  3. 回答不是黑盒,支持 sourcestool_trace
  4. 不是只收集反馈,而是打通了 bad case 到 golden_qa 的修复闭环
  5. 不是只会问答,还具备文档治理、插件绑定、连接器和运营看板

当前边界与说明

  1. finance_sql 当前主要是一个示例结构化金融工具,默认数据集中只初始化了 catl_finance
  2. 自动巡检强依赖大模型与 API 配置,未配置 LONGCAT_API_KEY 时无法完整跑通 LongCat 修复链
  3. 前端右侧溯源面板当前显示的是最近一轮问答的 sources + tool_trace
  4. 当前系统更适合企业文档、财报与结构化金融问题,不是通用互联网问答产品

适合写在简历上的项目描述

可以这样概括这个项目:

基于 LangGraph、LlamaIndex、Chroma 和 FastAPI 搭建企业知识问答与质检中台,实现多工具 Agent 编排、混合 RAG 检索、来源溯源、坏案例回收、AI 自动巡检和黄金问答沉淀。

About

一个面向企业知识库和金融财报场景的多工具 Agent + RAG 项目。当前仓库已经落地了前台智能问答、后台知识资产治理、坏案例回收、AI 自动巡检与黄金问答沉淀等能力。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors