一、立项背景和目标
企业内部的历史图书、转码成果与业务资料长期分散在不同系统和共享盘里,检索困难、无法沉淀为可复用的知识资产;而通用大模型无法回答企业私有问题。本项目基于腾讯开源项目 WeKnora(MIT 协议,Go + Vue)做私有化部署与二次开发,建设一套企业级知识库与智能问答平台,把分散文档沉淀为可查询、可推理的知识资产,并承接公司文件资源管理系统(FMS)的归档成果作为知识来源。需要说明的是:平台本体来自腾讯开源社区,本项目的工作是私有化部署、二次开发与业务承接,并非自研该框架。
二、软件功能与核心功能模块
1. RAG 快速问答:基于知识库检索增强生成,回答带引用来源,可定位到具体文档片段。
2. ReAct Agent 智能推理:自主编排知识检索、MCP 工具、技能沙箱与网络搜索,完成多步复杂任务。
3. Wiki 模式:Agent 从原始文档自动生成相互链接的 Markdown 知识页面与知识图谱,支持人工编辑、版本历史与一键回滚。
4. 知识管理:FAQ / 文档 / Wiki 三类知识库,支持文件夹树导入、分块编辑与版本历史、多标签与 URL 导入。
5. 多源数据接入:飞书知识库与云盘、GitLab、Notion、语雀、钉钉文档等外部知识源。
6. 跨会话长期记忆与对话管理。
7. 企业级多空间 RBAC 与空间审计日志。
8. 工具调用与沙箱:内置工具、MCP 工具(含 OAuth2 远程服务)与技能目录,可安装到会话级 Docker / E2B 沙箱中隔离执行。
9. FMS 知识承接(本项目新增):以只读方式拉取 FMS 发布的知识投影,镜像为本地知识库。
10. 模型与部署:接入二十余家主流模型厂商,支持完全私有化部署与内网离线运行。
三、业务流程与功能路径
管理员私有化部署平台并初始化空间 → 配置模型与知识库 → 导入文档或接入外部知识源 → 系统自动解析、切分、向量化并建立索引 → 用户在对话页提问,系统检索知识库并由大模型生成带引用的回答 → 复杂问题转由 Agent 多步推理完成。FMS 侧路径为:FMS 归档成果生成知识投影 → 桥接服务只读拉取并校验 → 原子写入镜像 → 在 WeKnora 中作为知识库被检索。
一、整体架构与设计思路
后端 Go 1.26,采用分层 internal/ 包结构,HTTP 路由与业务逻辑分离;前端 Vue 3 + TypeScript + Vite。PostgreSQL 存账号、配置与知识数据,Redis 承担任务队列与缓存,文档解析由独立的 docreader 服务承担,向量检索走独立索引;模型层按"协议 + 目录 + 厂商"分层,以适配二十余家模型厂商。设计上强调模块化解耦、组件可替换,支持本地与私有云部署。FMS 承接采用严格的只读边界:桥接仅消费 FMS 已发布的知识投影 API,绝不读取 FMS 库表、存储路径或源 EPUB,也不复用通用数据源管线(该管线会重新解析文档并触发额外索引);镜像按完整快照原子提交,任一必需 sidecar 未取到或校验失败就不替换当前版本,因此不会出现半截数据。
二、我负责的模块和结果
我负责该平台的私有化部署与二次开发落地。主要结果:完成 Docker Compose 三容器部署(应用 + PostgreSQL + Redis)与服务器一键部署脚本,并完成国内镜像源适配(Go module proxy、npm、apt、cargo 与 Debian 基础镜像),解决内网构建失败问题;实现 FMS 知识承接桥接 internal/fmsbridge 包(adapter / store / reconciler / runtime / config / types,共 1798 行 Go)及配套单元测试、数据库迁移与前端 FMSBridge 管理页面;打通 /zswek/ 子路径网关,使平台可挂在公司统一域名下;生产环境首次投影同步已进入 running 状态。
三、我遇到的难点、坑和解决方案
1. 边界不能越:若复用 WeKnora 通用数据源管线承接 FMS,会触发文档重新解析和二次索引,破坏 FMS 的权威性。解法是自建只读适配层,只消费 FMS 已发布投影,并在快照齐全、校验通过后才原子替换。
2. 内网构建:镜像构建阶段需要 Go、npm、apt、cargo 多套源,任一不可达即整包失败,最终统一改为国内镜像源并在基础镜像阶段就生效。
3. 端口与误判:宿主机再起一套 go run 会与容器抢 8080 端口,出现"关了容器仍能登录"的假象,改为固定容器入口并在操作手册中写明排查方式。
4. 子路径部署:平台需部署在 /zswek/ 下,静态资源、路由跳转与 API 前缀都要跟随基路径,否则页面白屏或接口 404,通过统一基路径配置解决。