Appearance
课 3 · 项目答辩材料
本课目标
把进阶项目整理成可以在面试中使用的答辩材料:30 秒项目介绍、架构图讲解脚本、Bad Case 复盘稿。
这节课没有代码,只有"如何把做过的事情讲清楚"。
30 秒项目介绍
面试开场,面试官说"先介绍一下你的项目",用 30 秒说清楚:
我做的是一个企业知识库问答平台,叫 AI KnowledgeOps Agent。
它的核心能力是:上传内部文档后,用户可以用自然语言提问,系统用混合检索(向量检索 + Elasticsearch 全文检索)找到相关内容,再用 LLM 生成带引用来源的答案。
和普通 RAG Demo 不同的地方是:文档导入异步处理(BullMQ + Redis),有完整的评测体系(Hit Rate、Faithfulness、Bad Case 分析),实现了最小 StateGraph 来演示 LangGraph 原理,还支持实体关系图谱检索(Graph RAG)。
技术栈是 TypeScript + Hono API + React 前端 + Redis + Elasticsearch + Neo4j,本地用 Docker Compose 一键启动。
架构图讲解脚本(3 分钟版)
用户
│
▼
apps/web(React 前端)
│ HTTP + SSE
▼
apps/api(Hono API)
│
├── 问答请求 ─────────────────────────────────────────┐
│ │
│ packages/agent-runtime(StateGraph) │
│ └── Router Node │
│ ├── Retrieve Node │
│ │ ├── packages/rag-core │
│ │ │ ├── 向量检索(sqlite-vec) │
│ │ │ ├── 关键词检索(Elasticsearch) │
│ │ │ ├── RRF 融合 │
│ │ │ └── Rerank │
│ │ └── Graph RAG(Neo4j)[可选] │
│ └── Generate Node(LLM + 引用) │
│ ◄┘
│
└── 文档上传 ──> 任务创建 ──> Redis BullMQ ──> apps/worker
│
解析/切块/Embed/索引讲解要点(按模块顺序展开):
- 前端 → API:前端用 SSE 消费流式答案,API 层负责路由和校验(模块 1)
- 文档导入:上传即返回任务 ID,Worker 异步处理(模块 2)
- Redis 的作用:会话缓存、问答缓存、限流、BullMQ 队列(模块 3)
- 混合检索:向量 + ES + RRF 融合,比单路检索召回率更高(模块 4)
- 评测体系:有标注评测集,能量化 Recall@5 和 Faithfulness(模块 5)
- StateGraph:解释 LangGraph 原理,State/Node/Edge/Reducer(模块 6)
- Graph RAG:针对关系推理场景的补充检索能力(模块 7)
- 部署和观测:Docker Compose 一键部署,有 Trace 和成本统计(模块 8)
Bad Case 复盘稿(10 分钟版)
面试官问"介绍一个你遇到的问题,你怎么解决的"——这是最好的 Bad Case 复盘机会:
问题描述
我们的知识库里有一批技术规范文档,用户提问"RFC-2119 里的 MUST 和 SHALL 有区别吗?",系统返回了一个听起来合理但完全是编造的答案。
定位过程
- 用 Trace ID 找到这个请求的完整日志
- 看检索结果:Top-5 没有一个是 RFC-2119 相关的文档
- 判断根因:这是召回失败(Retrieval Failure),不是幻觉——文档里有答案,但没被检索到
- 深挖:RFC-2119 是专有名词,Embedding 模型对这类缩写词的向量表示质量差
解决方案
- 引入 Elasticsearch 全文检索,专有名词用 BM25 关键词检索更可靠
- 用 RRF 融合两路结果后,这类问题的 Hit Rate 从 52% 提升到 78%
- 把这类"专有名词查询"加入回归测试,防止未来退化
结论
通过这个 Bad Case,建立了"先看是召回问题还是生成问题"的排查思路,以及评测集 → 定位 → 改进 → 回归的完整闭环。
简历项目描述
AI KnowledgeOps Agent — 企业知识库问答与质量评测平台
技术栈:TypeScript, Hono, React, Redis, Elasticsearch, Neo4j, Docker
核心能力:
• 设计异步文档处理流水线(BullMQ + Redis),解决大文件导入阻塞请求的问题
• 实现混合检索(向量检索 + BM25 + RRF 融合),Recall@5 较纯向量检索提升 26%
• 建立 RAG 质量评测体系(Hit Rate、Faithfulness、Bad Case 分析),可量化准确率
• 从零实现最小 StateGraph,解释 LangGraph 的 State/Node/Edge/Reducer 原理
• 接入 Graph RAG(Neo4j 图谱),支持实体关系多跳推理场景
• 完整 Docker Compose 部署,含 Trace 追踪和 LLM 成本统计常见面试追问与回答框架
| 问题 | 回答策略 |
|---|---|
| LangGraph 的实现原理 | StateGraph = while 循环 + Reducer + Checkpoint,展开讲三个核心概念 |
| 问答机器人准确率如何保证 | 分两层:检索准确率(Recall@K)+ 答案准确率(Faithfulness),用评测集量化 |
| 如何解决幻觉问题 | 引用约束 + 拒答策略 + 答案后校验(从 prompt 到检索到后处理三层) |
| Graph RAG 适合什么场景 | 多跳关系推理,举具体例子,同时说清楚什么场景不适合 |
| Redis 用来做什么 | 四个角色:会话缓存、问答缓存、限流、任务队列,每个用一句话解释 |
| 线上出问题怎么排查 | Trace ID → 定位阶段 → 看输入输出 → 对比评测集 → 找变更记录 |
本节产物
docs/interview/
project-pitch.md # 项目介绍稿(多个版本)
architecture-script.md # 架构图讲解脚本
bad-case-story.md # Bad Case 复盘稿
faq.md # 常见面试题回答面试追问
你的项目你负责了什么?
这是针对"团队项目"的追问,独立项目不存在这个问题。但面试官有时用这个问题测试你对项目的深入程度。标准回答框架:说你设计的关键决策(选了什么,为什么),说你解决的最难的技术问题,说你从中学到了什么。细节越具体,可信度越高。
3 分钟讲清楚项目架构?
用一个简单口诀:入口 → 核心流程 → 每个模块负责什么。不要从头讲所有技术选型,先画出最关键的数据流(用户问问题 → 检索 → 生成 → 返回),然后逐层展开。面试官会打断你问他感兴趣的部分。