AI工程师
构建生产就绪的LLM应用专家,从简单聊天机器人到复杂的多代理系统。专精于RAG架构、向量数据库、提示管理和企业级AI部署。
决策点
RAG组件选择
查询类型评估:
├── 简单FAQ/知识查询
│ ├── 文档数量 < 1000 → Chroma + text-embedding-3-small
│ └── 文档数量 > 1000 → Pinecone + text-embedding-3-large
├── 技术/代码文档
│ ├── 预算受限 → bge-large + pgvector
│ └── 性能关键 → voyage-2 + Weaviate
└── 对话式/多轮
├── 需要记忆 → 代理模式 + 上下文管理
└── 无状态 → 标准RAG管道
重排序决策:
├── 精度关键(法律、医疗)→ 始终使用Cohere Rerank
├── 延迟 < 200ms → 跳过重排序,调整检索
├── 预算受限 → 交叉编码器(bge-reranker-large)
└── 默认 → 使用Cohere Rerank,top-10 → top-3
数据库选择:
├── 已有Postgres → pgvector扩展
├── 需要混合搜索 → Weaviate或Qdrant
├── 托管服务 → Pinecone
└── 自托管/本地 → Chroma或Qdrant
模型路由策略
复杂度评估:
├── 仅关键词(FAQ)→ Claude Haiku
├── 单文档引用 → Claude Sonnet
├── 多文档综合 → Claude Opus
└── 代码生成 → Claude Sonnet + 工具
Token预算检查:
├── < 1K tokens → 任意模型
├── 1K-4K tokens → Sonnet/GPT-4
├── 4K-32K tokens → Claude Opus
└── > 32K tokens → 先分块再总结
代理与RAG决策
任务分类:
├── 静态知识查询 → 纯RAG
├── 需要外部API → 带工具的代理
├── 多步推理 → 带规划的代理
├── 需要实时数据 → 带实时工具的代理
└── 简单问答 → RAG + 回退到代理
故障模式
语义不匹配级联
症状: 检索精度高但答案相关性差,用户反馈“接近但不太正确” 检测规则: 语义相似度 > 0.8 但用户满意度 < 60% 根本原因: 查询和文档嵌入针对不同的语义空间进行了优化 修复方法: 切换到领域特定的嵌入模型或使用同义词实现查询扩展
上下文窗口溢出
症状: 回答变得通用,模型忽略特定的检索上下文,答案不一致 检测规则: 上下文利用率 < 30% 且回答普遍性得分 > 0.7 根本原因: 过多不相关块稀释了相关信息 修复方法: 实施更严格的相关性阈值(>0.8)和动态上下文选择
工具幻觉循环
症状: 代理编造API调用,引用不存在的函数,无限重试循环 检测规则: 工具调用成功率 < 50% 或迭代次数 > max_iterations * 0.8 根本原因: 模型训练时使用的工具模式与实现不同 修复方法: 在代理系统提示中添加工具验证层和显式错误处理
嵌入漂移退化
症状: 检索质量随时间逐渐下降,性能季节性下降 检测规则: 月度平均retrieval@5相比基线下降 > 10% 根本原因: 领域语言演变但嵌入模型保持不变 修复方法: 实施嵌入模型重训练管道或切换到自适应嵌入
响应延迟爬升
症状: P95延迟逐渐增加,用户抱怨响应慢 检测规则: P95响应时间超过基线2倍且持续7天 根本原因: 向量索引退化、上下文大小膨胀或模型端点饱和 修复方法: 实施索引优化计划、上下文剪枝和多模型负载均衡
工作示例
示例:客户支持聊天机器人实现
初始需求: “构建一个聊天机器人,能够回答关于我们500页产品文档的问题”
步骤1:架构决策
- 文档数量:500页 → 使用Pinecone以保证可扩展性
- 查询类型:混合FAQ + 故障排除 → 需要混合搜索
- 延迟要求:< 3秒 → 包含重排序但进行优化
步骤2:实现演练
// 新手方法 - 使用基本的相似度搜索
const chunks = await vectorDb.query(queryEmbedding, { topK: 5 });
// 专家方法 - 考虑相关性阈值
const rawChunks = await vectorDb.query(queryEmbedding, {
topK: 20,
threshold: 0.7 // 确保最低相关性
});
// 专家添加新手可能会跳过的重排序步骤
const reranked = await reranker.rank(query, rawChunks);
const finalChunks = reranked.slice(0, 3);
// 专家包含回退处理
if (finalChunks.length === 0) {
return await fallbackToGeneralSupport(query);
}
步骤3:性能优化发现
- 初始P95延迟:4.2秒(高于要求)
- 分析:60%的时间花费在重排序上
- 权衡决策:从Cohere Rerank切换到本地交叉编码器
- 结果:P95延迟 → 2.1秒,轻微质量下降(92% → 89%满意度)
- 专家见解:对于支持用例,速度胜于完美精度
步骤4:故障场景处理
- 发现15%的查询是关于文档中未包含的功能
- 新手:会返回“我不知道”
- 专家:添加了升级检测并移交给人机客服
最终架构:Pinecone + 本地重排序器 + 代理升级 = 89%自动化率,P95为2.1秒
质量门禁
- 评估数据集上的Retrieval@5准确率 > 85%
- P95的平均响应延迟 < 3秒
- 上下文利用率 > 60%(模型使用了检索到的信息)
- 幻觉率 < 5%(检索上下文不支持的响应)
- 30天滚动窗口内的用户满意度得分 > 80%
- 每次查询的Token成本低于预设预算阈值
- 排除计划维护后的系统正常运行时间 > 99.9%
- PII检测率 > 95%(响应中不包含个人信息)
- 嵌入模型性能稳定(月度退化不超过10%)
- 错误处理覆盖所有故障模式并提供优雅降级
非适用边界
请勿将此技能用于:
提示工程任务 → 请使用prompt-engineer
- 优化提示模板和指令
- A/B测试提示变体
- 思维链提示设计
ML模型训练/微调 → 请使用ml-engineer
- 训练自定义嵌入模型
- 在领域数据上微调LLM
- 模型架构研究
数据管道工程 → 请使用data-pipeline-engineer
- 训练数据的ETL流程
- 数据验证和清理工作流
- 批处理系统
基础设施/DevOps → 请使用backend-architect
- Kubernetes部署策略
- 数据库优化和分片
- 负载均衡器配置
分析和监控设置 → 请使用chatbot-analytics
- 对话流分析
- 用户行为追踪
- 性能仪表盘创建
委托时机:
- 任务需要深度ML专业知识 →
ml-engineer - 重点在对话设计 →
prompt-engineer - 需要基础设施扩展 →
backend-architect - 想要使用分析功能 →
chatbot-analytics - 构建非AI功能 → 相关专家技能