Skip to content

一句话定位

面向内部文档的检索增强问答系统:用户提问 → 向量检索 + 重排 → LLM 生成带引用的回答。

STAR

  • S(背景):内部文档散落在多个平台,查资料靠人工翻找,平均要 15 分钟
  • T(任务):做一个能引用原文的文档问答系统并在内部试用
  • A(行动):负责整体链路设计:解析 → 切分 → 向量化 → 检索 → 重排 → 生成 → 评测
  • R(结果):(示例数据)回答引用准确率 92%,平均响应 3s,试用 200 人

架构与关键决策

决策点选择为什么不选另一个
向量库Milvusfaiss 是库不是服务,多副本/标量过滤要自己造;数据量千万级以下,Milvus 够用且运维简单
切分结构感知 + 父子块纯固定大小切分会切碎表格和标题层级(详见八股 chunk 策略
编排自研(约 500 行)LangChain 抽象太厚,排障要看源码;我们的链路简单且要深度定制重排
重排bge-reranker纯向量召回 top10 直接生成时,引用错误率明显偏高

可被追问的点清单

  • 为什么还要重排?向量检索不行吗? → 向量召回是「语义近似」,rerank 是精排;top50 → top5 后幻觉明显下降(有离线 hit rate 数据支撑)
  • 幻觉怎么缓解? → prompt 强制「仅依据引用回答」+ 无检索命中时拒答 + 引用回链到原文块
  • 评测怎么做的? → 离线:标注 200 条 QA 对,看 hit rate@5 / MRR;在线:用户点踩率
  • 多轮对话的指代怎么处理? → 会话内先做 query 改写(把「它」替换成实体)再检索
  • 成本怎么样? → 索引一次性 embedding 成本 + 每次 query 一次 embedding + LLM tokens,要能报出量级

数据与成果

(示例)索引文档 1.2 万篇、日均 300 次问答、点踩率 4%。

本站仅供个人学习使用,请勿外传