一、什么是 AI Agents?
1.1 AI Agent 的定义
AI Agent(AI 代理)是一种能够自主感知环境、做出决策并采取行动以实现特定目标的智能系统。与传统的AI模型不同,AI Agent 具有以下核心特征:
- 🎯 目标导向性: 能够理解并追求特定目标
- 🔄 自主性: 能够独立决策,无需人工干预每一步
- 🌐 环境感知: 能够获取和理解环境信息
- 🛠️ 工具使用: 能够调用外部工具和API
- 🧠 推理能力: 能够进行多步骤推理和规划
1.2 AI Agent 的核心组成
graph TB
A[AI Agent 核心架构] --> B[感知模块 Perception]
A --> C[决策模块 Reasoning]
A --> D[执行模块 Action]
A --> E[记忆模块 Memory]
B --> B1[环境输入]
B --> B2[用户指令]
B --> B3[工具反馈]
C --> C1[目标规划]
C --> C2[任务分解]
C --> C3[策略选择]
D --> D1[工具调用]
D --> D2[API执行]
D --> D3[结果输出]
E --> E1[短期记忆]
E --> E2[长期记忆]
E --> E3[情景记忆]
style A fill:#4A90E2,color:#fff
style B fill:#50C878,color:#fff
style C fill:#FFB84D,color:#fff
style D fill:#E74C3C,color:#fff
style E fill:#9B59B6,color:#fff
1.3 AI Agent 与传统 AI 的区别
| 特性 | 传统 AI 模型 | AI Agent |
|---|---|---|
| 交互方式 | 单次请求-响应 | 多轮对话、持续交互 |
| 任务处理 | 单一任务 | 多步骤复杂任务 |
| 工具使用 | 无 | 可调用外部工具 |
| 自主性 | 低 | 高 |
| 记忆能力 | 无状态 | 有状态、可记忆 |
二、AI Agent 框架选择指南
2.1 主流 AI Agent 框架概览
mindmap
root((AI Agent 框架))
通用框架
LangChain
成熟生态
丰富组件
Python/JS
LlamaIndex
专注RAG
数据连接
索引优化
AutoGen
多Agent协作
微软开源
对话模式
企业级框架
Semantic Kernel
微软官方
.NET/Python
企业集成
Azure AI Foundry
云原生
托管服务
生产就绪
轻量级框架
CrewAI
简单易用
角色定义
快速原型
Phidata
模块化
工具丰富
灵活扩展
2.2 框架选择决策树
graph TD
Start[开始选择框架] --> Q1{是否需要企业级支持?}
Q1 -->|是| Q2{使用哪种技术栈?}
Q1 -->|否| Q3{项目规模如何?}
Q2 -->|.NET| SK[Semantic Kernel]
Q2 -->|Python/云服务| Azure[Azure AI Foundry]
Q2 -->|跨平台| LC[LangChain]
Q3 -->|大型项目| Q4{核心需求是什么?}
Q3 -->|中小型项目| Q5{快速原型开发?}
Q4 -->|多Agent协作| AG[AutoGen]
Q4 -->|RAG检索| LI[LlamaIndex]
Q4 -->|通用能力| LC2[LangChain]
Q5 -->|是| Crew[CrewAI]
Q5 -->|否| Phi[Phidata]
style Start fill:#4A90E2,color:#fff
style SK fill:#50C878,color:#fff
style Azure fill:#50C878,color:#fff
style LC fill:#50C878,color:#fff
style AG fill:#FFB84D,color:#fff
style LI fill:#FFB84D,color:#fff
style LC2 fill:#FFB84D,color:#fff
style Crew fill:#E74C3C,color:#fff
style Phi fill:#E74C3C,color:#fff
2.3 各框架详细对比
🔷 LangChain
适用场景: 需要快速构建原型、丰富的工具集成
优势:
- ✅ 最成熟的生态系统
- ✅ 大量预构建组件和集成
- ✅ 活跃的社区支持
- ✅ Python 和 JavaScript 双版本
劣势:
- ❌ 学习曲线较陡
- ❌ 抽象层次较多
- ❌ 性能开销相对较大
代码示例:
from langchain.agents import create_openai_functions_agent
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
# 定义工具
tools = [
Tool(
name="Calculator",
func=lambda x: eval(x),
description="用于数学计算"
)
]
# 创建Agent
llm = ChatOpenAI(temperature=0)
agent = create_openai_functions_agent(llm, tools)
🔷 Semantic Kernel (Microsoft)
适用场景: 企业级应用、.NET 生态、与Azure深度集成
优势:
- ✅ 微软官方支持
- ✅ 企业级稳定性
- ✅ 与 Azure 无缝集成
- ✅ 支持 C#、Python、Java
劣势:
- ❌ 社区规模较小
- ❌ 学习资源相对较少
代码示例:
using Microsoft.SemanticKernel;
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(deploymentName, endpoint, apiKey)
.Build();
// 添加插件
kernel.ImportPluginFromType<MathPlugin>();
// 执行
var result = await kernel.InvokePromptAsync(
"计算 25 * 4 并解释结果"
);
🔷 AutoGen
适用场景: 多Agent协作、复杂对话系统
优势:
- ✅ 多Agent协作能力强
- ✅ 灵活的对话模式
- ✅ 支持人机协作
- ✅ 微软研究院出品
劣势:
- ❌ 文档相对不足
- ❌ 调试复杂度高
🔷 LlamaIndex
适用场景: RAG应用、知识库查询、文档问答
优势:
- ✅ RAG 领域最专业
- ✅ 强大的数据连接能力
- ✅ 优秀的索引优化
劣势:
- ❌ 专注RAG,通用性较低
三、框架选择实战建议
3.1 场景匹配矩阵
graph LR
A[应用场景] --> B[聊天机器人]
A --> C[知识问答]
A --> D[任务自动化]
A --> E[多Agent协作]
A --> F[企业应用]
B --> B1[LangChain<br/>CrewAI]
C --> C1[LlamaIndex<br/>LangChain]
D --> D1[LangChain<br/>Phidata]
E --> E1[AutoGen<br/>CrewAI]
F --> F1[Semantic Kernel<br/>Azure AI Foundry]
style A fill:#4A90E2,color:#fff
style B1 fill:#50C878,color:#000
style C1 fill:#50C878,color:#000
style D1 fill:#50C878,color:#000
style E1 fill:#50C878,color:#000
style F1 fill:#50C878,color:#000
3.2 选择建议流程
- 明确需求 → 确定核心功能(RAG/协作/通用)
- 评估规模 → 原型/中型/企业级
- 技术栈 → Python/JS/.NET
- 团队能力 → 学习成本、维护能力
- 生态考量 → 社区支持、文档完善度
3.3 快速上手路径
graph TD
Start[开始学习AI Agent] --> Week1[第1周: 基础概念]
Week1 --> Week2[第2周: 选择框架]
Week2 --> Week3[第3周: 实战项目]
Week3 --> Week4[第4周: 优化部署]
Week1 --> W1T1[理解Agent原理]
Week1 --> W1T2[学习设计模式]
Week2 --> W2T1[安装框架]
Week2 --> W2T2[运行示例]
Week2 --> W2T3[阅读文档]
Week3 --> W3T1[构建简单Agent]
Week3 --> W3T2[集成工具]
Week3 --> W3T3[测试优化]
Week4 --> W4T1[性能优化]
Week4 --> W4T2[部署上线]
Week4 --> W4T3[监控维护]
style Start fill:#4A90E2,color:#fff
style Week1 fill:#50C878,color:#fff
style Week2 fill:#50C878,color:#fff
style Week3 fill:#50C878,color:#fff
style Week4 fill:#50C878,color:#fff
四、实战案例:构建第一个 AI Agent
4.1 使用 LangChain 构建简单客服 Agent
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain.tools import Tool
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
# 1. 定义工具
def search_faq(query: str) -> str:
"""搜索FAQ数据库"""
faq_db = {
"退货": "退货需要在7天内,商品保持完好",
"物流": "一般3-5个工作日送达"
}
return faq_db.get(query, "未找到相关信息")
tools = [
Tool(
name="SearchFAQ",
func=search_faq,
description="搜索常见问题库,输入问题关键词"
)
]
# 2. 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个客服助手,帮助用户解决问题"),
("human", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad")
])
# 3. 初始化LLM和Agent
llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 4. 执行
result = agent_executor.invoke({
"input": "如何退货?"
})
print(result["output"])
4.2 使用 Semantic Kernel 构建任务助手
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
// 1. 创建Kernel
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
deploymentName: "gpt-4",
endpoint: "YOUR_ENDPOINT",
apiKey: "YOUR_API_KEY"
);
var kernel = builder.Build();
// 2. 定义原生函数
[KernelFunction]
[Description("发送邮件")]
public static string SendEmail(
[Description("收件人")] string recipient,
[Description("邮件内容")] string content
)
{
return $"邮件已发送至 {recipient}";
}
// 3. 导入插件
kernel.ImportPluginFromType<EmailPlugin>();
// 4. 执行Agent
var settings = new OpenAIPromptExecutionSettings
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};
var result = await kernel.InvokePromptAsync(
"发送邮件给张三,内容是会议提醒",
new(settings)
);