金蝶 Agent 开发一面(项目为主)
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 自我介绍:这个排名是百分之多少?这些竞赛比赛是你主导的吗?比赛偏硬件还是偏软件?
- 实习:为什么选这家公司?这个做的是个什么?有用到 AI 吗?
- 项目一:简单介绍一下项目?这个项目是学习的吗?团队几个人?你的工作具体是什么?切分策略是怎么设计的?详细说说这个引用溯源到页面高亮具体怎么实现的?
- 项目二:简单介绍一下项目?这个 Agent 怎么设计的?为什么用 LangGraph 而不是用 LangChain?这里有哪些工具?
- 反问。
《参考解析》
文档切分策略怎么答:不要只说「按 500 字切」。完整回答分四层。① 切分单位的选择——固定长度切分最简单但会截断语义;按结构切分(Markdown 标题、PDF 段落/表格、代码按函数或类)保留了文档的自然边界;递归切分(先按标题,再按段落,再按句子)是折中主流;语义切分(按 embedding 相似度找断点)质量更高但成本大。② 参数——chunk size 与 overlap 要一起调:中文场景常用 300~800 字 + 10%~20% 重叠,重叠是为了避免答案正好被切断在边界上;表格、代码块、公式应当整块保留并单独处理,不要按字符硬切。③ 元数据——每个 chunk 必须带来源(文档 id、页码/章节、原始偏移量、标题路径),这些既是权限过滤的依据,也是引用溯源的基础。④ 检索侧配合——小块检索、大块生成(small-to-big:命中小块后返回它所在的父块或整节),或给每个 chunk 生成一句话摘要做「摘要索引」,都能显著提升召回质量。最后给一句度量:用标注过的问题集看召回率/命中位置是否完整,而不是凭感觉调参数。
引用溯源到页面高亮怎么实现:这条链路的关键是全程保留位置信息,不要在中途丢掉再靠字符串重新找。① 解析阶段:把文档解析成带偏移量的块,记录每个 chunk 在原文中的 {start, end}(或页码 + bbox/行号),存进向量库的元数据;② 生成阶段:把候选块按编号注入提示(如 [1] ...),要求模型在回答中标注引用编号,或者由后端在返回结果里附上「本次使用的 chunk id 列表」,不要指望从自然语言里正则抠引用;③ 前端渲染:拿到 chunk id 后查元数据得到位置,PDF 用 pdf.js 的文本层定位到页 + 高亮矩形(getTextContent 得到的 item 自带 transform 与宽高,可按偏移量匹配),Word/Markdown 用编辑器(ProseMirror/自研渲染器)的字符偏移做 Range 定位;④ 兜底:偏移量可能因为解析版本不同而漂移,所以除了字符偏移,最好同时存「所在页面 + 片段首尾若干字符」,定位时先用偏移命中、校验首尾文本,不匹配再退化成全文搜索该片段。面试官追问「详细说说」时,把这条链路的「元数据 → 传参 → 定位 → 兜底」讲完,比讲 UI 效果更有说服力。
为什么用 LangGraph 而不是 LangChain:两者的定位不同。LangChain 的核心是一堆可组合的抽象(Chain、Retriever、Tool、Memory 等),适合把「一次调用一条链」的流程快速搭起来,但它的流程是相对线性的,复杂控制流(循环、条件分支、重试、人工介入、状态回滚)写起来会变成嵌套回调或自定义代码。LangGraph 把 Agent 建模成状态图:节点是函数(模型调用、工具执行、判定),边是转移条件,并带一个显式的、可持久化的 state;由此得到几个直接好处——① 分支与循环是一等公民,适合 ReAct、多轮反思、人工审批这类流程;② 支持检查点(checkpointer),能中断后恢复、支持 human-in-the-loop;③ 支持流式输出每一步事件,前端可以展示「正在检索/正在调用工具」的过程;④ 状态显式化,调试时能看到每个节点前后的 state。代价是概念更多、学习成本更高、抽象层带来的调试复杂度。回答时再补一句:如果只是简单的「检索 → 拼上下文 → 生成」,用 LangChain 甚至不用框架更轻;选 LangGraph 是因为我们的流程有分支与循环(以及需要人工确认/恢复),这是判断依据。
Agent 需要哪些工具:按「能看、能查、能算、能写、能确认」分类更清楚。检索类(知识库向量检索、关键词检索、按元数据列举文档)、代码/数据类(SQL 查询、代码解释器或沙箱执行)、业务动作类(创建工单、发通知、更新业务状态——这类必须带权限校验与幂等)、交互类(向用户追问缺失参数、请人工确认高风险操作)、辅助类(时间/计算器这类确定性工具,避免模型自己算错)。工具设计的要点:描述里必须写清「什么时候用、什么时候不要用」,参数用 schema 强约束并做服务端校验;工具返回要结构化且截断(失败返回可读的错误原因,让模型能自我修正);高风险工具要加二次确认,且所有调用都要有审计日志。
面试复盘:这场只面了 20 分钟、没有八股、以项目为主,面试官更像是在核验简历真实性——「这个项目是学习的吗」「团队几个人」「你具体做了什么」都是归属性问题,必须能清楚区分个人贡献与团队成果。原帖作者到发帖时还不知道是否有后续。建议这类面试前把每个项目准备三个层次:业务背景与目标、你的具体动作与取舍、可量化的结果;竞赛类经历要能说清自己在队伍里的角色与占比(面试官问「是不是你主导的」「偏硬件还是软件」就是在定位真实贡献)。