Agent 项目使用了什么框架?

考查重点:框架分工与选择依据。报实际框架版本与模型/工具/状态分工,用一请求标它提供与自己补的部分,再解释选择

本题目录

参考答案

核心回答

下面以企业研搜助手为参考示例:它把公开网络信息、内部业务数据和私有文档结合起来,回答研究问题,并按需生成 Markdown 或 PDF。后端使用 Python,Agent 主要由 DeepAgents 组织,同时复用 LangChain 和 LangGraph 的基础能力。

  • DeepAgents:通过 create_deep_agent 组装主 Agent、三个自定义业务专家和工具。主 Agent 理解任务、选择专家、汇总结果并生成文件;专家分别查询网络、数据库和内部知识库。
  • LangChain:统一模型接入和工具接口,把搜索、SQL、知识库等业务函数交给 Agent 调用。
  • LangGraph:作为底层运行时承接图状态、流式执行和检查点。项目通过 thread_id 关联会话,当前检查点使用进程内的 InMemorySaver。
  • FastAPI:承接任务提交、上传下载和取消接口,后台异步执行 Agent,通过 WebSocket 推送进度和结果。

数据侧,Tavily 提供公开搜索,MySQL 保存结构化业务数据,RAGFlow 提供内部文档问答。选择这套组合,是因为任务需要按信息来源动态委派并交付报告;业务工具、会话目录和前端事件由项目代码接入,通用工具循环与专家委派复用框架。

展开说明

1. 说清各层实际用了什么

这个实现直接调用的是 create_deep_agent,注册模型、主提示词、文件工具、专家配置和检查点;底层图执行由框架组合提供。因此可以说“用 DeepAgents 构建,底层依赖 LangChain 和 LangGraph”,再分别说明各层实际承担的职责。

LangChain 的模型初始化接口创建项目统一使用的模型对象;工具装饰器把业务函数的名称、参数和说明暴露给 Agent。模型决定发起什么调用,实际访问网络、执行 SQL 或请求 RAGFlow 的仍是 Python 工具代码。模型通过 OpenAI 兼容接口接入,具体模型名由环境配置决定。

LangGraph 承接执行状态和消息流。项目传入 thread_id,把同一会话关联到检查点,并使用 astream 消费执行过程。这里配置的是 InMemorySaver,可支持进程运行期间的会话状态,但没有因此获得跨重启的持久恢复能力。

2. 用一个请求串起框架和业务代码

例如用户要求:“读取上传材料,结合内部药品销售数据和知识库说明,生成一份 PDF 报告。”参考实现的处理链路是:

  1. FastAPI 接收任务,创建后台协程并返回会话标识。执行入口为该会话准备工作目录,将上传文件复制到工作目录,并向 Agent 提供文件列表。
  2. 主 Agent 先通过文件工具读取材料,再按需要通过框架的 task 工具委派业务专家。数据库专家掌握列出表、查看样例和执行 SQL 的工具;知识库专家先查询可用 RAGFlow 助手,再向匹配的助手提问。只有需要公开信息时才调用网络专家。
  3. 专家结果回到主 Agent。主 Agent 组织报告内容,调用 Markdown 生成工具,再转换为 PDF。附件读取和最终文件交付由主 Agent 自己的工具完成。
  4. 应用消费流式执行结果,把工具调用、专家调用和最终回答转成前端事件;产物保存在对应会话目录,通过文件接口提供查看和下载。

这里,框架负责组织模型与工具的交互及委派;业务代码负责具体数据访问、目录处理、接口和事件推送。两者连接起来,才形成从用户请求到可下载报告的完整流程。

3. 为什么这样选,还有什么需要自己补

研搜任务所需的信息来源和补查顺序可能随返回结果变化,主 Agent 加专家工具的组织方式比较贴合这种需求。DeepAgents 提供已有的执行与委派方式,可以减少自行维护通用循环的工作;LangChain 的模型和工具接口便于接入业务函数,LangGraph 提供相应运行能力。

这并不意味着每个业务步骤都应交给模型决定。确定的文件转换、路径解析和事件封装,仍适合用普通代码实现。数据权限、查询约束、外部调用超时和业务幂等,也需要在应用或工具层落实。比如能调用 SQL 工具,只说明已经打通查询能力,不能据此认为已经具备完整的只读权限控制。

如果任务变成固定的“校验输入、查询数据、生成报告”,可以考虑普通函数或显式工作流;如果需要精确控制分支、暂停和恢复,也可以直接用 LangGraph 编排。替代方案应比较同一条业务链路需要补齐的工具循环、状态、错误处理和事件接口,不能只比较入口代码有多少行。

常见追问

你在项目里具体负责什么?

可以接着说明自己承担的模块及输入输出。例如,如果负责业务工具接入,就讲如何把查询需求转成工具参数、访问数据、处理异常并返回结构化结果;如果负责执行与前端联调,就讲会话如何关联后台任务、进度事件和最终文件。再选一个实际遇到的问题展开,职责就会比“用了某个框架”更清楚。

已有 LangGraph,为什么还用 DeepAgents?

LangGraph 可以更直接地描述状态、节点和分支;DeepAgents 在其上提供适合较长任务的 Agent 组织方式。这个参考项目主要复用高层主从委派,再接入业务工具,减少手写执行循环。如果高层控制方式与业务不匹配,可以下沉到显式图或自定义节点,按模块调整。

使用框架是否就支持任务恢复和取消?

要看实际接法。参考代码能取消后台 asyncio.Task,但第三方同步阻塞调用可能要等返回后才结束;检查点又采用内存实现,进程重启后状态不会保留。若需要持久恢复,还要配置相应存储,并处理恢复时可能重复执行的外部操作。

对应教程

参考资料

相关面经

20 篇

字节跳动

后端 Agent
二面
查看原面经 →
用什么框架做的(答没上框架,纯 Python)

阳光保险

AI 应用开发工程师
校招二面
查看原面经 →
你做的agent有用到框架吗?

水滴公司

AI全栈工程师
校招秋招一面
查看原面经 →
都用过哪些 Agent 相关的框架?
追问
还有用过其他的框架吗?

中兴通讯

AI 算法工程师
校招秋招一面
查看原面经 →
Agent 框架有哪些?

上海联蔚数科

AI 工程实习生(Agent 方向)
实习
查看原面经 →
你用过哪些agent开发框架
展开剩余 15 篇面经

汇川技术

全栈开发
秋招一面
查看原面经 →
项目追问
运维Agent你主要负责什么工作?使用的什么框架?

百度

Go 后端开发工程师
二面
查看原面经 →
项目追问
这个 Agent 系统是用什么框架做的?

字节跳动

后端开发工程师
一面
查看原面经 →
项目追问
Agent 是基于开源框架实现的吗?

中兴

软件开发工程师
秋招一面
查看原面经 →
是基于LangGraph开发的吗?

小红书、百度

面经合集实习
查看原面经 →
Agent 开发框架是用什么?是哪个语言?

京东

后端开发工程师
一面
查看原面经 →
agent的用了什么框架

小红书

Agent 开发
实习一面
查看原面经 →
在Agent开发过程中,使用了哪些技术框架?整体代码架构是如何设计的?

千寻智能

平台开发工程师
社招一面
查看原面经 →
Agent 平台是基于什么搭建的?

滴滴

测试开发
社招一面
查看原面经 →
agent框架有没有用过

字节跳动

Agent 开发
二面
查看原面经 →
你agent项目框架的时候有什么考虑?除了langchain你还了解或者调研过别的框架吗?

深势科技

后端开发工程师(AI / Agent 方向)
二面
查看原面经 →
Agent 项目用的什么框架?了解哪些主流框架?

字节跳动

Agent
春招
查看原面经 →
你用过哪些 Agent 框架?选型是如何选的?

腾讯音乐

后端开发
实习一面
查看原面经 →
用的什么ai框架开发?一共设计了几个agent?用了几种大模型?

哆咔互娱

Agent 开发工程师
实习一面、二面
查看原面经 →
讲讲你现在做项目用的agent框架是什么和为什么用它?

字节跳动

Agent 开发工程师
一面、二面、三面
查看原面经 →
智能体框架

收录题集

1 个来源,共2 份题集

阿里巴巴问答汇编

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

百度高频面试题

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

相关题目

4 题