【第三部分:第一个 Agent 应用】14. 开发一个完整的企业知识助手:从 RAG 到 Agent

0 阅读16分钟

前面的文章,我们已经分别介绍了 Context Engineering、Function Calling、Structured Output、RAG、Agent Loop、状态机和 Memory。这些能力单独使用时并不复杂。真正进入企业应用以后,问题变成:怎样把这些能力组合成一个真正可以被员工使用的知识助手?

早期企业知识助手通常可以概括为:上传文档 → 建知识库 → 用户提问 → RAG → 大模型回答。但到了 2026 年,这已经只能算知识库问答系统。一个真正完整的企业知识助手,还应该知道:

  • 当前用户是谁,可以访问哪些知识;
  • 简单问题应该直接检索,复杂问题是否需要多轮 Agentic RAG;
  • 答案依据了哪些原文;
  • 什么时候应该查询数据库或业务系统,而不是继续搜索文档;
  • 用户过去确认过哪些偏好和决策;
  • 工具调用是否需要审批;
  • 出错发生在检索、Tool、模型还是权限环节;
  • 模型升级以后效果是否真的变好。

因此,企业知识助手真正需要建设的不是一个“聊天框”,而是一套:Knowledge + Agent + Tool + Memory + Governance组成的 AI 应用运行体系。


一、先明确:我们要开发的不是“企业版 ChatGPT”

一个常见误区,是把企业知识助手理解成:给通用大模型增加一个企业知识库。这种产品当然有价值,但能力边界仍然比较窄。例如员工问:“上海地区销售人员出差住宿标准是多少”?普通 RAG 可以很好地回答。但如果继续问:“我下周要去上海参加客户交流,根据公司制度帮我确认预算,并查询当前项目还有多少差旅预算,如果足够就生成一份出差申请”。任务已经发生变化。系统至少需要:

需求需要的能力
查询差旅制度RAG
查找适用地区和人员标准Metadata / Permission Filter
查询项目剩余预算Tool / Business API
理解用户和当前项目Context / Memory
生成出差申请Structured Output
提交申请Tool Calling
高风险提交前确认Human-in-the-Loop
记录整个执行过程Trace

所以企业知识助手真正的演进是:Knowledge Assistant → Enterprise Agent知识仍然是核心,但已经不是全部。


二、一个完整企业知识助手应该具备哪些能力

可以把系统能力分成五层。

层次核心能力
交互层对话、多轮、流式输出、文件上传
Agent 层意图判断、路由、规划、Tool Calling
Knowledge 层RAG、Agentic RAG、Citation、Metadata
Context 层Session、State、Memory、Workspace
Governance 层Permission、Audit、Trace、Evaluation

这五层有一个非常重要的分工:**Knowledge 层负责“知道什么”;Agent 层负责“下一步做什么”;Governance 层负责“允许做到什么”。**因此,一个比较完整的架构可以设计为:


三、知识层:从“每次都 RAG”升级为按复杂度选择策略

前面的 RAG 文章已经介绍过 Hybrid Search、Rerank、Query Rewrite 和 Agentic RAG,这里不再重复原理。完整企业知识助手真正需要解决的是:**什么时候用哪一种检索方式?**一个简单策略可以是:

问题类型推荐方式
简单制度查询Traditional RAG
精确编号 / 产品编码Keyword + Metadata
多文档综合Agentic RAG
多条件筛选Agentic RAG
数据计算RAG + Tool / SQL
实时信息Tool / Search
企业系统数据Connector / API

也就是说,不应该设计成:

所有问题
→ Vector Search
→ LLM

而应该先进行 Routing。例如:

if query.type == "simple_knowledge":
    return rag.search(query)

if query.type == "complex_knowledge":
    return agentic_rag.run(query)

if query.type == "business_data":
    return tool_agent.run(query)

2026 年 Agentic RAG 已经开始成为正式产品能力。腾讯云 ADP 当前的 Agentic RAG 可以自主规划检索策略、反思首次结果并进行多轮检索;其知识库检索 Agent 还能组合知识检索、SQL 和计算工具处理跨文档以及数据分析问题。这意味着现代企业知识助手正在从:Retrieval Pipeline升级到:Retrieval Decision System


四、知识库本身也在发生变化:Metadata 正在变得越来越重要

传统知识库主要保存:**Chunk、Embedding、DocumentId。**但企业数据通常具有非常明确的业务属性:**产品、部门、地区、版本、生效时间、文档类型、密级、作者、租户。**这些数据应该成为 Metadata。例如:

{
  "department": "销售部",
  "region": "上海",
  "effectiveDate": "2026-01-01",
  "documentType": "差旅制度"
}

用户询问:“上海销售人员当前住宿标准”。系统首先就可以过滤:

department = 销售部
region = 上海
effectiveDate <= today

然后再执行语义搜索。这样往往比单纯依赖 Embedding 更准确。2026 年 9 月腾讯云 ADP 已经进一步把 Metadata 引入知识库召回,同时增加知识源定时更新能力,这也说明企业 RAG 正从单纯“向量相似度”继续走向结构化过滤 + 内容检索 + 知识生命周期管理。


五、权限过滤必须发生在检索之前

企业知识助手和公共知识问答最大的区别之一,就是:**同一个问题,不同用户可能看到不同答案。**例如:员工→ 可以查询普通制度;部门经理→ 可以查询部门经营资料;财务人员→ 可以查询财务制度和预算;高管→ 可以访问经营分析材料。因此不能设计成:检索整个知识库→把内容交给 LLM→最后再判断能不能展示。因为敏感内容已经进入模型 Context。正确方式应该是:User Identity+Tenant / Department / Role→Permission Filter→Allowed Knowledge Scope→Retrieval。也就是说:**Permission 是 Retrieval 的前置条件,而不是答案生成后的过滤器。**对于多租户系统,还必须保证:Tenant A的 Chunk 在任何情况下都不会进入:Tenant B 用户的 Candidate Recall。这是企业知识助手必须坚持的安全边界。


六、引用不是 UI 装饰,而是答案的数据结构

一个企业知识助手回答:“上海住宿标准为 600 元 / 晚” 还不够。真正可靠的答案应该包含:答案+Evidence+Citation。例如:

上海地区普通员工住宿标准:
600 元 / 晚。

依据:
《2026 年差旅管理办法》
第三章第 12 条
第 8 页

因此 Retriever 返回的不能只是:content 还应该保留:documentId、documentName、version、page、section、chunkId、score。最终 Answer 可以设计为:

record KnowledgeAnswer(
    String answer,
    List<Citation> citations,
    double confidence
) {}

这实际上把前面 Structured Output 的思想重新带回来了:企业知识助手的最终输出不是一段字符串,而是“答案 + 证据”的结构化结果。


七、Tool:当知识库不能回答时,不要继续搜索知识库

这是知识助手升级为 Agent 最重要的一步。例如用户问:“我的报销申请现在审批到哪里了”?这个答案根本不应该来自 RAG。它来自:审批系统 API。再例如:“项目还剩多少预算”?应该查询:Project / Finance System。因此 Knowledge Assistant 至少需要:Knowledge Tool、Business Tool
、Search Tool、Calculation Tool,模型根据问题选择能力。例如:

查询差旅制度
→ search_knowledge

查询剩余预算
→ get_project_budget

提交出差申请
→ create_travel_request

OpenAI 当前 Responses API 已经把 file_search、Function Calling、Web Search、远程 MCP 等工具统一到同一工具体系中;其中 file_search 本身支持语义和关键词检索,并由平台托管执行。DeepSeek 当前同样支持 Tool Calls,并提供 strict 模式来约束模型严格按照 Function JSON Schema 生成参数。这说明 Tool Calling 已经逐渐成为现代 Agent 的基础设施,而不再是某个特定框架的附加能力。


八、MCP 正在成为企业知识助手连接外部能力的重要接口层

如果每接一个系统都自己设计:CRM Adapter、OA Adapter、ERP Adapter、Git Adapter、Database Adapter,企业 Agent 很快会进入大量重复集成工作。MCP 的价值,就是逐渐把:Agent ↔ Tool / Data之间的连接方式标准化。

当前 OpenAI 的工具体系已经支持 Remote MCP,并且可以对 MCP Tool 设置自动执行或显式审批;私有网络中的 MCP Server 也可以通过 Secure MCP Tunnel 接入,而不必把内部服务直接暴露在公网。

2026 年 7 月发布的 MCP 2026-07-28 规范又进一步增加了:

  1. Stateless Protocol Core;
  2. Multi Round-Trip Requests;
  3. Cacheable List Result;
  4. Extensions;
  5. Authorization Hardening。

这使 MCP 更接近真正适合企业网关、负载均衡和权限体系的 Agent 基础协议。因此企业知识助手中的 Tool Layer 可以逐渐演进为:

Agent Runtime
      │
      ▼
MCP / Tool Gateway
      │
 ┌────┼────────┐
 ▼    ▼        ▼
OA   CRM      ERP

而不是在 Prompt 中硬编码几十个业务接口。


九、Memory:让助手认识用户,但不要污染企业知识

上一篇已经专门讨论过 Memory,这里只关注它在企业知识助手中的位置。企业知识助手通常至少会使用两种 Memory:

Session Memory

解决:“我们刚才聊到哪里了?”

User Long-term Memory

解决:“这个用户长期有什么稳定偏好?”

例如:用户习惯中文回答、用户是研发人员、常用项目为 Project-A。但需要特别注意:**用户 Memory 与企业 Knowledge 必须分开。**用户说:“我记得公司报销标准是 800”。不能因为这句话被长期记忆,就污染正式企业知识库。正确优先级应该是:Authoritative Knowledge>Business System Data>User Memory。Memory 可以帮助 Agent:理解用户,但不能替代企业事实来源。


十、把这些能力组合起来:一次完整请求到底怎样执行

来看一个完整例子。用户说:“我下周要去上海参加客户交流,根据公司制度看看我的住宿预算,再查一下 Project-A 还有多少差旅预算,如果够的话帮我生成出差申请”。系统首先识别:用户身份
、项目 = Project-A、目标 = 出差申请。接下来并不是简单执行一次 RAG。

第一步:查询制度

通过 Permission-aware RAG:差旅制度+地区 = 上海+用户职级获得住宿标准,并保存 Citation。

第二步:查询业务数据

发现“剩余项目预算”不属于知识库,于是调用:get_project_budget("Project-A")获得实时预算。

第三步:进行计算与判断

Agent 综合住宿标准+出差天数+剩余预算计算预算是否满足要求。

第四步:生成结构化申请

利用 Structured Output 生成:

{
  "project": "Project-A",
  "city": "上海",
  "hotelBudget": 1800,
  "reason": "客户交流"
}

第五步:人工确认

因为:create_travel_request会改变真实业务状态,因此进入 Human-in-the-Loop:是否提交?用户确认后,再真正调用业务系统。这一个场景已经把前面几篇内容全部连接起来:

能力在本场景中的作用
Context当前用户和目标
RAG查询制度
Citation给出制度依据
Memory用户和项目偏好
Tool Calling查询预算
Structured Output生成申请数据
State保存当前执行进度
Human Approval提交前确认

这才是“完整企业知识助手”的真正含义。


十一、代码层不需要写一个巨大的 KnowledgeAssistant

从工程实现看,不建议把所有逻辑都塞进一个KnowledgeAssistantService。更合理的是拆成稳定能力。例如:

interface KnowledgeRetriever {
    RetrievalResult search(
        Query query,
        UserContext user
    );
}

interface MemoryService {
    List<Memory> recall(
        UserContext user,
        String query
    );
}

interface ToolExecutor {
    ToolResult execute(
        ToolCall call,
        UserContext user
    );
}

Agent Runtime 只负责编排:

var context =
    contextAssembler.build(
        user,
        session,
        memoryService,
        currentTask
    );

var result =
    agent.run(
        context,
        knowledgeRetriever,
        toolExecutor
    );

关键不是这几行 API,而是避免形成:

Controller
→ Prompt
→ LLM
→ String

这种难以扩展的结构。企业知识助手应该拥有独立的:Knowledge、Memory、Tool、Session、Permission、Trace服务边界。


十二、流式输出不仅要流 Token,还要流“执行状态”

普通 Chatbot 的 Streaming:

Token
Token
Token

就够了。

Agent 型知识助手则更适合向前端传递:

正在理解问题
正在检索知识库
找到 12 条候选资料
正在重新排序
正在查询业务系统
等待人工确认
正在生成最终答案

也就是说 Streaming 的对象正在从:文本流扩展成:**Agent Event Stream。**例如前端可以接收:

{
  "type": "retrieval_started"
}

或者:

{
  "type": "tool_completed",
  "tool": "get_project_budget"
}

这样用户看到的不是一个长时间旋转的 Loading,而是 Agent 当前实际在做什么。


十三、可观测性:企业知识助手必须能够回答“为什么这样回答”

普通日志只记录:

Question
Answer

远远不够。

完整 Trace 至少应该包含:

Original Query
Rewritten Query

Retrieved Documents
Retrieval Score
Rerank Result

Memory Recall

Model Calls

Tool Calls
Tool Result

Permission Decision

Citation

Token
Latency
Cost

Final Answer

OpenAI 当前 Agents SDK 的 Trace 可以记录模型调用、Tool Call、Handoff 和 Guardrail;官方也建议先通过 Trace 调试 Agent 行为,再进入系统化 Eval。

当用户说:“这个答案为什么错了”?系统才能判断到底是:

知识没有入库?
权限过滤错了?
Query Rewrite 错了?
Retriever 没召回?
Rerank 排错?
Tool 返回错误?
还是模型推理错了?

这也是 Agent 可观测性与普通 API 日志最大的区别。


十四、Evaluation:知识助手上线以后不能只看“用户觉得还行”

传统软件测试往往强调:Input → Expected Output,但 Agent 具有不确定性,不能只靠几个人工 Demo 验证。至少应该建立一套企业 Golden Dataset:

问题
期望答案
允许访问的知识
必须引用的来源
不允许访问的内容
需要调用的 Tool
期望行为

评估维度可以包括:

维度示例
Retrieval Recall正确文档是否召回
Citation Accuracy引用是否真的支持答案
Answer Correctness最终回答是否正确
Permission是否发生越权检索
Tool Selection是否选择正确 Tool
Task Completion是否真正完成用户目标
Cost / Latency代价是否可接受

现代 Agent Eval 也正在从只评价最终答案,转向评价完整执行轨迹。OpenAI 当前的 Agent Evaluation 就支持基于 Trace 对模型调用、Tool Call、Guardrail 和 Handoff 等流程行为进行评分。因此:企业知识助手的质量不是一个 Prompt 的质量,而是一整条执行链的质量。


十五、安全治理:越强的知识助手,越需要确定性的边界

当知识助手只回答文档问题时,风险主要是:**答错。**当它开始拥有 Tool 后,风险会变成:做错。

因此 Tool 应该分级。

Tool风险
search_knowledge低
query_database中
create_document中
send_email高
submit_approval高
delete_data极高

可以建立:Read Tool→ 自动执行;Write Tool→ 权限校验;High-risk Tool→ 权限 + Human Approval。同时必须防止:Prompt Injection;越权检索;Tool 参数注入;Memory Pollution;敏感数据进入 Trace;MCP Server 获得过宽权限。

最新 MCP 规范也持续强化 Authorization,2026-07-28 版本进一步加入了授权硬化和正式扩展体系;Enterprise-Managed Authorization 也已经稳定,用于集中管理企业 MCP 授权。因此企业知识助手真正需要的是:Agent 自主决策 + 最小权限 + 确定性安全边界。


十六、2026 年的企业知识助手正在发生哪些变化

把最近的发展放在一起,可以看到几个非常清晰的趋势。

第一,RAG 正在 Agentic 化

简单问题继续使用传统 RAG;复杂问题开始让 Agent 自主规划、多轮检索和交叉验证。

第二,知识库正在结构化

Metadata、权限、版本和知识更新时间越来越重要,不再只关注 Embedding。腾讯云 ADP 在 2026 年 9 月已经新增知识库 Metadata 与知识源定时更新。

第三,Tool 连接正在标准化

Function Calling 仍然重要,但 MCP 正逐渐成为连接企业数据与业务系统的重要标准接口;2026 年 MCP 又继续强化了可扩展性、无状态部署和授权能力。

第四,Memory 开始成为独立服务

Memory 不再等于 History,而是拥有 Capture、Recall、Update、Forget 和 Scope。

第五,质量治理从 Answer 转向 Trace

不只评价模型最后说了什么,还需要评价:它为什么检索这些知识、为什么调用这个 Tool,以及整个任务是否正确完成。

这些变化共同说明:企业知识助手正在从“知识库前面的聊天界面”,演变成企业 Agent 的统一知识与任务入口。


十七、不要一开始就把所有能力全部打开

即使拥有这些技术,也不意味着第一个版本就应该同时实现:Agentic RAG、GraphRAG、Memory、Multi-Agent、MCP、Workflow、几十个 Tool。更加合理的演进路径是:

第一阶段:可靠知识问答

重点完成:Permission-aware RAG + Citation + Trace

第二阶段:加入实时业务能力

增加:Tool Calling + Business API + Human Approval

第三阶段:提升连续性

增加:Session + Memory + State

第四阶段:处理复杂知识任务

增加:Agentic RAG + 多轮检索 + 数据计算

第五阶段:平台化治理

再建设:MCP Gateway + Eval + Cost + Audit + Tool Governance

这仍然符合本系列一直强调的原则:**不要为了使用 Agent 而过度设计。**先让系统可靠解决真实问题,再逐步增加自主性。


十八、小结

到这一篇,我们终于把前面介绍的能力真正组合在一起。一个完整的企业知识助手已经不再是:Knowledge Base+LLM而更接近:Enterprise Knowledge Agent = Knowledge + Context + Memory + Tool + State + Permission + Evaluation。其中:

  • RAG 提供企业知识;
  • Agentic RAG 解决复杂知识检索;
  • Tool / MCP 连接真实业务系统;
  • Memory 提供跨任务连续性;
  • State 保存任务执行状态;
  • Structured Output 让结果进入程序;
  • Permission 限定可以看到和操作什么;
  • Citation 让答案有据可查;
  • Trace / Eval 让系统能够持续改进。

这也是为什么真正的企业知识助手不能只关注“回答是否像人”。更加重要的是:**答案是否有证据、数据是否有权限、工具是否调用正确、操作是否可审计,以及整个任务是否真正完成。**如果把第 6~14 篇连起来看,会得到一条非常清晰的技术路线:**Context → Tool → Structured Output → RAG → Agent Loop → Framework → State → Memory → Enterprise Knowledge Agent。**到这里,第三部分“第一个 Agent 应用”也基本完成了从基础组件到完整应用的闭环。

上一篇回顾:

【第三部分:第一个 Agent 应用】13. 为 Agent 增加记忆能力:不是记住一切,而是在需要时想起正确的信息 - 掘金

下一篇将进入第四部分Agentic 智能体设计模式:

为什么 Agent 也需要设计模式

因为当一个 Agent 已经能够检索知识、调用工具、维护状态并完成真实任务以后,接下来的问题就不再是**能不能做出来?**而是:**面对越来越复杂的任务,应该怎样组织 Agent 的推理、路由、并行、反思、规划和协作?**这也将从“Agent 应用开发”正式进入“Agentic 智能体设计模式”。