agent项目相关八股

1. 怎么把 RAG 接入到你的 Agent 执行链路里的?是在调用工具之前先检索,还是在生成结果之后再做校验?

我们的 RAG 是通过 Spring AI 的 Advisor 接入到 ChatClient 的:模型调用前在 before() 做向量检索,把命中文档拼成上下文注入 prompt;模型生成后在 after() 把命中文档回写到响应 metadata 便于追踪。当前是“先检索再生成”的 pre-RAG,并没有单独做生成后的事实校验,后续可以增加 verifier 节点来做 post-check。

2. MCP 是完全自研的吗?和市面上成熟的 Agent 框架相比,你的方案在扩展性上有什么优势?

结论

  • MCP 不是完全自研协议:我用的是 MCP 标准协议,在 Java 侧主要做的是工程化落地与平台化接入——把 MCP Server(SSE/StdIO 两种传输)动态装配进 Spring 容器,并注入到 ChatClient 的 tool-calling 链路里。
  • 自研的部分在于:围绕 MCP 做了**配置化编排、动态装配、可观测执行链路(SSE 轨迹)**这一整套“企业集成层”,而不是重新造一个协议。

1) 你的 MCP 到底自研了什么、复用了什么?

复用(标准/成熟组件)

  • 协议层:遵循 MCP 的工具描述与调用模型(Tool schema、call/response)。
  • 传输层:支持 SSE(远程工具服务)和 StdIO(本地工具进程)。
  • 调用链:通过 Spring AI 的 tool-calling 支持,把 MCP client 聚合成 tool callback provider(你代码里是 SyncMcpToolCallbackProvider 一类的注入方式)。

自研(平台落地能力)

  • 动态装配:从 DB/配置加载 MCP 工具配置,在运行时创建 MCP client,并注册成 Spring Bean(按工具 id 生成 beanName)。
  • 按 Agent/Client 绑定工具集:不同 Client 可组合不同 MCP 工具集合,避免“全局一锅端”。
  • 装配到执行引擎:最终构建 ChatClient 时将工具回调注入,使 AutoAgent/FlowAgent 的不同 step 可以复用同一套工具能力。
  • 可观测:工具调用结果可以写入执行轨迹,并通过 SSE 推给前端(便于排障与解释)。

2) 和成熟 Agent 框架相比,你的扩展性优势是什么?

我会从三点讲“扩展性”,每点都能落到工程事实:

优势 A:在 Spring 体系下的“配置化扩展 + 动态装配”

  • 成熟框架(LangChain/LangGraph)在 Python 生态扩展快,但在 Java 企业环境里经常要重新做:
  • 我这套做法把工具、模型、RAG、Prompt 都当成配置驱动的模块,通过规则树按依赖顺序装配成 Bean。扩展一个新 MCP Server更多是“加配置 + 注册”,不需要侵入执行链路代码。

优势 B:工具接入与 Agent 执行解耦(横切能力复用)

  • RAG 用 Advisor 这种横切组件接入;MCP 工具也以“可插拔能力”注入 ChatClient
  • 结果是:同一个工具集可以被多个 Agent/多个 Step 复用;新增工具不会导致执行链路膨胀。

优势 C:工程化能力更贴近生产(可观测/可控/可治理)

成熟框架很多 demo 很快,但生产要补的能力很多。我的扩展点围绕“生产化”:

  • SSE 全链路事件输出(分析/执行/总结)可观测
  • 规则树装配顺序保证一致性
  • 支持按 Client 绑定工具白名单(易做权限治理)
  • 易插入限流、重试、超时、审计等治理层

MCP 协议本身不是我自研的,我遵循 MCP 标准,在 Java 侧主要做工程化落地:支持 SSE/StdIO 两种传输,把 MCP 客户端按配置动态创建并注册到 Spring 容器,最终注入到 ChatClient 的 tool-calling 链路里。相比市面成熟 Agent 框架,我的优势不在于算法,而在于 Java/Spring 生态下的扩展性:工具、模型、RAG、Prompt 都配置化装配,新增工具低侵入;同时具备更强的生产化集成空间——权限白名单、审计、限流和 SSE 可观测链路都能统一治理。

#发面经攒人品#
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 17:45
本人简历上 1 个 RAG 项目 + 1 个 Agent demo;这次面的是AI岗一面前我以为:背完八股 + 把项目讲清楚,应该能稳过。0-5 min:自我介绍 + 项目背景- 顺利。讲清楚了我的 RAG 是给法律咨询场景做的,痛点是大模型不懂行业术语。5-20 min:项目深挖(开始崩)- Q1:你的法律文档总共多少?切了多少个 chunk?- 我:约 500 份 PDF,5 万个 chunk- Q2:500 份 PDF 加起来才 5 万 chunk?平均每份 100 个 chunk,你切片粒度是多少?- 我:512 token- Q3:法律文档里"第三条第二款"和"第三条之二"是不同含义,你的切片会不会把它切散?- 我:(沉默 5 秒)……应该会- Q4:那你怎么解决?- 我:我可以加一个 metadata……(开始编)❌ 第一次崩:切片粒度没考虑业务语义。20-35 min:评测体系(继续崩)- Q:你怎么知道你的 RAG 有效?- 我:我用 Recall@5……- Q:评测集多少条?怎么构造的?- 我:100 条,我手工标注的- Q:100 条够吗?分布怎么样?- 我:分布……我没分- Q:那你的 Recall@5 是 0.81,你怎么知道这个数字是好是坏?baseline 是什么?- 我:(沉默 10 秒)❌ 第二次崩:没有 baseline,没分布分析,纯靠"看起来还行"。35-55 min:Agent 部分(彻底崩)- Q:你的 Agent demo 用了几个工具?- 我:3 个,搜索、计算器、文档查询- Q:当用户问一个问题,你的 Agent 怎么决定调哪个工具?- 我:用 ReAct,让模型自己决定- Q:模型决策错了怎么办?- 我:我加了个 reflection……- Q:reflection 失败 3 次后怎么处理?- 我:(沉默 15 秒)……我没想过❌ 第三次崩:异常路径完全没设计。55-65 min:业务理解 + 反问- Q:你觉得字节做 AI 应用最大的瓶颈是什么?- 我:算力?数据?- Q:你看过哪些字节最近发的 AI 产品?- 我:豆包、扣子……- Q:扣子是 Agent 平台还是工作流平台?- 我:(再次沉默)❌ 第四次崩:对面试公司业务一无所知。
面试官拷打AI项目都会问...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
04-28 13:00
已编辑
门头沟学院 Java
啥都ac:项目主要是能讲清楚核心链路技术选型对比方案量化结果等等吧 是否真实做过真实存在不太重要 当然编的项目能做到这种水平也付出了精力了
找工作的破防时刻
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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