核心要点

  • 能中立地讲框架价值:LangChain/LangGraph/CrewAI 等封装了 prompt 模板、工具调用、记忆、编排,能快速搭原型、验证想法

  • 能说出框架代价:过度抽象导致黑盒难调试、版本与依赖频繁变动、prompt 被封装难精细控制、性能与 token 成本不透明、深度定制困难

  • 能说出手搓优势:完全可控的 prompt 与控制流、调试与可观测性好、依赖少更稳定、可按需裁剪更轻量

  • 能给判断标准:原型/通用场景用框架快速验证,核心/高要求生产系统倾向自研或只用薄封装,而非一刀切

标准回答

这不是「框架 vs 手搓」的非黑即白,而是根据阶段和要求做的工程权衡。

框架的价值

LangChain、LangGraphCrewAI 这类框架把 prompt 模板、工具调用协议、记忆管理、多步编排都封装好了,能在几小时内搭出一个能跑的 Agent。对于做 demo、验证可行性、或需求标准化的场景,它们极大降低了起步成本,没有必要重复造轮子。

框架的代价

  • 过度抽象导致黑盒:实际发给模型的 prompt 被层层包装,出问题时难以定位是哪一层注入了什么,调试链路长。
  • 依赖与版本不稳定:这类库迭代快、破坏性更新多,升级一次可能牵连一连串行为变化,生产环境维护成本高。
  • prompt 难精细控制:很多关键 prompt 藏在框架默认模板里,想逐字调优、做 A/B、或适配特定模型的最佳实践时很别扭。
  • 性能与成本不透明:框架可能在背后多发几次调用或塞入冗余上下文,token 成本和延迟不好掌控。
  • 定制困难:一旦需求超出框架预设的编排范式(特殊的控制流、自定义重试与降级),往往要和框架「对着干」。

手搓的优势

直接用模型 SDK 自己写循环、自己拼 prompt、自己管工具调用,意味着:prompt 与控制流完全可控、每一步都看得见因而易调试和可观测、依赖少所以更稳定、代码按需裁剪因而更轻量。代价是起步要写更多样板代码,且要自己实现记忆、重试等通用能力。

判断标准

倾向框架:早期原型、需求通用且标准、团队对 LLM 工程经验有限、要快速验证。
倾向手搓或薄封装:核心业务系统、对 prompt 质量/成本/延迟有严格要求、需要深度定制控制流、需要强可观测与可控的故障处理。常见折中是只借用框架里少数稳定的工具组件,编排和 prompt 自己掌控,即「薄封装」。

常见误区

⚠️ 常见踩坑

把「手搓」理解为否定一切框架、什么都从零写,或反过来认为「用了知名框架就等于工程做得好」。两者都是态度而非判断——成熟做法是按场景选型:能被框架良好覆盖的部分就复用,框架抽象妨碍了可控性和可观测性的核心环节才自研。

追问

追问 1什么信号说明该从框架迁出、改为自研?

当出现这些信号时值得考虑:调试一个线上 bug 要花大量时间在框架内部源码里追踪 prompt 来源;每次框架升级都引发回归、团队疲于适配;token 成本或延迟明显高于预期但难以定位优化点;产品需求反复撞上框架的抽象边界,要靠 hack 绕过。本质是框架的维护与对抗成本已超过它带来的便利。

追问 2手搓 Agent 通常需要自己实现哪些基础能力?

至少包括:与模型交互的调用循环(ReAct 或 plan-execute 式的多步循环)、工具的注册与调用结果解析、对话与中间状态的记忆管理、上下文的拼装与裁剪、错误重试与降级、以及可观测性(日志、trace、token/延迟统计)。这些正是框架替你做掉的部分,自研换来可控性的同时要承担其实现与维护。

追问 3团队较小、经验不足时,你会怎么选?

多数情况下先用框架快速验证业务可行性和需求边界,避免一上来就在基础设施上耗时间。等核心链路稳定、瓶颈清晰后,再针对最关键、最需要精细控制的环节逐步替换为自研薄封装。这样既享受了框架的起步速度,又把自研成本投在最有价值的地方,而不是过早全盘手搓或长期被框架绑死。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习