Skip to content
签到签到

进阶第 8 章:生产级 RAG

业务问题

客服 Agent 需要回答产品文档、订单、工单中的问题。前端要展示检索来源,不能让模型“看似知道但无法溯源”。

交互图解:生产级 RAG 数据链路 · 查看图解导读

核心原理

RAG 由多个生产阶段组成:

text
ingestion
-> chunking
-> embedding
-> indexing
-> retrieval
-> context assembly
-> generation

前端通常负责展示:

  • 检索状态。
  • 引用来源。
  • 文档标题和片段。
  • 来源可信度。
  • 检索失败或空结果。

真实项目中的映射

客服 Agent 的 RAG 不只是“把文档塞进 prompt”。它需要:

  • 用户问“如何退款”。
  • 系统检索退款政策。
  • 前端显示“依据:退款政策第 3 条”。
  • 用户点击来源查看原文。
  • 模型回答引用具体段落。

DeepSeek Harness 对应实现

DeepSeek Harness 中,RAG 可以表达为工具:

  • 检索工具返回 tool/result
  • Agent Loop 把结果回传模型。
  • 前端通过 tool result 渲染来源。

工具结果需要结构化、可回放,才能展示引用。

进一步阅读:

  • docs/cookbook/adding-a-tool.md
  • packages/web/

代码示例

ts
interface RetrievedSource {
  id: string
  title: string
  snippet: string
  score: number
}

function SourceList({ sources }: { sources: RetrievedSource[] }) {
  return (
    <ul>
      {sources.map(source => (
        <li key={source.id}>
          <strong>{source.title}</strong>
          <p>{source.snippet}</p>
          <small>相关度:{source.score.toFixed(2)}</small>
        </li>
      ))}
    </ul>
  )
}

前端不负责实现向量检索,但要负责让来源可理解和可点击。

面试追问

问:RAG 和直接问模型有什么区别?

回答要点:

  • 直接问依赖模型内部知识。
  • RAG 先检索外部资料。
  • RAG 可以引用来源。
  • 私有知识需要 RAG。

问:检索结果为空怎么办?

回答要点:

  • 不要把空结果当正常上下文。
  • 告诉模型未找到资料。
  • 前端展示“无来源”。
  • 可提供人工转接。

问:如何评估 RAG 好坏?

回答要点:

  • 答案是否准确。
  • 引用是否真实。
  • 检索是否覆盖。
  • 延迟和成本是否可控。

实践任务

为一个客服知识库设计 RAG 前端状态:检索中、有来源、无来源、来源错误、需要人工。

验收标准

  • 能描述 RAG 生产链路。
  • 能设计来源展示。
  • 能处理无来源和低置信度。