前端 + AI 学习记录(Day 21–30):RAG 进阶 / 安全 / 前端基础设施

前端 + AI 学习记录(Day 21–30):RAG 进阶 / 安全 / 前端基础设施

这一篇是第三阶段总结,覆盖 Day 21–30:重点是 RAG 质量、AI 安全性、和前端通用基础设施。跟前两阶段比,这一段更偏“把东西做稳、做好用”。


一、阶段目标:从“能跑”到“敢用”

这 10 天我给自己的目标是:

  • 让 RAG 更稳、更准、更可控(减少答非所问和胡说八道)
  • 让前端聊天体验更接近产品级:流式、滚动、错误态、历史会话
  • 在前端侧沉淀出一套 可复用的 hooks/组件/工具,以后新项目直接拿来用

二、Day 21–24:RAG 质量 & 可评估性

1. LCEL & 结构化输出(Day 21)

  • 把 LangChain 的 LCEL(LangChain Expression Language)搞明白了:

    一切都是 Runnable,可以用 .pipe() 像流水线一样拼起来。

  • 典型链路写法从:

// 之前:手写一堆 await
const text = await prompt.format(values)
const res = await llm.call(text)
const parsed = JSON.parse(res)

变成:

// 现在:RunnableSequence
const chain = RunnableSequence.from([
  prompt,   // PromptTemplate
  llm,      // ChatOpenAI
  parser    // StructuredOutputParser.fromZodSchema(...)
])

const result = await chain.invoke({ question })
  • 同时学会了用 zod 做结构化输出(避免到处手写 JSON.parse):
const schema = z.object({
  title: z.string(),
  score: z.number().min(0).max(10),
  reasons: z.array(z.string())
})

2. RAG 检索优化(Day 22)

这一天主要是把“检索层”的优化点都过了一遍:

  • Chunk 策略

    • 一般 QA:400~600 tokens + 一点 overlap 会比较折中
    • 技术/规范文档:尽量按段落/小节切,而不是纯按字数
  • 上下文压缩(Contextual Compression):

    • 粗检索 TopK → 再用 LLM 或规则“截取”与 query 强相关的句子
    • 目的:减少废话,帮生成阶段减负
  • Multi-Vector & Hybrid

    • 一个文档多个向量(标题/摘要/关键句);
    • 向量相似度 + 关键词命中(BM25)一起算分 → 排序时更稳。

3. 约束式回答 & 引用标注(Day 23)

  • Prompt 级别的约束:

    • 「只允许基于提供的上下文回答,如果没有信息,就明确说‘文档中没有相关信息’」
    • 「不要使用外部知识,不要编造具体数据/时间/数字」
  • 引用标注思路:

    • 检索到的文档前加编号 [1],[2],[3],传给 LLM;
    • 要求回答中在相关句子后加 [n]
    • 响应 meta 里带上 citation 信息,前端可以做“基于哪个片段”的提示。
  • 自检链(Self-Check):

    • question + answer + context 再丢给一个评估链,让 LLM 判断:
      • 是否严格基于 context?
      • 是否有明显幻觉?
    • 前端可以用 isSafe 标记高亮,告诉用户“这条回答有点不确定”。

4. RAG 评估 & Benchmark(Day 24)

  • 建了一份小型 基准集
    • 真实/常见问题 + 期望的关键点(key_points[]
  • 写了一个简单评估脚本(最初可以只是后端 or Node 脚本):
    • 遍历样本 → 调当前 RAG → 检查 answer 是否包含 key_points 中的大部分 → 算命中率;
    • 或者用 LLM 打分:0~10 + 评语。

意义在于:后面每次你改检索、Prompt、模型,都可以 跑一轮评估,防回归,而不是靠“感觉”。


三、Day 25–27:前端聊天体验 & 安全设计

1. 前端聊天 UX(Day 25)

重点梳理了一个聊天页“该有的样子”:

  • 信息架构

    • 顶部(Header):标题、功能入口、模式说明
    • 中部:消息列表(支持流式、时间、操作按钮)
    • 底部:输入区(Enter 发送 / Shift+Enter 换行)
    • 侧边/弹层:历史会话列表(标题 + 摘要 + 时间)
  • 体验细节

    • 流式输出时的自动滚动(尊重用户上滑行为)
    • 错误态分种类(网络/超时/服务/权限)+ 明确文案
    • “新对话/清空”时重置状态,别让用户搞不清上下文从哪儿开始
    • 快捷问题/模板作为引导,而不是空白一片

2. 安全 & 权限(Day 26)

从实际业务角度过了一遍安全问题:

  • Prompt 注入

    • 文档中可能埋“请忽略上面所有指令”等恶意内容;
    • System Prompt 里要明确:
      • 用户输入和文档内容都是“不可信”的,不能修改系统规则。
  • 多租户/权限

    • 文档向量库里要有 tenantId / userId / dept / visibility 等元数据;
    • 检索前先按权限过滤,再做相似度搜索。
  • 输入输出检查

    • 过滤/限制超长输入(避免 DoS)
    • 输出经过 Markdown 渲染 + XSS 防护(你项目里用 marked + innerHTML 就需要格外注意这一点)。
  • 日志脱敏

    • 在日志里避免直接存手机号/身份证/密码/token;
    • 落盘前用正则 mask 关键信息。

3. Function Calling 设计最佳实践(Day 27)

  • 函数/工具 Schema 设计要点:

    • 单一职责、清晰描述,参数尽可能简单扁平;
    • 返回值是结构化“事实数据”,自然语言解释交给 LLM。
  • 两阶段调用:

    1. LLM 只决定「用哪个工具 + 参数是什么」;
    2. 后端收到 function_call,再做权限/风控/日志 + 实际执行。

这样可以在中间多一层 安全挡板,防止 LLM 直接发出危险操作。


四、Day 28–30:文档 / 报表 / 前端基础设施

1. 文档流水线(Day 28)

  • 从“原始文件”到“可检索文档”的完整流程:
    • 解析:PDF/Word/Markdown → 抽文本 + 保留结构;
    • 清洗:去页眉页脚/广告/重复空行等;
    • 切片:根据段落 + token 长度切 chunk;
    • 打标签:为每个 chunk 加 docId / section / tags / owner / source
    • 入库:写入向量库 + 关系型 DB/搜索引擎里的 meta。

这一整条 pipeline 是 RAG 的地基。

2. 结构化数据 / 报表问答语义层(Day 29)

  • 对电商 Demo 归纳了一个指标语义层:

    • Metric:gmv / total_orders / conversion_rate
    • Dimension:date / category / channel / region
    • Filter:date_range / category='手机' / channel='App'
  • 设计“自然语言 → 查询意图 JSON”的结构,例如:

{
  "metric": "gmv",
  "dimensions": ["category"],
  "filters": { "date_range": "last_7_days" },
  "orderBy": { "field": "gmv", "direction": "desc" },
  "topN": 5
}

这个 JSON 就是你后端做安全 NL2SQL 的关键中间表示。

3. 前端 AI 基础设施(Day 30)

  • 抽象了一套前端通用能力:

    • useChat / useStreamingChat / useSSE
    • aiClient(统一的 chat / streamChat 接口)
    • 通用 Message 模型(role/content/meta/timestamp)
    • 聊天 UI 组件(消息列表 + 输入框 + 状态/错误)
  • 目标:以后做任何新场景(客服 / 代码助手 / 报表 QA),前端只需要换:

    • Prompt 模板;
    • 后端具体路径;
    • 少量 UI 文案和样式。

五、这一阶段对我的几点“思维升级”

  1. RAG 不只是“加个向量库”

    • 质量主要来自:检索策略 + Prompt 设计 + 回答约束 + 评估机制
  2. 安全性和工程化必须前置考虑

    • Prompt 注入、多租户、日志脱敏、错误分级,如果后一拍脑袋补,会非常痛苦。
  3. 前端可以成为 AI 应用的“控制台”

    • 调试面板、Prompt 实验台、Agent Trace、知识中心,其实都是前端价值最大的部分。
posted @ 2025-12-17 15:01  XiaoZhengTou  阅读(0)  评论(0)    收藏  举报