腾讯开源WeKnora框架源码深度解析
摘要
WeKnora是腾讯开源的企业级RAG(检索增强生成)框架,专为复杂异构文档理解和语义检索而设计。本文通过深入分析其源码架构,揭示了其模块化设计理念、混合检索策略、微服务架构模式以及完整的RAG流水线实现。该框架采用Go语言构建后端服务,Python实现文档解析微服务,Vue.js构建前端界面,支持PostgreSQL和Elasticsearch双重向量存储,实现了从文档解析、向量化、检索到生成的端到端智能问答解决方案。
1. 明确目标
核心代码定位
基于项目结构分析,WeKnora的核心代码主要集中在以下几个关键文件:
main.go
:应用程序入口点chat_manage.go
:RAG流水线定义knowledgebase.go
:知识库核心业务逻辑parser.py
:文档解析服务
目标设定
- 架构理解 :掌握WeKnora的整体架构设计和模块化思想
- RAG流程 :深入理解检索增强生成的完整实现过程
- 技术栈分析 :了解各技术组件的选型和集成方式
- 设计模式识别 :识别系统中应用的设计模式和最佳实践
- 部署实践 :理解生产环境部署的配置和优化策略
2. 目录结构分析
完整项目结构
WeKnora/
├── cmd/ # 应用程序入口
│ └── server/
│ └── main.go # 主服务启动文件
├── internal/ # 核心业务逻辑(私有包)
│ ├── application/ # 应用层
│ │ ├── service/ # 业务服务实现
│ │ └── repository/ # 数据访问层
│ ├── config/ # 配置管理
│ ├── container/ # 依赖注入容器
│ ├── handler/ # HTTP处理器
│ ├── middleware/ # 中间件
│ ├── models/ # AI模型集成
│ ├── router/ # 路由配置
│ ├── types/ # 类型定义
│ └── utils/ # 工具函数
├── services/ # 微服务实现
│ └── docreader/ # 文档解析服务(Python gRPC)
├── frontend/ # 前端应用(Vue.js)
├── config/ # 配置文件
├── migrations/ # 数据库迁移脚本
├── client/ # Go客户端SDK
├── mcp-server/ # MCP协议服务器
└── docs/ # 项目文档
架构层次标注
- 表示层 :frontend/ + internal/handler/ + internal/router/
- 应用层 :internal/application/service/
- 领域层 :internal/types/ + internal/models/
- 基础设施层 :internal/application/repository/ + services/
- 配置层 :config/ + internal/config/
- 部署层 :docker-compose.yml + migrations/
3. 关键文件清单
核心业务文件
文件路径 | 功能描述 | 重要程度 |
main.go | 应用程序启动入口,依赖注入初始化 | ⭐⭐⭐⭐⭐ |
chat_manage.go | RAG流水线事件定义和管道配置 | ⭐⭐⭐⭐⭐ |
knowledgebase.go | 知识库服务核心逻辑 | ⭐⭐⭐⭐⭐ |
router.go | API路由配置和中间件集成 | ⭐⭐⭐⭐ |
container.go | 依赖注入容器配置 | ⭐⭐⭐⭐ |
微服务文件
文件路径 | 功能描述 | 重要程度 |
server.py | gRPC文档解析服务器 | ⭐⭐⭐⭐ |
parser.py | 文档解析器外观模式实现 | ⭐⭐⭐⭐ |
配置和部署文件
文件路径 | 功能描述 | 重要程度 |
config.yaml | 系统主配置文件 | ⭐⭐⭐⭐ |
docker-compose.yml | 容器编排配置 | ⭐⭐⭐⭐ |
go.mod | Go模块依赖管理 | ⭐⭐⭐ |
4. 技术栈分析
后端技术栈
// 核心框架和库
github.com/gin-gonic/gin v1.10.0 // Web框架
github.com/google/uuid v1.6.0 // UUID生成
go.uber.org/dig v1.18.1 // 依赖注入
gorm.io/gorm v1.25.12 // ORM框架
gorm.io/driver/postgres v1.5.11 // PostgreSQL驱动// AI和向量处理
github.com/pgvector/pgvector-go v0.3.0 // PostgreSQL向量扩展
github.com/elastic/go-elasticsearch/v8 v8.18.0 // Elasticsearch客户端
github.com/sashabaranov/go-openai v1.40.5 // OpenAI API客户端
github.com/ollama/ollama v0.11.4 // 本地LLM集成// 消息队列和缓存
github.com/hibiken/asynq v0.25.1 // 异步任务队列
github.com/redis/go-redis/v9 v9.7.3 // Redis客户端// 可观测性
go.opentelemetry.io/otel v1.37.0 // OpenTelemetry追踪
github.com/sirupsen/logrus v1.9.3 // 结构化日志
前端技术栈
{"vue": "^3.5.13", // Vue.js 3框架"vue-router": "^4.5.0", // 路由管理"pinia": "^3.0.1", // 状态管理"tdesign-vue-next": "^1.11.5", // TDesign UI组件库"axios": "^1.8.4", // HTTP客户端"marked": "^5.1.2", // Markdown解析"dompurify": "^3.2.6" // XSS防护
}
微服务技术栈
# 文档解析服务(Python)
grpc # gRPC通信框架
protobuf # 协议缓冲区
python-docx # Word文档解析
PyPDF2 # PDF文档解析
Pillow # 图像处理
transformers # Hugging Face模型
基础设施技术栈
- 数据库 :PostgreSQL + pgvector扩展
- 搜索引擎 :Elasticsearch v7/v8
- 缓存 :Redis
- 消息队列 :Redis + Asynq
- 容器化 :Docker + Docker Compose
- 监控 :OpenTelemetry + Jaeger
- 存储 :MinIO(S3兼容)/ 腾讯云COS
5. 设计模式识别
5.1 依赖注入模式(Dependency Injection)
// 使用uber/dig实现依赖注入容器
c := container.BuildContainer(runtime.GetContainer())err := c.Invoke(func(cfg *config.Config,router *gin.Engine,tracer *tracing.Tracer,resourceCleaner interfaces.ResourceCleaner,
) error {// 依赖自动注入,降低耦合度// ... existing code ...
})
5.2 外观模式(Facade Pattern)
class Parser:"""文档解析器外观,统一多种解析器的接口"""def __init__(self):self.parsers: Dict[str, Type[BaseParser]] = {"docx": DocxParser,"pdf": PDFParser,"md": MarkdownParse