Skip to content

bcefghj/agent-knowledge-hub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 AgentKnowledgeHub — 企业级多Agent知识管理系统

License Python Java Go LangGraph Docker

一个企业级的「多Agent协作」知识管理系统

4个AI Agent分工协作,完成企业知识的全生命周期管理:文档解析 → 知识抽取 → 智能问答 → 增量更新

快速开始 · 系统架构 · 功能演示 · API文档 · 面试资料


📌 先看这里(写给小白)

如果你是第一次接触多Agent系统,先看这几个问题的解答:

什么是 Agent?

Agent(智能体)就是一个"能思考、能执行"的AI程序。它可以:

  • 理解你的需求(自然语言)
  • 决定需要调用哪些工具(如搜索、写文件、调用API)
  • 执行工具,得到结果
  • 根据结果继续思考,直到完成任务

什么是多Agent?

当一个任务太复杂,交给多个专职Agent协作完成。就像公司里:

  • 秘书 负责整理文件
  • 分析师 负责提炼关键信息
  • 顾问 负责回答问题
  • 管理员 负责持续更新维护

本项目就是用AI实现了这4个角色的分工协作。

这个项目能做什么?

你上传一份公司的PDF文档(比如年报、合同、产品手册),然后可以:

  • 直接用自然语言提问:"张三的职位是什么?" / "Q3营收多少?"
  • AI会综合理解文档内容,给出准确答案
  • 文档更新后,知识库自动同步,不用重新上传

📋 目录


🎯 项目简介

AgentKnowledgeHub 包含 4个核心Agent,通过 LangGraph 有向图编排,实现企业知识的全链路智能处理。

4个Agent是什么,分别做什么?

Agent 中文名 职责 类比理解
DocParserAgent 文档解析Agent 把PDF/图片/表格等各种格式的文档"读懂",切割成小段落 超强秘书,能看懂任何格式的文件
KnowledgeExtractAgent 知识抽取Agent 从文本中自动提取人名、公司、关系等结构化信息 分析师,把信息整理成知识图谱
QAAgent 问答Agent 接收用户问题,同时查向量库和知识图谱,生成精准答案 专家顾问,综合多源信息回答
KnowledgeUpdateAgent 知识更新Agent 监听文档变更,只更新变化的部分,保持知识库最新 勤快管理员,实时维护知识库

三大技术亮点

亮点 说明 解决什么问题
多模态RAG 不只处理文字,还能理解PDF里的图片、表格、流程图 传统系统只能处理纯文字
GraphRAG (知识图谱) 用图数据库存储实体关系,支持多跳推理 纯向量检索无法处理"关系型"和"多步推理"问题
CDC增量更新 文档变了只更新变化的部分 传统方案每次全量重建,1000个文档改5个要30分钟

🏗 系统架构

整体架构图

┌──────────────────────────────────────────────────────────┐
│                      用户接口层                            │
│              REST API / Web UI / SDK                      │
└──────────────┬───────────────────────────┬───────────────┘
               │                           │
┌──────────────▼───────────────────────────▼───────────────┐
│                 编排引擎 (LangGraph 有向图)                  │
│    ┌─────────────┬──────────────┬──────────────┐         │
│    │ 文档入库流程  │   问答流程    │  增量更新流程  │         │
│    └──────┬──────┴──────┬───────┴──────┬───────┘         │
└───────────│─────────────│──────────────│─────────────────┘
            │             │              │
┌───────────▼──┐ ┌───────▼────┐ ┌───────▼──────┐ ┌────────────┐
│ 文档解析Agent │ │  问答Agent  │ │ 知识更新Agent │ │ 知识抽取Agent│
│              │ │            │ │              │ │            │
│ - PDF解析    │ │ - 意图识别  │ │ - 文件监听    │ │ - NER实体识别│
│ - 图片OCR    │ │ - 向量检索  │ │ - CDC消费    │ │ - 关系抽取  │
│ - 表格提取   │ │ - 图谱检索  │ │ - 差量对比    │ │ - 事件抽取  │
│ - 文档分块   │ │ - 混合排序  │ │ - 增量更新    │ │ - 三元组生成│
└──────┬───────┘ │ - 答案生成  │ │ - 版本管理    │ └─────┬──────┘
       │         └──┬────┬────┘ └──────┬───────┘       │
       │            │    │             │               │
┌──────▼────────────▼────│─────────────▼───────────────▼──┐
│                        存储层                              │
│  ┌─────────────┐     ┌──────────────┐  ┌──────────────┐  │
│  │ ChromaDB /  │     │  Neo4j       │  │   Kafka      │  │
│  │ PGVector    │     │  知识图谱     │  │   CDC队列    │  │
│  │ 向量数据库   │     │              │  │              │  │
│  └─────────────┘     └──────────────┘  └──────────────┘  │
└──────────────────────────────────────────────────────────┘

三条工作流水线(每个数据怎么流转的)

流水线1:文档入库(上传文档时触发)

用户上传文档
     │
     ▼
文档解析Agent  ←── 支持 PDF / Word / Excel / 图片 / Markdown
  ├── 识别文件类型
  ├── 解析内容(文字 + 图片OCR + 表格提取)
  └── 切割成小块(Chunk)
     │
     ▼
知识抽取Agent
  ├── 命名实体识别(NER):找出人名、公司名、地名等
  ├── 关系抽取:找出实体之间的关系
  └── 生成三元组:("张三", "就职于", "腾讯")
     │
     ├──────────────────────────────┐
     ▼                              ▼
存入向量数据库                   存入知识图谱
(ChromaDB/PGVector)              (Neo4j)

流水线2:智能问答(用户提问时触发)

用户提问:"张三负责什么业务?和李四有什么合作关系?"
     │
     ▼
意图识别 + 查询改写
     │
     ├──────────────────┐
     ▼                  ▼
向量检索              图谱检索
(语义相似度)          (关系路径查询)
     │                  │
     └────────┬─────────┘
              ▼
         混合重排序
     (图谱结果权重更高,因为更精准)
              │
              ▼
         LLM生成答案
              │
              ▼
    返回答案 + 来源引用

流水线3:增量更新(文档修改时触发)

文档被修改 / 数据库记录更新
     │
     ▼
CDC事件产生(通过Kafka或文件监听)
     │
     ▼
知识更新Agent
  ├── 差量分析:找出哪些部分变了
  ├── 增量解析:只重新处理变化的内容
  └── 版本管理:记录更新时间和版本号
     │
     ├──────────────┐
     ▼              ▼
更新向量库        更新知识图谱

🛠 技术栈

Python版(主要实现,功能最完整)

组件 技术选型 为什么选它
Agent编排 LangGraph 2025年生产级Agent编排标准,有向图 + 状态持久化
LLM调用 LangChain + OpenAI 最成熟的LLM应用框架,支持几十种LLM
向量数据库 ChromaDB / PGVector ChromaDB开箱即用;PGVector适合已有PostgreSQL的企业
知识图谱 Neo4j 图数据库的事实标准,Cypher查询语言强大
消息队列 Apache Kafka CDC事件流处理的工业标准
API框架 FastAPI 异步高性能,自动生成OpenAPI/Swagger文档
文档解析 Unstructured + PyPDF2 + Tesseract 多模态文档解析全家桶
容器化 Docker Compose 一键启动所有依赖服务

Java版

组件 技术选型 说明
框架 Spring Boot 3.4 + Spring AI Java生态最成熟的AI应用框架
文档解析 Apache Tika Java文档解析标准库,支持1000+格式
向量存储 Milvus 企业级向量数据库
消息队列 Spring Kafka @KafkaListener注解驱动,开发效率高

Go版

组件 技术选型 说明
API框架 Gin Go生态最流行的HTTP框架,极低延迟
LLM调用 go-openai OpenAI官方Go SDK
图数据库 neo4j-go-driver Neo4j官方Go驱动
向量存储 pgvector-go PostgreSQL向量扩展Go客户端
并发 goroutine Go原生并发,文档批量解析天然并行

🌐 三语言实现

本项目同时提供 Python、Java、Go 三种语言实现,架构设计完全一致,只是语言和框架不同。

语言 适合什么岗位 特点 目录
Python AI工程师、算法工程师、数据工程师 功能最完整,LangGraph原生支持,推荐学习入口 python/
Java 后端开发、架构师、Java技术栈企业 Spring生态,企业级标准,代码规范严谨 java/
Go 基础架构、云原生、高性能后端 高并发处理,编译型语言性能优势明显 golang/

🚀 快速开始

前置条件

在开始之前,你需要安装:

  • Docker Desktop(用于一键启动依赖服务)
  • 一个 OpenAI API Key(或者用国内兼容接口,见下方FAQ)

步骤1:克隆项目

git clone https://github.com/bcefghj/agent-knowledge-hub.git
cd agent-knowledge-hub

步骤2:配置环境变量

cd python
cp .env.example .env

用任意编辑器打开 .env,填入你的配置:

# OpenAI配置(必填)
OPENAI_API_KEY=sk-你的APIKey
OPENAI_BASE_URL=https://api.openai.com/v1  # 国内用户可替换为兼容接口地址

# 数据库配置(使用Docker默认值即可,不用改)
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=password
CHROMA_HOST=localhost
CHROMA_PORT=8000
KAFKA_BOOTSTRAP_SERVERS=localhost:9092

步骤3:一键启动所有服务

# 回到项目根目录
cd ..

# 启动所有依赖(Neo4j、ChromaDB、Kafka)
docker-compose up -d

等待约1分钟,然后检查服务状态:

docker-compose ps

你应该看到所有服务状态为 Up

步骤4:启动Python API服务

cd python
pip install -r requirements.txt
python -m api.main

看到 Uvicorn running on http://0.0.0.0:8080 就说明启动成功了!

步骤5:验证服务

打开浏览器访问 http://localhost:8080/docs,可以看到交互式API文档。

或者用命令行:

# 健康检查
curl http://localhost:8080/api/health

# 上传一个文档
curl -X POST http://localhost:8080/api/ingest/upload \
  -F "file=@你的文档.pdf"

# 提问
curl -X POST http://localhost:8080/api/qa/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "这个文档讲了什么?"}'

🎬 功能演示

功能1:多模态文档解析

文档解析Agent可以自动识别文件类型,调用对应的解析器:

from agents.doc_parser_agent import DocParserAgent

agent = DocParserAgent()

# 解析不同格式的文档
chunks = await agent.parse("年度报告.pdf")    # PDF → 文字 + 图片识别 + 表格提取
chunks = await agent.parse("组织架构.png")    # 图片 → OCR文字识别 + LLM视觉理解
chunks = await agent.parse("财务数据.xlsx")   # Excel → 结构化文本
chunks = await agent.parse("产品文档.md")     # Markdown → 纯文本

# 每个chunk包含:
# chunk.text      - 文本内容
# chunk.metadata  - 来源文件、页码、类型等
# chunk.embedding - 向量表示(自动生成)

功能2:知识图谱自动构建

知识抽取Agent从文本中提取三元组,自动构建知识图谱:

from agents.knowledge_extract_agent import KnowledgeExtractAgent

extractor = KnowledgeExtractAgent()
result = await extractor.extract(chunks)

# 输出示例:
# entities(实体):
#   - ("张三", Person, {"职位": "CEO", "年龄": "45"})
#   - ("腾讯", Organization, {"行业": "互联网", "规模": "大型"})
#   - ("微信", Product, {"类型": "社交软件"})
#
# relations(关系):
#   - ("张三", "就职于", "腾讯")
#   - ("腾讯", "开发了", "微信")
#   - ("张三", "负责", "微信")

在Neo4j浏览器(访问 http://localhost:7474)中可以可视化查看知识图谱。

功能3:GraphRAG 混合检索问答

问答Agent同时从向量库和知识图谱中检索,结合两个来源的信息生成答案:

from agents.qa_agent import QAAgent
from services.vector_store import VectorStore
from services.knowledge_graph import KnowledgeGraphService

# 初始化
vs = VectorStore()
kg = KnowledgeGraphService()
qa = QAAgent(vector_store=vs, knowledge_graph=kg)

# 提问(支持复杂的多跳推理问题)
result = await qa.answer("张三负责的产品,它的主要竞争对手是谁?")

print(result.answer)     # 生成的自然语言答案
print(result.sources)    # 来源引用(哪些文档/哪些知识图谱节点)
print(result.confidence) # 置信度分数

# 内部执行流程:
# 1. 向量检索 → 找到语义相关的文档段落(用余弦相似度)
# 2. 实体链接 → 识别问题中的"张三"是哪个实体
# 3. 图谱检索 → 张三 → 负责 → 微信 → 竞争对手 → QQ / 钉钉
# 4. 混合重排序 → 图谱路径结果权重×1.25(推理链更精准)
# 5. LLM生成 → 综合所有信息,生成结构化答案

功能4:CDC 增量更新(只更新变化的部分)

from agents.knowledge_update_agent import KnowledgeUpdateAgent

update_agent = KnowledgeUpdateAgent(...)

# 场景:你修改了一个PDF文件的第3页

# ❌ 传统做法(全量更新):
#   1. 删除该文档所有向量 (删 1000 条)
#   2. 重新解析整个PDF     (解析 50 页)
#   3. 重新入库所有内容    (写入 1000 条)
#   耗时:~30 分钟

# ✅ CDC做法(增量更新):
#   1. 检测到第3页内容变化
#   2. 只重新解析第3页
#   3. 只更新第3页相关的向量和知识图谱节点
#   耗时:~30 秒(快60倍!)

await update_agent.process_cdc_event(event={
    "operation": "UPDATE",
    "resource_path": "/docs/年度报告.pdf",
    "changed_pages": [3]
})

📁 项目结构

AgentKnowledgeHub/
│
├── README.md                          ← 你正在看的这个文件
├── docker-compose.yml                 ← 一键启动所有依赖服务
│
├── docs/                              ← 文档目录
│   ├── architecture.md                ← 架构设计详解(每个决策的理由)
│   ├── interview-guide.md             ← 面试八股文 + STAR法则话术
│   ├── resume-template.md             ← 简历写法模板
│   ├── tech-deep-dive.md              ← 核心代码逐行讲解
│   └── project-plan.md               ← 项目规划方案
│
├── python/                            ← Python实现(功能最完整,推荐)
│   ├── agents/                        ← 4个核心Agent
│   │   ├── doc_parser_agent.py        ← 文档解析Agent
│   │   ├── knowledge_extract_agent.py ← 知识抽取Agent
│   │   ├── qa_agent.py                ← 问答Agent
│   │   └── knowledge_update_agent.py  ← 知识更新Agent
│   ├── orchestrator/
│   │   └── graph.py                   ← LangGraph编排引擎(定义3条流水线)
│   ├── services/
│   │   ├── vector_store.py            ← 向量库服务(ChromaDB/PGVector)
│   │   ├── knowledge_graph.py         ← 知识图谱服务(Neo4j)
│   │   ├── graph_rag.py               ← GraphRAG混合检索管道
│   │   ├── cdc_processor.py           ← CDC增量更新处理器
│   │   └── multimodal.py              ← 多模态处理服务
│   ├── api/
│   │   └── main.py                    ← FastAPI入口(REST API)
│   ├── config/
│   │   └── settings.py                ← 配置管理
│   ├── Dockerfile                     ← Python服务容器化
│   ├── requirements.txt               ← Python依赖
│   └── .env.example                   ← 环境变量模板(复制为.env后填写)
│
├── java/                              ← Java实现(Spring生态)
│   ├── src/main/java/com/agenthub/
│   │   ├── agent/                     ← 4个Agent(Spring Bean)
│   │   │   ├── DocParserAgent.java
│   │   │   ├── KnowledgeExtractAgent.java
│   │   │   ├── QAAgent.java
│   │   │   └── KnowledgeUpdateAgent.java
│   │   ├── service/                   ← 服务层
│   │   │   ├── VectorStoreService.java
│   │   │   └── KnowledgeGraphService.java
│   │   ├── controller/                ← REST Controller
│   │   │   └── KnowledgeController.java
│   │   └── model/                     ← 数据模型(POJO)
│   ├── src/main/resources/
│   │   └── application.yml            ← Spring Boot配置
│   └── pom.xml                        ← Maven依赖管理
│
└── golang/                            ← Go实现(高并发)
    ├── agent/                         ← Agent实现
    │   ├── doc_parser.go
    │   ├── knowledge_extract.go
    │   └── qa.go
    ├── service/                       ← 服务层
    │   ├── vector_store.go
    │   └── knowledge_graph.go
    ├── api/
    │   └── server.go                  ← Gin HTTP服务器
    ├── model/
    │   └── types.go                   ← 数据结构定义
    ├── config/
    │   └── config.go                  ← 配置读取
    ├── main.go                        ← 程序入口
    └── go.mod                         ← Go模块依赖

📡 API 接口

启动服务后,访问 http://localhost:8080/docs 查看交互式 Swagger API 文档。

文档管理接口

方法 路径 说明 示例
POST /api/ingest/upload 上传单个文档 curl -F "file=@doc.pdf" http://localhost:8080/api/ingest/upload
POST /api/ingest/batch 批量上传文档 上传多个文件,自动并行处理

智能问答接口

方法 路径 说明 请求体示例
POST /api/qa/ask 智能问答 {"question": "张三的职位?", "top_k": 5}

响应示例:

{
  "answer": "根据文档,张三担任腾讯公司CEO职务,负责微信产品线。",
  "confidence": 0.94,
  "sources": [
    {"doc": "年度报告.pdf", "page": 3, "type": "vector"},
    {"entity": "张三", "relation": "就职于", "target": "腾讯", "type": "graph"}
  ]
}

管理接口

方法 路径 说明
GET /api/admin/stats 查看系统统计(文档数、实体数、关系数)
POST /api/admin/update 手动触发全量更新
GET /api/health 健康检查

📚 面试资料

本项目为面试准备了一套完整资料,详见 docs/ 目录:

文档 内容 什么时候用
架构设计详解 每个技术决策的理由(为什么用LangGraph?为什么用GraphRAG?) 面试被深追问时
面试八股文+STAR 30+高频面试题 + STAR话术模板 面试前1天突击
简历写法模板 怎么把这个项目写进简历(量化指标怎么写) 投简历前
核心代码讲解 关键代码逐行解读,搞懂原理 代码层面被追问时
项目规划方案 完整的项目设计方案 理解整体思路

面试中如何介绍这个项目(STAR法则)

S(背景): 企业内部文档知识管理效率低下,传统关键词搜索准确率只有60%,无法处理多格式文档和多跳推理问题。

T(任务): 设计并实现一个多Agent协作的企业知识管理系统,支持多模态文档处理和智能问答。

A(行动):

  • 设计了4个专职Agent的分工协作架构
  • 引入GraphRAG融合向量检索和知识图谱检索
  • 实现了CDC增量更新机制,避免全量重建的性能损耗
  • 使用LangGraph有向图编排3条工作流水线

R(结果):

  • 问答准确率从60%提升到94%
  • 文档更新响应时间从30分钟缩短到30秒
  • 支持PDF/图片/Excel/Markdown等多种格式

❓ 常见问题 FAQ

Q: 我没有OpenAI API Key怎么办?

完全没问题!可以用任何兼容OpenAI接口的LLM服务:

# 国内免费/便宜的选择:
# 1. 通义千问(阿里)
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
OPENAI_API_KEY=你的通义千问APIKey

# 2. 智谱AI(GLM系列)
OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
OPENAI_API_KEY=你的智谱APIKey

# 3. 本地部署(完全免费)
# 先安装 Ollama: https://ollama.ai/
# 然后 ollama pull qwen2
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_API_KEY=ollama
OPENAI_MODEL=qwen2

Q: Docker启动后服务报错?

# 查看所有服务状态
docker-compose ps

# 查看某个服务的日志
docker-compose logs neo4j
docker-compose logs kafka

# 重启某个服务
docker-compose restart neo4j

Neo4j需要的内存比较多,建议给Docker分配至少4GB内存(Docker Desktop → Settings → Resources → Memory)。

Q: 这个项目可以直接用在公司生产环境吗?

这是一个架构展示 + 学习项目,展示了企业级系统的设计思路。如果要用在生产环境,还需要补充:

  • 用户认证和权限控制(JWT / OAuth2)
  • API限流和熔断(防止滥用)
  • 完善的日志和监控(ELK Stack / Prometheus)
  • 全面的单元测试和集成测试
  • 生产级的数据备份方案

Q: Python / Java / Go 三个版本有什么区别,用哪个?

三个版本架构设计完全一致,只是实现语言不同:

  • Python版:功能最完整,推荐作为学习入口。面AI工程师/算法工程师岗位必备。
  • Java版:用Spring生态实现,适合面Java后端/架构师岗位。
  • Go版:适合面基础架构/云原生/高性能后端岗位。

根据你面试的岗位选择对应语言版本重点准备即可。

Q: 如何运行测试?

# Python
cd python
pytest tests/

# Java
cd java
mvn test

# Go
cd golang
go test ./...

🔗 参考资料

核心框架文档

关键论文

相关学习资源


🤝 贡献

欢迎提 Issue 和 PR!

  • 发现 Bug?提交 Issue
  • 想加新功能?欢迎 Fork 后提 PR
  • 觉得有帮助?请点个 ⭐ Star,这是对我最大的鼓励!

📄 License

MIT License — 可以自由使用、修改、分发,只需保留原始版权声明。

About

企业级多Agent知识管理系统:4个AI Agent协作完成文档解析→知识抽取→智能问答→增量更新,Python/Java/Go三语言实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages