AgentSphere 个人项目的分享和理解
一、为什么还要造轮子?
2024~2025 被称为 Agent 元年,LangChain、AutoGPT、CrewAI、Dify、Coze……各种框架层出不穷,教程铺天盖地。但真正动手做一个 RAG 知识库 Agent 时,最难的不是”加什么”,而是”不加什么”。
大多数 RAG 方案在做同一件事:把用户问题切碎,和文档的关键词做匹配。但知识不是关键词的集合,知识是关联、是结构、是上下文。
举个例子:一份企业年报写着”A 公司收购了 B 公司”,一份行业研报写着”B 公司的核心技术团队来自 C 实验室”。真正够用的系统,应该能回答”C 实验室的技术最终去了哪里?”——这是一个跨文档推理问题,不是一个关键词匹配问题。
AgentSphere 的核心哲学:不做关键词匹配器,做知识推理器。
二、第一个分岔口:OCR 到底要不要?
大多数 RAG 教程教你用 PyPDFLoader / PyMuPDFLoader 直接读取 PDF。如果是数字原生 PDF,当然没问题。但如果是扫描件——合同、发票、老旧档案——这些工具读出来就是乱码,乱码进向量库,检索质量直接崩。
PaddleOCR 很重——几百 MB 的下载量,推理吃显存。
AgentSphere 的做法:先检查 PDF 是否有可提取的文本层——有就直接解析,跳过 OCR;没有才拉起 PaddleOCR。
核心理念:每个重组件都应该有”跳过”的权利。
三、GraphRAG:最容易被过度工程化的模块
GraphRAG(Microsoft,2024)用知识图谱增强 RAG——把孤立的数据库点连成关系网络,让 AI “理解”数据之间的关联,而不是仅仅检索单个事实。
但三个问题很明显:
- 实体提取很贵——每个 chunk 一次 LLM 调用,1000 个 chunk = 1000 次 API 调用
- 图谱质量取决于 LLM 质量——小模型做实体提取,结果一塌糊涂
- 大部分查询不需要图谱——“这份合同的甲方是谁?”这类简单问题,关键词搜索就能解决
AgentSphere 的设计:GraphRAG 是可选增强,不是默认管线。用一个 Router Agent 做问题分类——事实类查询走 BM25 + 向量检索,关系推理类(”A 和 B 之间有什么关联?”)才触发图谱多跳推理。
GraphRAG 是锤子,但不是所有问题都是钉子。
四、Reranker:最值的 100ms 延迟
混合检索——BM25 关键词 + BGE 向量——之后,RRF 融合出的 Top-10 排序往往有偏差:BM25 偏向给短文本打高分,向量检索偏向长文本。
BGE-Reranker 是 Cross-Encoder,把 query 和 document 拼在一起编码,计算真正的语义匹配。代价:多 100200ms 延迟。收益:**Top-5 精度通常提升 15%25%**。
如果只选一个优化策略,选 Reranker。
五、Agent 不是越多越好
CrewAI、AutoGen 这些多 Agent 框架给人一种错觉——Agent 越多越智能。
现实是:Agent 的复杂度是指数级的。每多一个 Agent,就多一次 LLM 调用(成本 + 延迟),多一个故障点(A 输出烂 → B 崩 → C 幻觉),调试难度翻倍(到底哪个 Agent 的 prompt 出了问题?)。
AgentSphere 的 5 个 Agent:
| Agent | 职责 | 是否必须 |
|---|---|---|
| Router | 问题分类 | 必须(决定走哪条路) |
| Planner | 执行规划 | 必须(复杂问题分步编排) |
| Query Rewrite | 查询改写 | 可选(简单问题跳过) |
| Answer Verify | 事实校验 | 可选(内部测试时开启) |
| Orchestrator | 协调调度 | 必须(调度以上所有 Agent) |
设计准则:每个 Agent 只做一件事,每个 Agent 都可以被跳过。
六、Token 消耗:你必须关心的事
一次 QA 流程的 Token 消耗示例:
- Query Rewrite:500 tokens
- 实体提取(GraphRAG):2,000 tokens × 10 chunks = 20,000 tokens
- LLM 生成:3,000 tokens
- Answer Verify:2,000 tokens
- 合计:约 25,500 tokens / 次查询
AgentSphere 在代码层面做了 Token 监控——每次 LLM 调用都记入 LLM Monitor,按 Provider 和模型维度分析成本。看不见的成本才是最大的成本。
七、最后的话
AI 肉眼可见地在引领一个新的时代,但创造的本质不是学会调用 API——是形成了一套判断力:
- 什么时候该上 OCR,什么时候不该
- 什么时候 GraphRAG 值它的成本,什么时候是过度工程
- 多一个 Agent 带来的价值,值不值它引入的复杂度
- 每一行代码是在解决问题,还是在制造问题
AgentSphere 是我个人的学习项目,每个模块都保留了当初决策的分岔口——你完全可以选择另一条路。
希望 AI 不是一个终点,而是形成自己判断的起点。
