工程化、评估与场景设计
一、工程化与最佳实践
Q1: 从零构建一个AI应用的完整流程
┌──────────────────────────────────────────────────────────────┐
│ AI应用工程化完整流程 │
├──────────────────────────────────────────────────────────────┤
│ │
│ Phase 1: 需求与设计(1-2周) │
│ ├── 明确业务场景与目标指标 │
│ │ · 我们要解决什么问题? │
│ │ · 成功的衡量标准是什么?(准确率/满意度/成本) │
│ │ · 人工处理的基线水平是多少? │
│ │ │
│ ├── 评估技术可行性 │
│ │ · 纯Prompt工程能否解决? │
│ │ · 是否需要RAG?需要哪些知识库? │
│ │ · 是否需要Agent/工具调用? │
│ │ · 是否需要微调?(通常不需要,除非有严格格式/风格要求) │
│ │ │
│ └── 技术选型决策 │
│ │
│ Phase 2: MVP与快速验证(2-4周) │
│ ├── 构建最小可用原型 │
│ ├── 准备100条测试用例 │
│ ├── 收集反馈,识别痛点 │
│ └── 判断是否需要深入优化 │
│ │
│ Phase 3: 系统优化(2-4周) │
│ ├── Prompt优化(迭代至少3-5轮) │
│ ├── RAG优化(切分策略、混合检索、重排序) │
│ ├── 知识库完善(数据清洗、结构化) │
│ ├── 缓存与性能优化 │
│ └── 边界case处理 │
│ │
│ Phase 4: 生产部署(1-2周) │
│ ├── 部署与监控配置 │
│ ├── A/B测试框架 │
│ ├── 告警与降级方案设计 │
│ ├── 灰度上线(1% → 10% → 50% → 100%) │
│ └── 成本预算与控制 │
│ │
│ Phase 5: 持续迭代(持续进行) │
│ ├── 用户反馈收集与分析 │
│ ├── 失败案例归因 │
│ ├── 知识库更新与维护 │
│ ├── 定期重训/更新Prompt │
│ └── 指标监控与ROI分析 │
│ │
└──────────────────────────────────────────────────────────────┘Q2: AI系统的架构设计(RAG应用为例)
┌──────────────────────────────────────────────────────────────┐
│ 生产级RAG系统架构 │
├──────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 接入层 │ │
│ │ · REST API / WebSocket │ │
│ │ · 认证鉴权(API Key / JWT) │ │
│ │ · 限流与配额管理(防止滥用) │ │
│ │ · 负载均衡(多实例部署) │ │
│ └────────────┬──────────────────────────────────────────┘ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 业务逻辑层 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 查询改写 │→│ 混合检索 │→│ 答案生成 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ · Prompt模板管理 │ │
│ │ · 工具调用编排(Agent模式) │ │
│ │ · 答案后处理(格式、引用、敏感词过滤) │ │
│ └────────────┬──────────────────────────────────────────┘ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 数据层 │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │ │
│ │ │ 向量数据库 │ │ 关键词索引 │ │ 知识库文档 │ │ │
│ │ │ (Milvus等) │ │ (Elasticsearch) │ (S3/OSS) │ │ │
│ │ └──────────────┘ └──────────────┘ └────────────┘ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Embedding │ │ LLM推理服务 │ │ │
│ │ │ 服务 │ │ (vLLM/OpenAI)│ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └────────────┬──────────────────────────────────────────┘ │
│ ↓ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 监控与日志层 │ │
│ │ · 请求日志(脱敏后存储) │ │
│ │ · 性能指标(延迟/Token消耗/成本) │ │
│ │ · 质量指标(满意度/准确率/引用率) │ │
│ │ · 告警(异常检测、成本突增) │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘二、AI系统评估方法
Q3: 如何评估一个RAG系统的质量?
评估维度与方法:
┌────────────────────────────────────────────────────────────┐
│ 1. 检索质量评估 │
├────────────────────────────────────────────────────────────┤
│ Precision@K (P@K) │
│ 含义:检索到的Top-K文档中有多少是相关的 │
│ 公式:相关文档数 / K │
│ 目标:P@5 > 0.8(80%的检索结果是相关的) │
│ │
│ Recall@K (R@K) │
│ 含义:所有相关文档中有多少被检索到了Top-K │
│ 公式:检索到的相关文档数 / 总相关文档数 │
│ 目标:R@5 > 0.9 │
│ │
│ NDCG@K │
│ 含义:考虑排序位置的加权评分(排在前面的相关性更重要) │
│ 目标:NDCG@5 > 0.85 │
│ │
│ 人工评估(黄金标准) │
│ 抽样100+真实查询,由人工标注每个返回文档的相关性 │
│ 评分:0分(完全不相关)→ 1分(部分相关)→ 2分(高度相关)│
│ │
└────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────┐
│ 2. 回答质量评估 │
├────────────────────────────────────────────────────────────┤
│ Faithfulness(忠实度/事实正确性) │
│ · 答案中的每个陈述是否都能在检索到的文档中找到依据 │
│ · 可以用LLM-as-a-Judge自动评测(让更强的模型打分) │
│ · 目标:> 90% │
│ │
│ Answer Relevance(回答相关性) │
│ · 答案是否直接回答了用户的问题 │
│ · 避免答非所问、回避问题 │
│ · 可以用LLM自动评分(1-5分) │
│ │
│ 引用覆盖率(Source Coverage) │
│ · 答案中引用了多少检索到的文档 │
│ · 避免模型用自己的"知识"回答而不是用文档 │
│ │
│ 人工满意度 │
│ · 用户点赞/点踩(👍/👎) │
│ · 收集"不满意"的案例,做归因分析 │
│ · 目标:满意度 > 80% │
│ │
└────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────┐
│ 3. 性能与成本评估 │
├────────────────────────────────────────────────────────────┤
│ 延迟指标 │
│ · P50 / P95 / P99 响应时间 │
│ · 首token延迟(Streaming模式) │
│ · 目标:P99 < 5秒(简单查询)/ < 15秒(复杂查询) │
│ │
│ Token成本 │
│ · 平均每次调用消耗多少Token? │
│ · Token消耗与回答质量的平衡 │
│ · 监控:每日/每周Token消耗趋势 │
│ │
│ 吞吐量 │
│ · QPS(每秒查询数) │
│ · 并发处理能力 │
│ · 系统饱和度 │
│ │
└────────────────────────────────────────────────────────────┘Q4: LLM-as-a-Judge(用大模型评测大模型)
用更强的LLM(如GPT-4)自动评测答案质量
评测Prompt示例:
"你是一个严格的评审员,请基于以下标准评估AI助手的回答:
标准1: 正确性(0-5分)
- 答案是否准确,有没有事实错误?
- 关键信息是否完整?
标准2: 相关性(0-5分)
- 是否直接回答了用户的问题?
- 有没有答非所问?
标准3: 引用可信度(0-5分)
- 答案是否基于提供的参考文档?
- 是否有幻觉(编造文档中没有的信息)?
标准4: 表达清晰度(0-5分)
- 语言是否流畅、逻辑是否清晰?
- 格式是否易读?
用户问题: {query}
参考文档: {context}
AI回答: {answer}
请输出JSON格式:
{
"correctness": <0-5>,
"relevance": <0-5>,
"faithfulness": <0-5>,
"clarity": <0-5>,
"total_score": <总分>,
"issues": ["问题1", "问题2", ...]
}"Q5: 构建评测数据集的方法
黄金评测集构建方法:
Step 1: 收集真实用户查询
· 从产品日志中筛选有代表性的100-300条查询
· 按问题类型分类(事实类/操作类/对比类/开放类)
· 补充边界case(超长、模糊、多语言、敏感词)
Step 2: 准备标准答案/参考文档
· 每个问题标注"黄金文档"(应该检索到哪些文档)
· 编写高质量参考答案
· 由2人独立标注,不一致时讨论解决
Step 3: 自动化评测脚本
· 每次代码更新后,自动跑完整评测集
· 对比基线版本,确保没有退化(Regression Test)
· 记录关键指标变化趋势
Step 4: 持续维护
· 每月补充新的失败案例到评测集
· 定期更新答案标准(随着产品需求变化)
· 淘汰过时案例
提示:评测集规模
· 初期:50-100条(快速验证)
· 中期:200-500条(较为稳定地衡量质量)
· 成熟期:1000+条(稳定监控,支持A/B测试统计显著)三、场景设计题(System Design)
Q6: 设计一个企业级智能客服系统
需求场景:
- 大型企业,客服部门500人,日均咨询10万次
- 咨询内容:产品使用、账户问题、售后服务、技术支持等
- 知识库:现有2万+篇帮助文档,每年新增约3000篇
- 目标:AI客服能解决60%常见问题,复杂问题转人工
设计方案:
┌──────────────────────────────────────────────────────────────┐
│ 企业级智能客服系统设计 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. 整体架构(5层) │
│ │
│ 用户层 → 接入层 → 路由层 → 处理层 → 资源层 │
│ │
│ 用户层 │
│ ├── Web聊天组件 │
│ ├── App SDK │
│ ├── 工单系统(人工介入时自动创建工单) │
│ └── 反馈收集(👍/👎 + 文本反馈) │
│ │
│ 接入层 │
│ ├── API Gateway(鉴权/限流/日志) │
│ ├── 会话管理(Context存储、历史记录) │
│ └── 负载均衡 + 多可用区部署 │
│ │
│ 路由层(关键,决定"能否回答"的第一道关卡) │
│ ├── 意图识别(Intent Classification) │
│ │ ├── 产品咨询类 → RAG问答 │
│ │ ├── 账户问题类 → 工单系统API + RAG │
│ │ ├── 技术支持类 → 知识库搜索 + Code Interpreter │
│ │ ├── 投诉/建议类 → 情感分析 + 转人工优先 │
│ │ └── 闲聊/寒暄类 → 轻量回答(不经过RAG,节省成本) │
│ │ │
│ └── 复杂度判断 │
│ ├── 简单问题:直接回答(<2轮对话) │
│ ├── 复杂问题:多轮澄清 + 搜索 + 总结 │
│ └── 不确定问题:给出参考+引导转人工 │
│ │
│ 处理层(核心) │
│ ├── RAG问答引擎 │
│ │ · 多知识库检索(帮助文档/FAQ/工单历史/产品文档) │
│ │ · 混合检索(向量 + 关键词 + 标签过滤) │
│ │ · 答案融合 + 引用标注 │
│ │ └── Prompt工程(不同场景不同模板) │
│ │ │
│ ├── 对话管理(Agent模式) │
│ │ · 对话状态追踪 │
│ │ · 槽位填充(收集必要信息:订单号、产品型号) │
│ │ · 澄清反问(问题不明确时反问用户) │
│ │ └── 多轮上下文理解(避免重复问题) │
│ │ │
│ └── 工具调用 │
│ ├── 查询订单状态(订单系统API) │
│ ├── 创建工单(客服工单系统) │
│ ├── 推送产品文档(文档系统) │
│ └── 敏感信息验证(如修改手机号需要二次验证) │
│ │
│ 资源层 │
│ ├── 向量数据库:Milvus(存储文档向量) │
│ ├── 传统数据库:PostgreSQL/MongoDB(用户信息/会话日志) │
│ ├── 缓存:Redis(Embedding缓存/热门问答缓存) │
│ ├── 对象存储:OSS/S3(原始文档) │
│ └── LLM服务:自研(vLLM)/ 商用API(有降级策略) │
│ │
│ │
│ 2. 关键设计决策 │
│ │
│ (1) 知识库组织 │
│ ├── 按产品/主题分库分表,独立检索 │
│ ├── 元数据:产品版本、更新时间、阅读量、有效性标记 │
│ └── 过期文档自动归档(避免用旧版本文档回答) │
│ │
│ (2) 转人工时机与策略 │
│ ├── 用户明确说"要人工" │
│ ├── 连续2轮无法提供满意答案(基于用户点踩) │
│ ├── 检测到负面情绪(愤怒/投诉) │
│ ├── 涉及金钱/账户安全的敏感操作 │
│ └── 超过最大对话轮次(如5轮)仍未解决 │
│ │
│ (3) 风控与安全 │
│ ├── 敏感词过滤(输入+输出) │
│ ├── 话题边界控制(如拒绝回答竞品对比、政治相关问题) │
│ ├── PII(个人身份信息)检测与脱敏 │
│ └── LLM输出审核(检查幻觉/不当内容) │
│ │
│ 3. 监控与优化闭环 │
│ │
│ 用户对话 → 记录全量日志 → 人工抽检失败案例 → │
│ ↓ │
│ 更新Prompt/知识库 ← 分析归因(检索问题/LLM问题/数据问题) │
│ │
│ 关键指标: │
│ · 自动化解决率(目标60%+) │
│ · 用户满意度(目标>4.2/5) │
│ · 平均响应时间 │
│ · 转人工率(越低越好,但不能牺牲质量) │
│ · 人均成本(对比全人工客服) │
│ │
└──────────────────────────────────────────────────────────────┘Q7: 设计一个代码助手系统
需求场景:企业内部IDE插件,帮助开发者:
- 代码补全与生成
- Code Review建议
- 代码解释(理解陌生代码库)
- 单元测试生成
- Bug排查建议
设计要点:
┌──────────────────────────────────────────────────────────────┐
│ 代码AI助手设计 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. 核心能力分层 │
│ │
│ (1) Line-level补全(实时,<200ms) │
│ ├── 小模型 + 本地缓存 │
│ ├── 基于当前文件上下文推理 │
│ └── 类似GitHub Copilot的体验 │
│ │
│ (2) Block-level生成(按需,1-3秒) │
│ ├── 生成函数/类/测试用例 │
│ ├── 需要更多代码库上下文 │
│ └── 用RAG检索相关代码作为reference │
│ │
│ (3) 指令式问答(用户提出需求,5-15秒) │
│ ├── "重构这个函数" / "添加错误处理" │
│ ├── 需要理解完整函数/文件上下文 │
│ ├── Agent模式:分析 → 规划 → 生成 → 审查 → 输出 │
│ │
│ 2. 上下文管理(最关键的设计决策) │
│ │
│ 问题:大模型上下文窗口有限(8K/32K tokens) │
│ 一个中型代码库可能有百万行代码,无法全部传给LLM │
│ │
│ 解决方案:分层上下文 + 按需检索 │
│ │
│ Local Context(LLM直接可见): │
│ ├── 当前打开的文件 │
│ ├── 当前光标位置的前后50行 │
│ ├── 相关文件(import的模块/被调用的函数) │
│ └── 最近编辑的2-3个文件 │
│ │
│ Retrieval Context(按需检索): │
│ ├── 当前函数/类的定义 │
│ ├── 相关API文档 │
│ ├── 代码库中相似的实现(提供参考模式) │
│ ├── 团队编码规范/最佳实践 │
│ └── 项目README/架构文档 │
│ │
│ 3. 代码检索(Code RAG) │
│ │
│ 关键挑战: │
│ · 代码的结构化信息(函数、类、依赖)需要保留 │
│ · 简单按行切分会破坏代码结构 │
│ · 需要理解AST(抽象语法树) │
│ │
│ 解决方法: │
│ ├── 按函数/类切分(AST-based chunking) │
│ ├── 提取函数签名 + docstring + 关键代码作为检索单元 │
│ ├── 用Tree-Sitter解析多语言代码结构 │
│ └── 索引元数据:语言/文件路径/函数名/导入依赖 │
│ │
│ 4. 关键Prompt工程技巧 │
│ │
│ (1) Code Review Prompt │
│ "你是资深代码审查专家,请审查以下代码,关注: │
│ 1) 潜在Bug和逻辑错误(最高优先级) │
│ 2) 性能问题(时间/空间复杂度) │
│ 3) 代码风格与可读性 │
│ 4) 安全漏洞(如SQL注入、XSS、权限问题) │
│ 5) 缺少的边界case │
│ │
│ 请按重要性排序输出建议,每条建议提供:问题 → 原因 → 修改后代码"│
│ │
│ (2) 测试用例生成 Prompt │
│ "为以下函数生成全面的单元测试: │
│ 要求覆盖:正常流程 / 边界条件 / 异常输入 / 空值 / 并发场景│
│ │
│ 用 pytest + unittest.mock 编写,包含: │
│ · fixtures(准备测试数据) │
│ · 描述性的test_case名称 │
│ · 断言信息完整 │
│ · 注释说明测试意图 │
│ │
│ 5. 隐私与安全(企业内部代码的核心关切) │
│ │
│ · 禁止上传代码到外部LLM服务(除非有严格数据保护协议) │
│ · 优先选择私有化部署模型(如CodeLlama + vLLM) │
│ · 数据传输加密,日志脱敏(去除API密钥/密码等) │
│ · 审计日志:记录哪些代码被发送给了LLM │
│ · 禁止在prompt中包含敏感配置(数据库密码、内部token等) │
│ │
└──────────────────────────────────────────────────────────────┘Q8: 设计一个多模态知识库系统
需求:除了文本,还需要处理PDF、代码、图片、表格等多种格式
设计要点:
不同内容类型的处理策略:
1. 纯文本(.md/.txt)
· 直接按语义切分 → 向量库
2. PDF文档
· PDFMiner提取文本
· 按页+段落切分(保留页码元数据)
· 检测图片 → OCR提取
· 检测表格 → 结构化转成Markdown表格
3. 代码文件(.py/.js/.java等)
· Tree-Sitter解析AST
· 按函数/类切分
· 向量:用CodeBERT/code-embedding模型
· 元数据:文件名、函数签名、类名、import依赖
4. 表格数据(Excel/CSV)
· 转成JSON/Markdown格式
· 每行/每段生成一个向量
· 关键:保留表头信息(每个chunk都带上表头)
· 示例:"月份: 1月, 销售额: 100万, 同比: +15%"
5. 图片与图表
· 提取图片标题/说明文字(作为文本向量化)
· 用OCR提取图片中的文字
· 或用多模态Embedding模型(如CLIP/BLIP-2)
· 产品内优先用图生文,再对文本做向量化
混合搜索设计:
┌─────────────────────────────────────────────────┐
│ 用户查询 → [查询解析] │
│ │ │
│ ┌────────────┴────────────┐ │
│ ↓ ↓ │
│ 文本向量检索 元数据/标签检索 │
│ (Milvus) (Elasticsearch) │
│ │ │ │
│ └────────────┬────────────┘ │
│ ↓ │
│ RRF融合 + 重排序 │
│ ↓ │
│ LLM生成答案(带上引用来源) │
└─────────────────────────────────────────────────┘四、常见面试场景问答
Q9: 如何避免LLM产生幻觉?
工程化解决方案(从强到弱排序):
✦ 1. RAG + 引用检查(最有效)
├── 强制模型只基于检索到的文档回答
├── 答案中引用来源标注(方便用户核查)
├── 用LLM-as-a-Judge检查答案是否都能在文档中找到依据
└── 对没有引用的内容进行标记或删除
✦ 2. Prompt约束(简单有效)
├── "只基于参考资料回答,如果资料中没有明确信息,请说明'暂无相关信息'"
├── "禁止输出没有依据的推测内容"
├── "回答前先在参考资料中找到依据,用 [来源:x] 标注"
✦ 3. 限制回答空间
├── 让模型只做选择题/判断题(减少自由发挥空间)
├── 输出格式严格限制(JSON Schema、选项列表)
└── 多步推理:让模型先列证据,再给答案
✦ 4. 检索增强
├── 更多的相关文档 → 更少需要"猜测"
├── 增加检索top-K(从5个增加到10-20个)
├── 混合检索 + 重排序,确保召回质量
└── 多跳检索:根据第一轮结果生成新查询再检索
✦ 5. 自我验证
├── 让模型自己检查:"你的回答中每个陈述都能在参考文档中找到依据吗?"
├── 让模型给出"置信度"分数
└── 用不同的方式问同一个问题,检查答案一致性
✦ 6. 数据层面
├── 确保知识库完整性(覆盖率高、时效性好)
├── 定期更新知识库
└── 标注和优化:收集幻觉案例,用于改进Prompt和知识库
✦ 7. 模型选择
├── 更大的模型幻觉更少(GPT-4 < GPT-3.5 < Llama)
├── 经过RAG-finetune的模型表现更好
└── 调整temperature:降低温度(0-0.3),让模型更保守
实际项目中:通常组合使用1+2+3+5,可将幻觉率从20-30%降到5%以下Q10: 如何设计LLM系统的缓存策略?
缓存层级设计(从热到冷):
Layer 1: Query语义缓存(命中率约30-50%)
├── 把用户Query → Embedding → 用向量相似度找命中
├── 如果找到非常相似的历史查询,直接返回缓存答案
├── TTL: 1-7天(根据知识库更新频率)
└── 成本极低,提升体验显著
Layer 2: Embedding缓存(稳定的高命中率)
├── 文档向量化结果(文档不变,Embedding不变)
├── 常见Query向量化
└── 用Redis/Milvus持久化存储
Layer 3: 检索结果缓存(中等命中率)
├── Query → 检索Top-K文档列表
├── TTL: 几小时到1天
└── 适合知识库更新不频繁的场景
Layer 4: LLM输出缓存(高ROI,但风险大)
├── 仅缓存事实性问答(确定性答案,不缓存主观性问题)
├── 加版本号(知识库版本+Prompt版本)
├── 知识库更新后清理相关缓存
└── TTL: 7-30天
缓存失效策略:
· TTL到期(时间衰减)
· 知识库更新事件触发(主动失效)
· 用户点踩/不满意 → 从缓存中移除
· Prompt版本更新 → 全量失效
缓存监控:
· 命中率、平均节省时间/成本
· 缓存污染检测(缓存了错误答案)
· 热点Query识别Q11: 如何处理AI系统的成本控制?
成本构成(按占比排序):
1. LLM推理(占50-70%)
2. Embedding推理(占10-20%)
3. GPU/云服务器成本(占10-20%)
4. 向量数据库存储(占5-10%)
5. 人力/运维
优化手段:
✦ LLM成本优化
· 选合适大小的模型:简单任务用gpt-3.5-turbo/本地小模型,
复杂任务才用GPT-4
· 缓存(参见Q10)
· 严格控制max_tokens(避免生成过长回答)
· 混合策略:先用小模型尝试,不行再升级到大模型
· 批量处理:将多个简单请求合并为一个
✦ Embedding成本优化
· 用轻量模型(如BGE-small替代text-embedding-3-large)
· 缓存(大多数文档只需要向量化一次)
· 批处理(一次调用处理多个文本)
· 离线构建:冷数据用便宜的CPU批量向量化
✦ 工程化成本优化
· 合理设置超时(避免"卡住"的请求持续消耗资源)
· 监控异常请求模式(如某用户/IP频繁调用 → 限流)
· 定期清理不活跃数据(降低向量库压力)
· 混合部署:高频简单请求用本地小模型,低频复杂请求用云API
✦ 成本监控与告警
· 每日/每小时Token消耗报表
· 设置预算阈值(超过X美元/天告警)
· 异常检测:突然成本飙升可能是bug
· 按业务来源分析:哪些入口消耗最高?是否值得?Q12: 如何做一个可维护的Prompt工程体系?
生产级Prompt管理最佳实践:
1. Prompt版本化
· 像代码一样管理Prompt(Git管理)
· 每个变更都有commit message
· 每次变更后在评测集上跑回归测试
· 支持快速回滚("这个版本效果变差了,回到上一版本")
2. Prompt模板化
· 抽取公共部分(角色定义、格式要求)
· 按场景组织:qa_prompt / code_review_prompt / summarize_prompt
· 支持配置化:不同场景用不同模板 + 动态注入变量
3. A/B测试框架
· 新Prompt先对10%用户生效
· 对比实验组 vs 对照组的关键指标(满意度/准确率)
· 统计显著后全量推广
· 保留优秀的Prompt版本,淘汰效果差的
4. 评测与回归
· 维护一个"金标准"评测集(100-1000条)
· 每次Prompt变更都跑这个评测集
· 记录历史分数趋势(确保不会"优化"反而变差)
· 收集用户不满意的case加入评测集 → 驱动下一轮优化
5. Prompt元数据管理
· 每个Prompt都有:版本号、更新时间、预期效果、
关联的评测集、负责的工程师
· 定期检查:是否有不再使用的Prompt?是否过期?
6. 应急方案
· 关键场景有降级Prompt(简化版,更保守)
· 线上出问题:一键回退到已知稳定版本 + 人工兜底
· 定期演练"Prompt事故响应流程"
7. Prompt安全
· 检测Prompt注入(用户尝试让模型忽略系统指令)
· 禁止输出系统指令/提示词
· 检测越权(绕过系统限制的用户输入)五、系统设计核心原则总结
┌─────────────────────────────────────────────────────────────┐
│ AI应用设计的10条原则 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 简单优先原则 │
│ 先实现最简单可工作的版本,再逐步优化 │
│ 能用Prompt解决的就不用RAG,能用RAG解决的就不用微调 │
│ │
│ 2. 评估驱动开发 │
│ 先建立评估指标和评测集,再开始优化 │
│ 没有评估的优化是赌博 │
│ │
│ 3. 错误是设计出来的,不是调试出来的 │
│ 设计时就考虑:系统可能怎么失败?降级方案是什么? │
│ │
│ 4. 可观测性优先 │
│ 从Day 1开始就要有日志、监控、告警 │
│ 如果你看不到它如何工作,你也无法改进它 │
│ │
│ 5. 不要试图让LLM做一切 │
│ 把确定性逻辑用传统代码实现(公式计算、条件判断、正则)│
│ 只把真正需要语义理解的部分交给LLM │
│ │
│ 6. 知识是产品的核心资产 │
│ 对于RAG应用,知识库的质量 > 模型大小/架构设计 │
│ 数据清洗、去重、时效性维护值得投入80%的精力 │
│ │
│ 7. Prompt是代码 │
│ 需要版本控制、Code Review、测试、回归、文档 │
│ │
│ 8. 成本从第一天开始考虑 │
│ 设计时就要考虑Token成本与扩展性 │
│ 100 QPS时还省钱的系统,1000 QPS时才不会崩 │
│ │
│ 9. 用户反馈是优化引擎 │
│ 建立从"用户不满意"到"系统改进"的闭环 │
│ 1个失败案例的价值 > 100个成功案例的价值 │
│ │
│ 10. 安全不是可选项 │
│ 隐私保护、内容合规、反滥用、审计追踪是核心功能 │
│ 不是后期再打补丁 │
│ │
└─────────────────────────────────────────────────────────────┘场景设计高频问题速查
| 问题 | 关键设计思路 |
|---|---|
| 如何避免LLM幻觉? | RAG+引用标注、Prompt约束、自我验证、降低temperature |
| 如何做成本控制? | 模型分层(简单任务小模型)、缓存、设置预算告警 |
| 如何评估RAG效果? | 检索指标(P@K/Recall@K) + 答案质量(LLM-as-a-Judge/人工评测) |
| 知识库如何维护? | 按主题分区、元数据管理、定期清理过期、版本追踪 |
| 如何做Prompt工程体系? | 版本化、模板化、A/B测试、评测集、可回滚 |
| 多模态数据如何处理? | 不同类型用不同切分策略/Embedding模型,统一向量库 |
| 如何做系统可观测性? | 全链路日志、指标监控、异常告警、用户反馈闭环 |
| 系统设计中什么最重要? | 评估体系 + 知识库质量 + Prompt工程 + 可观测性 + 安全合规 |