京东 Agent开发 暑期一面

1. 自我介绍

2. 介绍一下 AI 智能体的 workflow,以及 RAG 知识库是怎么设计的

智能体 workflow 一般不是一次模型调用,而是多阶段任务流。我会把它拆成意图识别、任务规划、工具选择、检索增强、结果生成、校验和记忆更新几个阶段。比如运营人员问一个商品问题,系统先判断是选品分析、广告诊断、库存预警还是内容优化,再决定调用商品库、广告系统、向量知识库或规则引擎。

RAG 知识库设计上会分离结构化数据和非结构化文档。结构化数据比如商品指标、广告 ROI、库存周转用 MySQL、ClickHouse 或 ES 查询;非结构化内容比如运营 SOP、平台规则、历史案例、达人脚本会做切分、embedding、向量索引和元数据过滤。检索时不能只靠相似度,还要结合租户、类目、时间、权限、文档类型做过滤,否则召回结果会混乱。

用户问题
  -> 意图识别
  -> 任务规划
  -> 查询结构化指标 / 检索 RAG 文档 / 调用工具
  -> rerank
  -> prompt 组装
  -> 模型生成
  -> 证据校验
  -> 结果落库

3. 意图识别用的是哪个大模型,如何判断和测试意图识别结果的准确率

意图识别可以用通用大模型,也可以用小模型或规则加模型混合。项目里我更倾向于先用规则做高确定性识别,比如出现商品 ID、订单号、广告计划 ID 这类字段时先进入对应业务路由;模糊问题再交给大模型做分类。模型可以选 Qwen、DeepSeek、GPT 或 Claude 这类指令跟随能力强的模型,但不能只依赖模型自由发挥。

准确率测试要有标注集。每条样本包含用户原始问题、期望意图、必要槽位和是否需要调用工具。评估时不只看意图标签是否正确,还要看槽位抽取是否完整、是否误触发工具、是否该拒答却没有拒答。线上还要把低置信度、人工改判和用户追问样本回流到评测集。

def eval_intent(pred, gold):
    return {
        "intent_ok": pred["intent"] == gold["intent"],
        "slots_ok": all(pred["slots"].get(k) == v for k, v in gold["slots"].items()),
        "tool_route_ok": pred["need_tool"] == gold["need_tool"]
    }

case = {
    "query": "帮我看下 SKU123 最近广告 ROI 为什么掉了",
    "intent": "ad_diagnosis",
    "slots": {"sku": "SKU123"}
}

4. Redis 做语义向量相似度检索,内部用的是什么算法

Redis 做向量检索通常依赖 RediSearch 的向量索引能力,常见算法是 FLAT 和 HNSW。FLAT 是暴力精确检索,会计算查询向量和所有候选向量的距离,召回准确但数据量大时性能差。HNSW 是分层可导航小世界图,通过图结构近似搜索近邻,查询速度快,适合大规模向量召回,但它是 ANN 近似检索,需要调参数平衡召回率和延迟。

相似度距离一般可以选 cosine、L2 或 inner product。文本语义检索里常用 cosine,但前提是 embedding 模型输出和距离函数匹配。工程上还要关注维度、索引构建耗时、内存占用、topK、元数据过滤和向量版本。向量检索不是只存一个 embedding,通常还要存文档 ID、租户、类目、权限、更新时间等字段。

FT.CREATE rag_idx ON HASH PREFIX 1 doc:
SCHEMA
  tenant TAG
  category TAG
  content TEXT
  embedding VECTOR HNSW 6
    TYPE FLOAT32
    DIM 768
    DISTANCE_METRIC COSINE
# 查询时一般是:元数据过滤 + KNN 向量检索
query = "*=>[KNN 5 @embedding $vec AS score]"

5. 在使用 RAG 的过程中有没有出现大模型幻觉,如何设计兜底方案

出现过。常见情况是检索结果不相关、检索结果缺失、文档过期、prompt 里证据太多导致模型混淆,或者模型把相似案例当成当前事实。RAG 只能降低幻觉,不能消灭幻觉,因为最终生成仍然是概率模型。

兜底方案要从检索和生成两侧做。检索侧设置相似度阈值、元数据过滤、rerank 和文档时效校验;生成侧要求模型必须基于证据回答,没有证据就明确说无法判断。对于高风险问题,要返回引用来源、证据片段和置信度,并允许转人工。更重要的是把“未检索到证据”和“证据支持结论”区分开,不能让模型拿空上下文硬编。

{
  "answer": "当前无法判断广告 ROI 下降的唯一原因",
  "confidence": 0.42,
  "evidence": [
    "最近 7 天广告点击成本上涨 18%",
    "竞品均价下降 12%"
  ],
  "fallback": "建议补充转化漏斗和库存数据后重新诊断"
}

6. JMeter 压测的具体参数是怎么设置的

JMeter 压测不会只设置线程数。一般会先明确目标:是测接口吞吐、P99 延迟、长连接稳定性,还是测模型调用链路的限流能力。常用参数包括线程数、Ramp-Up 时间、循环次数、持续时间、请求超时、连接超时、吞吐量控制器、断言和结果采样。

比如测 Agent 诊断接口,我会把线程数从 50、100、200 逐步加压,Ramp-Up 设置成 60 到 180 秒,避免瞬时打爆。SSE 或长耗时接口要特别关注连接保持时间、服务端活跃连接数和网关超时。压测结果看平均值没有意义,重点看 P95、P99、错误率、线程池队列、数据库连接池、Redis 延迟和模型 API 限流。

Thread Group:
  Number of Threads: 200
  Ramp-Up Period: 120s
  Duration: 20min

HTTP Request:
  Connect Timeout: 3000ms
  Response Timeout: 60000ms

Assertions:
  响应码 = 200
  JSON 字段 status != FAILED

Metrics:
  QPS / P95 / P99 / Error Rate / Active Threads

7. Redis 是单线程的,为什么它还能支持高并发

Redis 的核心命令执行主要是单线程,但它基于内存操作,数据结构实现高效,再加上 IO 多路复用,可以用一个线程处理大量连接事件。单线程避免了复杂锁竞争,命令执行路径短,所以在纯内存读写场景下吞吐很高。

不过“Redis 单线程”不是绝对说法。新版本 Redis 在网络 IO、持久化、异步释放、集群同步等方面会使用多线程或后台线程。真正影响 Redis 高并发能力的不是线程数,而是命令是否会阻塞事件循环。比如大 key、慢 Lua、全量扫描、复杂集合运算和持久化抖动都会让 Redis 延迟飙升。

8. 在实际业务场景中,你怎么判断什么时候需要加缓存,为什么不能只用 MySQL

加缓存通常是因为访问频率高、读多写少、计算代价高、数据允许短暂不一致,或者下游承载不了高并发。比如商品基础信息、类目规则、运营 SOP、用户短期会话、Agent 任务状态和热点榜单,都适合缓存。MySQL 是权威事实源,但它不适合承接所有高频读和临时状态。

不能只用 MySQL 的原因是 MySQL 擅长事务和持久化,不擅长高频低延迟的热点读、分布式限流、临时会话状态和短期幂等标记。如果所有请求都查 MySQL,热点 SKU 或热门活动期间很容易把连接池打满。缓存设计要同时考虑过期时间、穿透、击穿、雪崩、一致性和降级。

public ProductInfo getProduct(String sku) {
    String key = "product:" + sku;
    ProductInfo cached = redis.get(key, ProductInfo.class);
    if (cached != null)

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论

相关推荐

04-17 23:48
西北大学 Java
点赞 评论 收藏
分享
04-09 16:25
门头沟学院 Java
面试1h左右RAG 架构与检索流程1、为什么引入父子索引?2、为什么在检索阶段引入BM25?(追问)BM25和向量检索是怎样组合的?比例是如何设置的?(追问)整体检索流程是怎样的?从query 到最 终上下文的完整流程是什么?(追问)检索阶段有没有做rerank?使用的是什 么方式?Rerank 与检索结果处理1、rerank后一般返回几个块?(追问)为什么选择这个数量?有没有做过验证?2、rerank后的topK截断是怎么做的?(追问)为什么是这个值?有没有尝试过其他策略?(追问)如果上下文长度不够或过长,你是怎么处理的?上下文工程与记忆机制1、讲一下上下文工程是怎么设计的。(追问)上下文拼接的结构是怎样的?(追问)如何避免上下文过长导致模型性能下降?2、记忆机制是怎么做的?(追问)短期记忆和长期记忆是如何区分和存储 的?(追问)记忆更新策略是什么?Agent设计与工具调用1、Function Calling 是怎么设计的?2、Agent的任务规划是怎么做的?(追问)规划是由模型完成还是通过规则实现?(追问)多工具调用时如何决定调用顺序?(追问)如果工具调用失败如何处理?安全与防护机制1、Prompt注入攻击如何防御?(追问)有没有做输入过滤或规则校验?2、工具调用的安全控制是怎么实现的?(追问)如何限制模型调用敏感接口?(追问)是否有权限控制或白名单机制?限流与系统设计1、讲一下分布式令牌桶限流。2、漏桶算法是什么?3、滑动窗口算法是怎么实现的?(追问)如果使用滑动窗口,结构体中会包含哪些字段?4、滑动窗口和令牌桶相比有什么区别?(追问)如果用Redis实现限流,会使用什么数据结构?基础算法与数据结构1、布隆过滤器讲一下。(追问)会出现什么问题?(追问)如何控制误判率?数据库与索引1、数据库索引失效的情况有哪些?2、like查询会不会导致索引失效?(追问)哪些写法会导致索引无法命中?RAG 评测与数据集1、RAG系统如何评测?2、有哪些评测维度?(追问)常见的指标有哪些?3、评测数据集一般包括哪些内容?(追问)如何构建高质量评测数据?RAG 优化与效果提升1、如果要提升相关度,你会怎么做?2、如果要优化回答效果,有哪些思路?(追问)是优化检索阶段还是生成阶段?(追问)如何验证优化是否有效?系统设计题1、如果设计一个数据处理场景,比如有一千条数据需要求和,你会如何设计处理流程?(追问)如果数据规模扩大到百万级怎么处理?(追问)如何保证计算效率和稳定性?RAG 性能优化1、RAG的性能如何提升?(追问)是从检索、模型还是系统架构优化?(追问)有没有做缓存或并行优化?上下文优化1、当前的上下文是如何处理的?(追问)有哪些优化思路?(追问)如何减少无关上下文对模型的干扰?
Agent面试会问什么?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务