为什么需要框架
直接调用 LLM API 可以完成简单问答,但一旦涉及多轮工具调用、状态管理、多 Agent 协作,手写代码的复杂度会迅速上升。框架的价值在于提供标准化的抽象层。
主流框架简要对比
| 框架 | 定位 | 优势 | 局限 |
|---|---|---|---|
| LangChain | 通用 LLM 应用开发 | 生态最全,集成组件多 | 抽象层较重,调试复杂链路较麻烦 |
| LlamaIndex | 数据检索与 RAG 为核心 | 索引与检索能力强 | Agent 能力相对偏弱 |
| AutoGen | 多 Agent 协作 | 天然支持多角色对话式协作 | 对单 Agent 简单任务偏重 |
| 原生 Function Calling | 直接使用模型能力 | 轻量、可控性最高 | 需要自行实现状态管理 |
选型建议
- 简单问答 / 单轮工具调用:优先直接使用模型的 function calling 能力,避免引入不必要的框架开销
- 知识库问答类应用:LlamaIndex 在索引构建与检索优化上更专注
- 复杂多步骤任务编排:LangChain 的 LCEL(表达式语言)或 LangGraph 提供了较好的状态图抽象
- 需要多个专业角色协作(如“规划者 + 执行者 + 审核者”):AutoGen 一类的多 Agent 框架更契合
一个最小 Agent 示例(伪代码)
tools = [search_tool, calculator_tool]
def run_agent(query):
while True:
response = llm.chat(messages, tools=tools)
if response.tool_calls:
for call in response.tool_calls:
result = execute_tool(call)
messages.append(tool_result(call, result))
else:
return response.content
理解这个基本循环(LLM 决策 → 工具执行 → 结果回填 → 再决策)比死记框架 API 更重要,框架本质上都是在此基础上做工程化封装。
小结
框架不是必须品,关键在于任务复杂度是否值得引入额外的抽象成本。项目初期建议先用最小实现验证可行性,再决定是否迁移到成熟框架。