📋 AI Agent的四大核心问题
核心思考:编写一个AI Agent框架,需要解决哪些核心问题?
graph TB
A[AI Agent框架] --> B[1. LLM适配层
大脑] A --> C[2. 工具注册与调度
双手] A --> D[3. Context管理
记忆] A --> E[4. 控制流编排
中枢] B --> B1[统一接口] B --> B2[Prompt管理] C --> C1[工具注册] C --> C2[参数解析] C --> C3[执行调度] D --> D1[短期记忆
对话历史] D --> D2[长期记忆
RAG检索] E --> E1[管道模式
Pipeline] E --> E2[循环模式
ReAct] E --> E3[多智能体
DAG/Chat] style A fill:#7C3AED,color:#fff style B fill:#48bb78,color:#fff style C fill:#ed8936,color:#fff style D fill:#4299e1,color:#fff style E fill:#9f7aea,color:#fff
大脑] A --> C[2. 工具注册与调度
双手] A --> D[3. Context管理
记忆] A --> E[4. 控制流编排
中枢] B --> B1[统一接口] B --> B2[Prompt管理] C --> C1[工具注册] C --> C2[参数解析] C --> C3[执行调度] D --> D1[短期记忆
对话历史] D --> D2[长期记忆
RAG检索] E --> E1[管道模式
Pipeline] E --> E2[循环模式
ReAct] E --> E3[多智能体
DAG/Chat] style A fill:#7C3AED,color:#fff style B fill:#48bb78,color:#fff style C fill:#ed8936,color:#fff style D fill:#4299e1,color:#fff style E fill:#9f7aea,color:#fff
🧠 1. LLM适配层:统一接口与Prompt管理
适配器模式 (Model Adapter)
抹平不同模型(OpenAI, DeepSeek, Qwen)的API差异,各框架的实现方式:
| 框架 | LLM封装方式 | 特点 |
|---|---|---|
| LangChain | ChatTongyi / ChatOpenAI 类 | 丰富的模型适配器,统一接口 |
| Qwen-Agent | llm_cfg字典配置 | 配置式,支持多种model_server |
| LlamaIndex | DashScope / OpenAI 类 | 与Settings全局配置结合 |
🎯 LLM统一接口的作用
- 统一调用方式(如 invoke("你好"))
- 统一参数配置(如 temperature)
- 统一输出格式(转为 Message 对象)
sequenceDiagram
participant App as 应用层
participant Adapter as 适配器层
participant OpenAI as OpenAI API
participant Qwen as Qwen API
participant DeepSeek as DeepSeek API
App->>Adapter: invoke("你好")
alt OpenAI模型
Adapter->>OpenAI: chat.completions.create()
OpenAI-->>Adapter: response
else Qwen模型
Adapter->>Qwen: dashscope.Generation.call()
Qwen-->>Adapter: response
else DeepSeek模型
Adapter->>DeepSeek: compatible-mode API
DeepSeek-->>Adapter: response
end
Adapter-->>App: Message对象
🛠️ 2. 工具注册与调度 (Tool Registry)
核心思考:LLM只能输出文本,怎么让它去执行Python函数?
三大框架工具注册对比
| 模式 | 框架 | 特点 |
|---|---|---|
| @tool 装饰器 | LangChain | 最简洁,docstring自动解析 |
| @register_tool + 类 | Qwen-Agent | 显式参数定义,结构清晰 |
| FunctionTool 封装 | LlamaIndex | 强类型约束,适合复杂工具 |
graph LR
A[Python函数] --> B[工具注册]
B --> C[生成JSON Schema]
C --> D[喂给LLM]
D --> E[LLM理解工具]
E --> F[LLM决策调用]
F --> G[框架执行函数]
G --> H[返回结果给LLM]
style A fill:#ffd700
style C fill:#ff6b6b
style E fill:#4ecdc4
style G fill:#95e1d3
🔍 工具调用流程
- 框架将Python函数的
name、docstring和type hints转换成JSON Schema - JSON Schema作为系统提示词的一部分喂给LLM
- LLM根据用户问题决定是否调用工具及参数
- 框架解析LLM输出,执行对应的Python函数
- 将执行结果返回给LLM继续推理
🧠 3. Context管理机制:记忆系统
核心思考:为什么需要Context管理?LLM是无状态的,它记不住你说过什么,且Context Window是昂贵的资源。
graph TB
A[记忆系统] --> B[短期记忆
Window] A --> C[长期记忆
RAG] B --> B1[对话历史截断] B --> B2[滑动窗口策略] B --> B3[避免Token爆炸] B --> B4[Session ID管理] C --> C1[VectorStoreIndex
向量索引] C --> C2[文档分块与
Embedding] C --> C3[相似度检索] C --> C4[持久化存储] style A fill:#7C3AED,color:#fff style B fill:#48bb78,color:#fff style C fill:#ed8936,color:#fff
Window] A --> C[长期记忆
RAG] B --> B1[对话历史截断] B --> B2[滑动窗口策略] B --> B3[避免Token爆炸] B --> B4[Session ID管理] C --> C1[VectorStoreIndex
向量索引] C --> C2[文档分块与
Embedding] C --> C3[相似度检索] C --> C4[持久化存储] style A fill:#7C3AED,color:#fff style B fill:#48bb78,color:#fff style C fill:#ed8936,color:#fff
三大框架记忆管理对比
| 框架 | 短期记忆 | 长期记忆 |
|---|---|---|
| LangChain | RunnableWithMessageHistory + session_id | 需集成VectorStore |
| Qwen-Agent | messages列表手动管理 | files参数加载文档 |
| LlamaIndex | Agent chat()内置 | 专业级VectorStoreIndex |
💡 记忆管理关键点
- Session ID:多用户并发的基础,每个用户独立的对话历史
- 滑动窗口:只保留最近N轮对话,防止Token超限
- RAG检索:利用向量数据库进行相关性检索,而非时间顺序回忆
🎯 4. 控制流编排 (Orchestration)
核心思考:复杂的任务不能靠LLM一口气说完,需要拆解步骤。
四种编排模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 管道模式 (Pipeline) | LangChain的 prompt | llm | parser 链式调用 | 线性处理流程 |
| 单人模式 (Loop) | 经典ReAct循环:思考→行动→观察 | 单Agent完成任务 |
| 多人模式 (DAG) | 接力赛:明确的执行顺序 | 流程化任务(如投资决策) |
| 多人模式 (Chat) | 圆桌会议:自由讨论 | 开放式协作 |
graph TB
subgraph Pipeline[管道模式 - LangChain LCEL]
P1[Prompt] -->|pipe| P2[LLM]
P2 -->|pipe| P3[Parser]
P3 --> P4[输出]
end
subgraph ReAct[循环模式 - ReAct Agent]
R1[Thought
思考] --> R2[Action
行动] R2 --> R3[Observation
观察] R3 --> R1 R3 -.完成.-> R4[Final Answer] end subgraph DAG[多人模式 - DAG] D1[数据员] --> D2[分析师] D2 --> D3[风控官] D3 --> D4[交易员] end style Pipeline fill:#e3f2fd style ReAct fill:#fff3e0 style DAG fill:#f3e5f5
思考] --> R2[Action
行动] R2 --> R3[Observation
观察] R3 --> R1 R3 -.完成.-> R4[Final Answer] end subgraph DAG[多人模式 - DAG] D1[数据员] --> D2[分析师] D2 --> D3[风控官] D3 --> D4[交易员] end style Pipeline fill:#e3f2fd style ReAct fill:#fff3e0 style DAG fill:#f3e5f5
🏆 主流AI Agent框架对比
mindmap
root((AI Agent
框架)) LangChain 全能型框架 LCEL管道语法 丰富生态 100+模型支持 LlamaIndex RAG专家 Index优先 向量索引 文档处理 Qwen-Agent 轻量级 工具调用 Code Interpreter 内置WebUI AutoGen 多智能体 GroupChat 角色协作 微软生态
框架)) LangChain 全能型框架 LCEL管道语法 丰富生态 100+模型支持 LlamaIndex RAG专家 Index优先 向量索引 文档处理 Qwen-Agent 轻量级 工具调用 Code Interpreter 内置WebUI AutoGen 多智能体 GroupChat 角色协作 微软生态
详细对比表
| 维度 | LangChain | LlamaIndex | Qwen-Agent | AutoGen |
|---|---|---|---|---|
| 核心定位 | 全能型框架 | RAG数据接口 | 轻量工具调用 | 多Agent协作 |
| 工具注册 | @tool装饰器 | FunctionTool类 | @register_tool装饰器 | @register装饰器 |
| RAG支持 | 需集成VectorStore | 专业级向量索引 | 基础文件读取 | 需自行集成 |
| 多Agent | LangGraph支持 | 需自行编排 | 基础支持 | 原生GroupChat |
| 代码执行 | 需集成 | 需集成 | 内置code_interpreter | UserProxyAgent |
| 学习曲线 | 中等 | 中等 | 简单 | 中等 |
| 生态完整度 | 最丰富 | RAG社区 | 阿里生态 | 微软生态 |
🎯 框架选型决策树
graph TD
Start[开始选型] --> Q1{主要做RAG
文档问答?} Q1 -->|是| LlamaIndex[✅ LlamaIndex
专业RAG能力
向量索引优化] Q1 -->|否| Q2{需要多Agent
协作?} Q2 -->|是| AutoGen[✅ AutoGen
GroupChat
角色分工] Q2 -->|否| Q3{需要代码执行
数据分析?} Q3 -->|是| QwenAgent[✅ Qwen-Agent
Code Interpreter
内置WebUI] Q3 -->|否| Q4{需要复杂流程
编排?} Q4 -->|是| LangChain1[✅ LangChain
LCEL管道
丰富组件] Q4 -->|否| Q5{快速原型
开发?} Q5 -->|是| QwenAgent2[✅ Qwen-Agent
配置简单
快速上手] Q5 -->|否| LangChain2[✅ LangChain
通用选择
生态丰富] style LlamaIndex fill:#48bb78,color:#fff style AutoGen fill:#ed8936,color:#fff style QwenAgent fill:#4299e1,color:#fff style QwenAgent2 fill:#4299e1,color:#fff style LangChain1 fill:#9f7aea,color:#fff style LangChain2 fill:#9f7aea,color:#fff
文档问答?} Q1 -->|是| LlamaIndex[✅ LlamaIndex
专业RAG能力
向量索引优化] Q1 -->|否| Q2{需要多Agent
协作?} Q2 -->|是| AutoGen[✅ AutoGen
GroupChat
角色分工] Q2 -->|否| Q3{需要代码执行
数据分析?} Q3 -->|是| QwenAgent[✅ Qwen-Agent
Code Interpreter
内置WebUI] Q3 -->|否| Q4{需要复杂流程
编排?} Q4 -->|是| LangChain1[✅ LangChain
LCEL管道
丰富组件] Q4 -->|否| Q5{快速原型
开发?} Q5 -->|是| QwenAgent2[✅ Qwen-Agent
配置简单
快速上手] Q5 -->|否| LangChain2[✅ LangChain
通用选择
生态丰富] style LlamaIndex fill:#48bb78,color:#fff style AutoGen fill:#ed8936,color:#fff style QwenAgent fill:#4299e1,color:#fff style QwenAgent2 fill:#4299e1,color:#fff style LangChain1 fill:#9f7aea,color:#fff style LangChain2 fill:#9f7aea,color:#fff
💼 典型应用场景
📚 场景1:企业知识库问答
推荐:LlamaIndex
- 一站式文档处理能力
- 多种检索策略(向量、关键词、混合)
- 索引持久化,支持增量更新
- 适用:内部文档、FAQ、操作手册、合同审查
🚀 场景2:快速Demo/POC
推荐:Qwen-Agent
- 配置最简单
- 内置WebUI,无需前端开发
- 开箱即用的工具(code_interpreter)
- 适用:原型验证、数据分析、图像处理
🔧 场景3:复杂业务流程
推荐:LangChain
- LCEL支持灵活的流程编排
- 丰富的组件生态
- 可与其他框架组合使用
- 适用:工具调用链、多步骤处理、客服机器人
👥 场景4:多人协作任务
推荐:AutoGen
- 多智能体协同对话
- 支持角色自定义与任务分工
- 内置群聊管理与执行控制
- 适用:投资决策、代码审查、创意讨论
📖 案例:多文件智能问答Agent
场景:搭建一个保险产品智能问答Agent,用于帮助用户快速了解各类保险产品的详细信息。
RAG核心流程
sequenceDiagram
participant User as 用户
participant Agent as Agent
participant Retriever as 检索器
participant VectorDB as 向量数据库
participant LLM as 大语言模型
User->>Agent: 介绍下雇主责任险
Agent->>Retriever: 查询请求
Retriever->>VectorDB: 向量相似度检索
VectorDB-->>Retriever: 返回Top-K文档片段
Retriever-->>Agent: 相关文档内容
Agent->>LLM: Prompt + 文档上下文 + 用户问题
LLM-->>Agent: 生成回答
Agent-->>User: 基于文档的准确回答
🎯 为什么需要RAG?
- LLM没有私有数据的知识
- 避免模型幻觉(编造信息)
- 回答可追溯到具体文档来源
- 支持实时更新知识库
🤝 AutoGen多智能体协作
投资委员会案例
graph LR
User[用户查询:
分析宁德时代] --> Manager[GroupChatManager] Manager --> Agent1[数据员
DataAgent] Manager --> Agent2[分析师
AnalystAgent] Manager --> Agent3[风控官
RiskAgent] Manager --> Agent4[交易员
TraderAgent] Agent1 -->|获取股票数据| Tool1[fetch_stock_data] Agent2 -->|分析财务指标| Result1[分析报告] Agent3 -->|评估风险| Result2[风险评估] Agent4 -->|给出建议| Result3[交易建议] Result1 --> Final[最终决策] Result2 --> Final Result3 --> Final style Manager fill:#7C3AED,color:#fff style Agent1 fill:#48bb78,color:#fff style Agent2 fill:#ed8936,color:#fff style Agent3 fill:#f6ad55,color:#fff style Agent4 fill:#4299e1,color:#fff style Final fill:#9f7aea,color:#fff
分析宁德时代] --> Manager[GroupChatManager] Manager --> Agent1[数据员
DataAgent] Manager --> Agent2[分析师
AnalystAgent] Manager --> Agent3[风控官
RiskAgent] Manager --> Agent4[交易员
TraderAgent] Agent1 -->|获取股票数据| Tool1[fetch_stock_data] Agent2 -->|分析财务指标| Result1[分析报告] Agent3 -->|评估风险| Result2[风险评估] Agent4 -->|给出建议| Result3[交易建议] Result1 --> Final[最终决策] Result2 --> Final Result3 --> Final style Manager fill:#7C3AED,color:#fff style Agent1 fill:#48bb78,color:#fff style Agent2 fill:#ed8936,color:#fff style Agent3 fill:#f6ad55,color:#fff style Agent4 fill:#4299e1,color:#fff style Final fill:#9f7aea,color:#fff
发言者选择策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
| round_robin | 按agents列表顺序轮流发言 | 流程明确的任务(数据→分析→风控→决策) |
| random | 随机选择下一个发言者 | 头脑风暴、创意讨论 |
| auto | 由LLM判断谁最适合回答当前问题 | 开放式讨论、问答场景 |
| 自定义函数 | 完全控制选择逻辑 | 复杂业务流程、条件分支 |
💡 GroupChat核心概念
- Agent定义:每个Agent有独立的name、system_message、llm_config和tools
- GroupChat:将多个Agent放在同一个对话中协作的容器
- GroupChatManager:负责选择下一个发言者,管理对话流程
- max_round:限制最大对话轮数,防止无限循环
🏗️ AI Agent架构设计原则
graph TB
subgraph 设计原则
P1[模块化设计]
P2[接口统一]
P3[可扩展性]
P4[容错机制]
end
P1 --> D1[LLM层/工具层/记忆层/编排层分离]
P2 --> D2[统一的调用接口和数据格式]
P3 --> D3[插件化工具注册/灵活的流程编排]
P4 --> D4[错误重试/降级策略/日志监控]
D1 --> B1[易于维护和测试]
D2 --> B2[降低学习成本]
D3 --> B3[快速适应新需求]
D4 --> B4[提高系统稳定性]
style P1 fill:#48bb78,color:#fff
style P2 fill:#ed8936,color:#fff
style P3 fill:#4299e1,color:#fff
style P4 fill:#9f7aea,color:#fff
🎨 最佳实践
- 分层架构:清晰的层次划分,每层职责单一
- 依赖注入:通过配置注入LLM、工具等依赖,便于测试和替换
- 异步处理:支持流式输出和异步调用,提升用户体验
- 监控日志:记录关键步骤和错误信息,便于调试和优化
- 成本控制:Token计数、缓存机制、模型选择策略
🎨 框架特性可视化
LangChain
管道编排
LlamaIndex
文档索引
Qwen-Agent
代码执行
AutoGen
多智能体
📝 核心要点总结
graph LR
A[AI Agent框架] --> B[四大核心]
B --> B1[LLM适配层
统一接口] B --> B2[工具注册
能力扩展] B --> B3[记忆管理
上下文维护] B --> B4[控制流编排
任务分解] A --> C[选型考虑] C --> C1[业务场景] C --> C2[技术栈] C --> C3[团队能力] C --> C4[生态支持] style A fill:#7C3AED,color:#fff style B fill:#48bb78,color:#fff style C fill:#ed8936,color:#fff
统一接口] B --> B2[工具注册
能力扩展] B --> B3[记忆管理
上下文维护] B --> B4[控制流编排
任务分解] A --> C[选型考虑] C --> C1[业务场景] C --> C2[技术栈] C --> C3[团队能力] C --> C4[生态支持] style A fill:#7C3AED,color:#fff style B fill:#48bb78,color:#fff style C fill:#ed8936,color:#fff
🎯 选型建议速查
- 企业知识库、文档问答 → LlamaIndex(专业RAG)
- 快速原型、数据分析 → Qwen-Agent(轻量快速)
- 复杂流程、通用应用 → LangChain(生态丰富)
- 多角色协作、决策系统 → AutoGen(多智能体)
💡 关键洞察:没有最好的框架,只有最适合的框架。根据具体业务场景、团队技术栈和项目需求来选择,甚至可以组合使用多个框架的优势。
🚀 技术演进趋势
timeline
title AI Agent框架发展历程
2022 : LangChain发布 : 开创LCEL管道语法
2023 : LlamaIndex崛起 : RAG成为主流 : AutoGen多智能体
2024 : Qwen-Agent发布 : Code Interpreter普及 : 长上下文突破
2025 : Agent Framework : 微软新一代框架 : 多模态Agent
2026 : 框架融合 : 标准化接口 : 企业级应用
🔮 未来趋势
- 标准化:统一的Agent接口标准,框架间互操作性增强
- 多模态:文本、图像、音频、视频的统一处理能力
- 自主性:更强的自主规划和决策能力,减少人工干预
- 安全性:沙箱隔离、权限控制、审计日志成为标配
- 企业级:高可用、可观测、可扩展的生产级部署方案