进阶第 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.mdpackages/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 生产链路。
- 能设计来源展示。
- 能处理无来源和低置信度。