为什么?
因为 LangChain 这种框架的问题在于过度封装。一个简单的文本生成,调用栈要经过 Chain、LLMChain、BaseLLM、BaseOpenAI、OpenAI 等好几个类,最后才能送达 LLM。

另外,LangChain 的版本变动非常频繁。最早的 Chain 换成了 LCEL,官方推荐的写法也从 create_react_agent 换到了 create_agent。你的业务逻辑没变,但框架升级了,你的代码就得跟着改。
Anthropic 官方博客就曾给出这样的答案,“框架为了通用,需要很多额外的抽象层,反而隐藏了最初的提示词,让你更难调试,出了问题你连日志都看不明白。建议开发者直接调用 API。”
还有真实案例作证。Octomind 用了 LangChain 一年多,最后不得已换成了手搓。因为他们需要在 Agent 运行过程中动态调整可用的工具,LangChain 没有任何机制来观察或者控制 Agent 的中间状态。
再说说手搓的优势。

手搓不是为了从头造轮子,而是因为很多时候框架根本照顾不到 Agent 的 Harness 细节。
比如说 ReAct 的绝对掌控权。框架会把模型调用、工具分发封装在黑盒里,Agent 跑偏了,吐出的参数出问题了,你根本没办法插手。手搓的好处是,模型每一步在想什么、调了什么工具、返回值合不合理,都可以实时插桩拦截、动态修正。这种可观测和可干预的能力,是框架提供不了的。
再比如说上下文工程与成本的极致压缩。通用框架为了兼容各种场景,往往会夹带很多冗余的封装提示词,不仅容易破坏前缀对齐,还会导致服务端的 Prompt Caching 频繁失效。而手搓可以做到精致的前缀感知与动态压缩。像 Claude Code 这类成熟的 Agent,可以做到工具输出截断、对话历史折叠,再到时间维度的裁剪,以及按需的摘要生成。

再比如说流式交互和并发调度的极致体验。决定用户体验的从来不是模型本身,而是 Harness。模型还在推理的时候,思考过程和工具状态要流式推给前端;查资料、读文件这种只读工具可以全量并发执行,而写代码、跑命令这种写操作必须严格排队串行;一旦某个工具执行超时或抛出异常,还要能通过中断信号秒级终止。这种兼顾速度、秩序与安全的高性能调度,框架里几乎不可能提供。

最后直接告诉面试官,Codex、Claude Code 这些 Agent 已经非常强大了,手搓一个 Agent 已经没有什么难度。
而且 GitHub 上有大量手搓的开源实战项目,可以直接照着学。
比如说 mini-swe-agent,目前已有 7.5k 星标。普林斯顿团队用仅仅 100 行 Python 代码,就实现了一个完整的 Agent,甚至在 SWE-bench 上拿到了很高的分数。学完这个项目,能让你搞懂 Agent 最极简、最原始的核心骨架。
还有 OpenAI 官方推出的 Agents SDK,目前收获了将近 3 万星标。它的过人之处在于轻量封装,把 Agent、Runner、Tool、Guardrail 和 Handoff 这几个核心能力拆解得极其清晰。学完这个项目,能让你学会怎么用最干净、最标准的工程范式去设计一套白盒化的 Agent。
逼近 5 万星标的终端编程神器 Aider,沉淀了大量硬核的上下文工程实战。它首创的 repo map 技术,能用极小代价把整个代码仓库压缩成一张结构地图,从而让模型理解项目全貌;多文件编辑还支持 diff、udiff 和全文件三种模式切换。想学习怎么让 Agent 吃透大型项目、怎么精准控制代码改写,Aider 就是最好的教科书。
拥有 5.4 万星标的 Goose,是 Block 开源的高性能 Rust Agent。它的最大亮点是深度集成了标准化 MCP 协议。想搞清楚 MCP 在 Agent 里怎么落地,或者想看系统级的高并发 Agent 架构长什么样,学它就对了。
突破 2 万星标的 PydanticAI,由 Pydantic 团队倾力打造。它把 FastAPI 那套丝滑的类型安全体验搬到了 Agent 里,依赖注入、类型化工具和结构化输出全都有。如果你想写出类型安全、不容易踩坑的生产级 Agent,这个项目的代码设计非常值得借鉴。
面试官如果追问“那框架完全没用吗?”
告诉他,验证原型的时候有价值,比如说快速搭个 demo 跑通流程,框架能省一些时间。
这道题你学会了吗?想解锁更多 Agent 面试题的源码级拆解,点赞关注,我是二哥,咱们下期见!



