夜雨聆风学习资料网

ARTICLE · 1106246

WeKnora 架构全景:从文档问答到企业知识平台

WeKnora 架构全景:从文档问答到企业知识平台

一个售后团队决定把散落的产品手册、退款规定和处理记录放到一起,让同事直接向 AI 提问。

最初的愿望很简单:少翻文档,快一点找到答案。真正开始使用后,问题却接连出现。

扫描版 PDF 能不能读懂?新规定上传后何时可以查到?不同团队能否只看自己的资料?如果需要比较政策、整理反馈、生成报告,系统还能继续做吗?

这些问题,逐渐把一个聊天窗口变成了一套知识平台。

腾讯开源的 WeKnora 提供了一个值得观察的样板:它把文档处理、检索问答、任务执行和知识整理放在同一套系统里。

本系列从架构、RAG、Agent、Wiki 和协作机制五个角度展开。第一篇先建立全景:各部分负责什么,为什么这样分工,以及一份资料如何走到用户面前。

先看它提供的三种能力

面对一批资料,人们通常有三种不同需要。

知道问题的人,希望迅速找到依据;接到任务的人,希望有人协助查阅、比较和产出;刚进入一个领域的人,则需要一份能帮助自己理解背景的知识地图。

WeKnora 用三种能力回应这些需要:

能力
主要解决的问题
放到售后团队的场景里
RAG:检索增强生成
从资料中找依据,再组织回答
“定制订单能否退款?”
Agent:智能体
根据目标选择工具,逐步推进任务
“分析近期退款反馈,整理主要问题”
Wiki:主题知识页
把分散资料整理成可阅读、可维护的知识
围绕退款条件、处理流程、特殊情形形成页面

三者共享知识库,但工作方式不同。

RAG 有预先安排的问答步骤,Agent 可以根据中间结果调整行动,Wiki 则是可以被阅读、检索和修订的内容。

后面几篇会分别展开;现在先记住,系统需要同时支持“查资料”“做事情”和“积累知识”。

系统全景:用户看见的界面之外,还有哪些部分

从外部看,WeKnora 有网页界面,也可以通过接口和消息渠道接入其他工作场景。

从内部看,业务主应用居中协调,周围连接着解析、模型、存储和任务处理等能力。

下面是一张经过简化的系统地图。连线表示主要协作关系,不代表每次请求都会经过全部组件。

网页主要负责接收操作、展示内容和反馈进度。Go 编写的业务主应用负责判断“谁能做什么”“这件事应该怎样进行”,以及“结果应该交给谁”。文档解析部分包含 Python 服务,用来承接多种格式的内容提取。模型和检索、存储组件则提供各自的专业能力。

其中,“保存数据”还需要进一步区分。原始文件要保留,用户与知识库的关系要记录,适合检索的内容也要建立索引。它们承担不同职责,即使某种部署把部分数据放进同一个数据库,也不能把这些职责混为一谈。

长文档解析和批量知识维护可能耗时较长,任务执行机制负责安排这些工作。在配置了队列的部署中,它们可以交给后台处理;轻量部署则采用相应的本地替代方式。可选的图检索、外部工具和执行环境,也按需要接入。

这张图最重要的信息是:聊天界面只是入口,业务主应用负责把多种专业能力组织成一项完整服务。

五个设计思路,贯穿整套系统

组件一多,真正的难题就是管理变化。模型会换,文件类型会增加,部署规模会变化,前端也可能从网页延伸到其他渠道。WeKnora 的几个设计选择,都与这些变化有关。

先约定能力,再连接具体实现

业务流程需要的是“保存文件”“查找相关内容”“调用模型”等能力。至于文件存在本地还是对象存储、检索由哪一种引擎完成,可以交给对应组件。

这些约定在软件中称为接口。它们让更换某个外部服务时,修改尽量集中在连接处。代价是系统需要维护更多适配工作,而且不同产品的能力差异仍然存在。支持替换,不等于任何组合都有相同效果。

在启动时把组件组装起来

文档处理需要解析和存储,问答需要模型和检索,知识维护又需要任务执行。WeKnora 在启动时集中连接这些依赖,相当于先确认各项工作由谁承接,再开始接收请求。

核心依赖出现问题时,可以尽早暴露;部分可选能力则允许记录错误后继续启动。这种区别很实际:某个扩展没有配置好,不一定要让整个系统都无法使用,但必需的基础能力不能缺席。

按部署条件选择实现

一个人试用,与一个团队多人使用,需要的基础设施不同。WeKnora 根据配置选择组件:有共享服务时利用共享状态和任务队列,没有时为部分能力提供本地替代。

因此,业务层可以沿用相近的工作方式,而部署者不必在第一次体验时就准备最完整的环境。需要付出的维护成本,是同时照顾不同运行条件下的行为和限制。

把流程推进和进度通知分开

“接下来该做什么”和“告诉用户刚才发生了什么”是两件事。

问答内部需要按顺序完成检索、整理和生成;页面则需要知道检索何时开始、回答何时产生新内容。WeKnora 为它们采用不同机制,让流程组织和对外通知各自演进。

这样,新增一种进度展示方式时,不必重新安排整个问答流程。反过来,调整检索步骤,也不必让业务逻辑依赖某个具体聊天界面。

在变化频繁的位置保留扩展空间

模型、检索引擎、对象存储、数据源和消息渠道,都是企业环境中容易出现差异的地方。WeKnora 在这些位置提供适配入口,接入企业已有资源。

这个选择增加了配置和验证工作,却也降低了采用新平台时“一切重来”的阻力。评估时,应重点看自己准备使用的组合能否正常运行,而不是只看支持列表有多长。

业务主应用内部,怎样分工

外部组件说明了系统由什么组成,内部职责则决定一次操作怎样被处理。

以知识库相关业务为例,可以把职责理解为四组。下面是职责关系示意,具体业务会按需要调用数据访问或基础能力。

请求处理层把用户操作转换成系统能理解的请求;业务层决定怎样完成;数据访问层负责记录和查询;基础能力层提供解析、分块、网页获取等支撑。

拿“上传一份退款规定”来说,接收文件、判断能否写入知识库、安排内容处理、保存处理结果,都有各自的责任位置。权限也会在入口和具体资源访问处受到检查,不能只凭用户已经登录就放行所有操作。

分层的价值,在于让问题和变化有明确落点。文件内容读错了,应重点检查解析环节;用户看到了不该看的资料,应检查访问范围;页面迟迟没有更新,则要沿状态记录和通知链路查找原因。

它也有成本:一项操作会跨越多个组件,理解和排查需要沿着流程走。架构设计因此还要配合日志、进度和错误反馈,才能让分工真正可维护。

沿着一次上传、一次提问走一遍

全景图说明位置,实际流程说明这些位置如何协作。

上传时,系统把文件变成可用资料。接收文件后,先检查身份、知识库权限与文件信息,再安排解析。提取出的内容被切成适合检索的片段,相关记录进入存储,并建立检索索引。如果知识库启用了 Wiki,还会触发主题知识页的生成与维护。

所以,“上传成功”“解析完成”“能够检索”“Wiki 更新完成”是不同阶段。用户已经看见文件名,并不代表所有后续处理都结束了。

提问时,系统把资料变成回答依据。常规知识问答先结合历史理解问题,再寻找相关内容,整理证据并交给模型生成回答。过程事件和回答内容通过流式通道送回页面,让用户逐步看到进展。

如果进入 Agent 执行路径,系统还会根据所选资料和允许使用的工具,准备任务环境,由模型决定下一步行动。它可以检索资料,也可以读取 Wiki,具备相应工具时还可以继续处理文件或生成产物。

两条使用路径共享基础资源,但各自采用适合任务的推进方式。这也是后续理解 RAG 与 Agent 差别的起点。

从个人试用到团队使用,哪些条件会变化

WeKnora 提供轻量运行方式,也支持依赖更多共享服务的部署。两者的差别,主要体现在任务协调和状态保存上。

观察点
轻量运行方式
配置共享服务的部署
任务处理
部分工作由本地执行器承接
可以使用队列和后台工作进程
临时状态与协调
部分状态保存在当前进程中
可以借助共享存储协调多个实例
初次准备
减少需要搭建的服务
需要配置更多基础设施
扩展时的重点
检查进程生命周期和本地处理能力
检查共享资源、并发配置与故障恢复

轻量方式适合较快验证资料和模型的实际效果。用户增加后,需要重新检查任务吞吐、资源共享、访问控制和运维条件,不能仅靠增加应用副本解决所有问题。

这种设计提供了一条连续的采用路径:先获得有效体验,再补齐团队运行所需的条件。

读懂架构之后,再看每项能力

WeKnora 的架构把几个经常被低估的问题放到了台前:文档需要持续处理,模型需要被组织调用,知识需要维护,用户需要知道过程发生了什么。

对于使用者,这些问题决定系统是否适合进入日常工作;对于建设者,它们决定一个演示能否长期运行。接口、分层和组件装配的意义,最终都会落到这些具体体验上。

接下来的 RAG 篇,将沿着一条退款规定,观察文件内容如何变成可核查的回答依据;Agent 篇讨论任务如何被推进;Wiki 篇讨论知识如何被整理和更新;最后再把三者放回同一个使用过程。

相关学习资料