geo/docs/GEO_Knowledge_Base_Research...

416 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GEO平台知识库系统 - 开源框架与技术方案综合调研报告
**调研时间**: 2026年5月23日 | **项目**: GEO平台知识库系统
## 执行摘要
### 推荐方案(分层递进)
- **核心RAG引擎**: LangChain + LlamaIndex互补优势
- **向量数据库**: pgvector生产+ Chroma开发
- **文档处理**: Unstructured + LangChain Document Loaders
- **Embedding**: BAAI/bge-m3中英文混合
- **RAG调优**: Hybrid Search + 递归语义分块 + 重排
- **架构理念**: Harness Pipeline-as-Code + Context Engineering
---
## 第一部分RAG框架对标分析
### 主流框架概览
| 框架 | GitHub Stars | 核心定位 | 推荐度 |
|-----|------------|--------|--------|
| **LangChain** | ~200k | 通用LLM应用框架Agent编排 | ⭐⭐⭐⭐⭐ |
| **LlamaIndex** | ~60k | 文档RAG专家数据连接 | ⭐⭐⭐⭐⭐ |
| **Dify** | ~121k | 企业级完整平台 | ⭐⭐⭐ (参考用) |
| **RAGFlow** | ~70k | 复杂文档处理 | ⭐⭐⭐ |
| **FastGPT** | ~40k | 轻量知识库 | ⭐⭐⭐ (参考用) |
| **MaxKB** | ~15k | 企业内部知识库 | ⭐⭐ |
### 为什么不选全栈平台?
**Dify/FastGPT的问题**
- 学习曲线陡新的工作流DSL
- 定制成本高(改一个逻辑要修改整个平台)
- 与FastAPI不兼容技术债
- 长期维护困难
**LangChain + LlamaIndex方案**
- 两者互补LangChain用于Agent编排LlamaIndex用于文档处理
- 与FastAPI无缝集成
- 社区资源最丰富
- 定制成本低,长期收益大
---
## 第二部分:向量数据库方案
### 对比分析
| 数据库 | 部署 | 优势 | 劣势 | GEO适配度 |
|-------|------|------|------|---------|
| **pgvector** | PG扩展 | 无缝集成、ACID、成本低 | 性能有上限 | ⭐⭐⭐⭐⭐ |
| **Chroma** | 本地/容器 | 轻量、零配置、开发友好 | 功能简单 | ⭐⭐⭐⭐ |
| **Qdrant** | 自托管 | 生产级、性能强 | 额外部署 | ⭐⭐⭐ |
| **Milvus** | 自托管 | 高性能、大规模 | 运维复杂 | ⭐⭐ |
### 推荐方案pgvector + Chroma双层
```
生产环境pgvectorPostgreSQL扩展
✓ 向量与元数据同库存储
✓ 支持ACID事务、完整备份
✓ 成本最低,无额外部署
✓ 支持1M-10M向量级别
开发环境Chroma
✓ 本地内存/SQLite存储
✓ 启动快无需PG
✓ 快速原型验证
```
---
## 第三部分文档处理和Embedding方案
### 三层处理管道
```
原始文档(PDF/Word/网页)
Unstructured IO (文档解析)
LangChain DocumentLoader (多源连接)
分块策略选择
BAAI/bge-m3 Embedding转向量
pgvector存储
```
### 分块策略对比
| 方法 | 优势 | 劣势 | GEO推荐 |
|-----|------|------|--------|
| 固定大小512 token | 快速、简单 | 语义边界被切割 | ⭐ |
| 递归语义分块 | 保留逻辑结构、效果最优 | 实现复杂 | ⭐⭐⭐⭐⭐ |
| LLM驱动分块 | 最准确 | 成本高、延迟大 | ⭐⭐ |
**推荐:递归语义分块**
```python
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=50,
separators=["\n\n\n", "\n\n", "\n", " ", ""]
)
```
### Embedding模型选型
**推荐BAAI/bge-m3**
- 中英文混合优化
- 同时支持密集+稀疏检索
- 可直接微调
- 开源免费
```python
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-m3")
embeddings = model.encode(documents)
```
---
## 第四部分RAG核心调优策略
### 4.1 Hybrid Search混合检索
**问题**:纯向量搜索弱于"精确术语查找"
**解决方案**BM25关键词+ 向量(语义)+ 重排
```
查询 → BM25检索 → 关键词Top-K
→ 向量检索 → 语义Top-K
→ 分数融合alpha融合
→ Cross-Encoder重排
→ 最终排序
```
**参数建议**
- 行业知识库规则文档alpha = 0.3-0.4
- 企业知识库描述性alpha = 0.5-0.6
- 内容生成辅助alpha = 0.6-0.7
### 4.2 Query Expansion查询扩展
用LLM生成查询变体提高召回率
```python
class QueryExpander:
async def expand_query(self, query: str, llm) -> List[str]:
"""生成3-5个查询变体"""
prompt = f"""生成'{query}'的5个等价查询"""
variants = await llm.agenerate(prompt)
return [query] + variants
```
### 4.3 Context Window管理
避免"Lost in the Middle"问题:
```
【系统提示词】(必须)
【工具定义】(必须)
【关键指令】(高优先级)
【检索文档】(按token预算分配)
【用户查询】(放在最后 - 注意力最高)
```
---
## 第五部分System Prompt设计 - Context Engineering
### 从Prompt到Context Engineering的演进
| 维度 | Prompt Engineering | Context Engineering |
|-----|------------------|-------------------|
| 范围 | 单次离散任务 | 持续Agent循环 |
| 重点 | 怎么问 | 整体信息状态 |
| 维护 | 写一次 | 动态策划 |
### 模块化Prompt结构
```xml
<system_prompt>
<role>内容生成助手</role>
<constraints>禁止编造数据、使用引用...</constraints>
<knowledge_base_guide>
- industry_knowledge行业规则
- company_knowledge企业特定信息
</knowledge_base_guide>
<available_tools>
- search_knowledge_base()
- get_platform_rules()
- check_brand_alignment()
</available_tools>
<output_format>
{
"content": "...",
"sources": [...],
"confidence": 0.95
}
</output_format>
</system_prompt>
```
### 多Agent Prompt模板
```python
# ContentGenerator Agent
"根据选题和知识库生成优质内容..."
# DeAI Agent
"消除AI生成痕迹增加具体例子..."
# GEOOptimizer Agent
"优化关键词密度、H1/H2结构..."
# RuleChecker Agent
"检查是否符合平台规则..."
```
---
## 第六部分Harness Engineering架构理念
### Pipeline-as-Code概念应用
采用Harness风格的YAML定义Pipeline
```yaml
pipeline:
stages:
- stage_id: "topic_selection"
agent: "TopicSelectorAgent"
inputs: { strategy: "${TOPIC_STRATEGY}" }
- stage_id: "knowledge_retrieval"
agent: "KnowledgeRetrieverAgent"
depends_on: ["topic_selection"]
inputs:
hybrid_search: { alpha: 0.5, top_k: 10 }
- stage_id: "content_generation"
depends_on: ["knowledge_retrieval"]
# ...更多Stages
```
### 模块化和插件化架构
所有Stage都继承StagePlugin基类
```python
class StagePlugin(ABC):
@abstractmethod
async def execute(self, context: dict) -> dict:
pass
def validate_inputs(self, inputs: dict) -> bool:
pass
class PipelineEngine:
def register_stage(self, stage_type: str, plugin: StagePlugin):
"""注册新Stage实现插件化"""
self.stage_registry[stage_type] = plugin
def add_policy(self, policy_func):
"""Policy as Code - 治理规则"""
self.policies.append(policy_func)
```
### 可观测性OpenTelemetry模式
```python
with self.tracer.start_as_current_span("pipeline_execution") as span:
span.set_attribute("pipeline.name", "content_generation")
for stage in stages:
with self.tracer.start_as_current_span(f"stage_{stage}") as s:
s.set_attribute("agent.tokens.input", 1024)
s.set_attribute("agent.tokens.output", 512)
```
---
## 第七部分:完整的技术栈
```
┌─────────────────────────────────────────────┐
│ 前端(Next.js 14) │
│ - 知识库管理UI(参考Dify设计) │
│ - 文档上传/预览/分块测试 │
└────────────────┬────────────────────────────┘
│ REST API
┌────────────────▼────────────────────────────┐
│ FastAPI后端 │
│ - Knowledge Base APIs (新增) │
│ - Retrieval APIs (新增) │
│ - Agent Pipeline APIs (新增) │
└────────────────┬────────────────────────────┘
┌────────────┴────────────┐
│ │
┌───▼──────┐ ┌───────▼────┐
│业务逻辑层 │ │Agent框架层 │
│LangChain │ │LangGraph │
│LlamaIndex │ │自定义Agent │
└───┬──────┘ └───┬────────┘
│ │
└────────┬───────────┘
┌────────────▼─────────────────────┐
│ 数据处理层 │
│ - Unstructured IO │
│ - Document Loaders │
│ - 递归语义分块 │
│ - Embedding (BAAI/bge-m3) │
└────────────┬─────────────────────┘
┌────────────▼──────────────────┐
│ 向量&知识存储层 │
│ - PostgreSQL 15 + pgvector │
│ - Redis 7 (缓存) │
│ - Chroma (开发) │
└───────────────────────────────┘
观测性OpenTelemetry + Prometheus + Grafana
```
---
## 第八部分:分阶段实施计划
**阶段1(第1-2周)核心RAG引擎**
- 集成LangChain + LlamaIndex
- pgvector向量存储
- 文档导入和分块
- 交付物RAG pipeline模块
**阶段2(第3周):检索优化**
- Hybrid Search实现
- Cross-Encoder重排
- Query Expansion
- 交付物:性能对标报告
**阶段3(第4-5周)Agent框架**
- ContentGeneratorAgent
- Prompt模板系统
- Agent协调机制
- 交付物Agent框架代码
**阶段4(第6周)前端UI和测试**
- 知识库管理UI
- 搜索测试工具
- 集成测试
- 交付物:前端组件 + 测试报告
---
## 第九部分:关键决策总结
| 决策点 | 方案 | 理由 |
|------|------|------|
| RAG框架 | LangChain + LlamaIndex | 互补优势,生态完整 |
| 向量DB | pgvector + Chroma | 成本低、与PG无缝集成 |
| Embedding | BAAI/bge-m3 | 中英混合、可微调、开源 |
| 分块 | 递归语义分块 | 保留语义、效果最优 |
| 检索 | Hybrid + Re-ranking | 精度最高 |
| 架构 | Harness Pipeline模式 | 可治理、可观测、易扩展 |
---
## 第十部分:常见陷阱和解决方案
### 陷阱1为什么不用Dify/FastGPT全栈方案
**答**全栈平台导致技术债、定制困难、与FastAPI不兼容。采用框架方案长期ROI更高。
### 陷阱2pgvector能处理多大规模
**答**500万向量可行1000万需分片。GEO近期不会达到pgvector足够。
### 陷阱3Embedding模型需要微调吗
**答**第一版直接用pre-trained bge-m3。6个月后积累查询日志再微调需500-10000三元组
### 陷阱4Context Window溢出
**答**主动管理不要等溢出。用tiktoken计数确保检索结果在token预算内。
---
## 成本估算
| 项目 | 成本 |
|-----|------|
| 基础设施(已有) | 0 |
| 开源软件许可 | 0 |
| 核心开发(4周) | ~200K |
| RAG调优(2周) | ~100K |
| 测试(1周) | ~50K |
| **总计** | ~350K |
*相比SaaS服务年费30-50万自建更经济*
---
## 后续研究方向
1. 多模态知识库(图表、表格、视频)
2. 知识图谱集成(实体关系抽取)
3. 主动学习(标注最有价值样本)
4. 联邦学习(企业隐私保护)
5. 自适应Chunking按文档类型调整