牛客 Agent 开发面经整理:某中厂日常实习(RAG / 切片 / 一致性 / 多租户 / SSE / K8s)(三十三)
收录日期:2026-05-07
关键词:AI Agent、RAG、向量检索、切片、召回重排、数据一致性、多租户、SSE、Kubernetes
1. 做重构时如何使用 AI?
参考答案
- 用 AI 做“局部、可验证”的任务:重命名、提取函数、补测试、生成迁移清单、写回归用例。
- 把约束写清楚:不改行为、不改公共接口、保留日志/埋点、覆盖关键分支。
- 每次改动都配合:lint/test/静态分析 + 小步提交,避免大段不可回溯的重写。
2. RAG 项目里 MySQL 和 ES 的数据一致性怎么做?
参考答案
- 主数据源(Source of Truth)通常选 MySQL;ES 用于检索加速与倒排查询。
- 同步模式:
- 双写(应用同时写 MySQL + ES):实现简单但失败处理复杂,需要重试/补偿;
- CDC(binlog)订阅:更可靠,异步最终一致(常见做法)。
- 关键机制:幂等(docId/version)、重试与死信队列、定期全量对账与重建索引。
3. embedding 模型如何选型?
参考答案
- 维度:语言覆盖(中文/多语)、领域匹配(通用 vs 垂直)、向量维度与延迟成本、许可与可部署性。
- 评估:用业务查询-文档对构建评测集,比较 Recall@K、MRR/NDCG、以及重排后最终命中率。
- 工程:支持批量编码、缓存、向量归一化策略一致;必要时做微调或使用领域词表增强。
4. 手动干预切片(chunking)怎么实现?
参考答案
- UI/后台提供切片规则与预览:按标题层级、段落、表格、代码块等语义边界切分,而不是纯 token 固定窗口。
- 持久化切片结果(chunk metadata):父文档 id、chunk id、位置、标题路径、更新时间与权限标签。
- 支持回放与重建:规则变更后可批量重切 + 版本化(避免在线索引混乱)。
5. 讲解召回与重排(retrieval + rerank)策略
参考答案
- 召回:BM25(关键词)+ 向量检索(语义)+ 结构化过滤(租户/权限/时间)。
- 融合:并集召回后做去重;可用加权分数融合(RRF 等)。
- 重排:用 cross-encoder / rerank 模型对候选做精排;同时加入业务特征(热度、时效、权威来源)。
- 目标:提升 top1/top3 命中率,同时控制成本与延迟。
6. 多租户隔离怎么实现?
参考答案
- 数据层:每租户独立索引/库表 或 共享索引但强制租户字段过滤(必须服务端强制,不信任客户端)。
- 权限:文档与 chunk 加权限标签(tenantId、role、ACL),检索阶段先 filter 再召回(或在向量库侧支持过滤)。
- 运行时:配置隔离(模型、工具权限、prompt 模版)、资源隔离(限流/配额),防止“噪声租户”拖垮系统。
7. SSE 流式输出:用户关闭浏览器后断开,如何保证中断后还能继续?
参考答案
- 生成侧把输出拆成 token/片段并落地(缓存或持久化),为每次对话生成
message_id与offset。 - 客户端重连携带
Last-Event-ID或自定义 offset,请求继续从某个位置开始推送。 - 需要幂等:相同 offset 不重复写入;服务端要有过期策略与清理。
8. 是否了解 K8s?Agent 服务落到 K8s 的关注点?
参考答案
- 部署:Deployment + HPA;健康检查(liveness/readiness);滚动更新与回滚。
- 观测:日志、指标(Prometheus)、链路追踪(OpenTelemetry)。
- 资源:CPU/内存 requests/limits;GPU 调度(如需要);避免 OOM 影响稳定性。
- 配置与密钥:ConfigMap/Secret;外部依赖(向量库/缓存)连接池与熔断限流。