三大主流智能体框架解析
三种主流智能体开发框架简介
一、LangChain:AI应用的"瑞士军刀"
核心设计理念
LangChain的核心是模块化设计和链式编排。它通过将复杂的AI应用拆解为可复用的组件,让开发者能够像搭积木一样构建应用。
上手步骤
1. 基础环境搭建
# 安装
pip install langchain langchain-openai
# 基础配置
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
# 初始化模型
llm = ChatOpenAI(model="gpt-4", temperature=0.7)
2. 第一个简单应用:问答系统
# 创建提示模板
prompt = ChatPromptTemplate.from_template(
"用中文回答:{question}"
)
# 创建链
chain = LLMChain(llm=llm, prompt=prompt)
# 执行
result = chain.run("什么是机器学习?")
print(result)
3. RAG系统构建
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1. 加载文档
loader = TextLoader("知识库.txt")
documents = loader.load()
# 2. 分割文本
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
docs = text_splitter.split_documents(documents)
# 3. 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)
# 4. 创建检索链
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# 5. 提问
answer = qa_chain.run("文档中提到了哪些关键技术?")
4. 智能体开发(使用LangGraph)
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
# 定义状态
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
next_step: str
# 创建节点
def search_node(state: AgentState):
# 搜索逻辑
return {"messages": ["搜索完成"], "next_step": "analyze"}
def analyze_node(state: AgentState):
# 分析逻辑
return {"messages": ["分析完成"], "next_step": END}
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("search", search_node)
workflow.add_node("analyze", analyze_node)
workflow.add_edge("search", "analyze")
workflow.set_entry_point("search")
# 编译并运行
app = workflow.compile()
result = app.invoke({"messages": [], "next_step": "search"})
设计原理
LangChain的设计核心是组合性(Compositionality)和声明式编程。主要组件包括:
-
Models: LLM接口抽象
-
Prompts: 提示词管理
-
Chains: 任务编排(顺序链、检索链等)
-
Agents: 工具调用决策
-
Memory: 对话状态管理
-
Indexes: 文档检索系统
相关论文
-
ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2022)
-
Chain-of-Thought Prompting (Wei et al., 2022)
-
Retrieval-Augmented Generation (Lewis et al., 2020)
二、AutoGen:多智能体协作框架
核心设计理念
AutoGen采用对话编程(Conversational Programming)范式,通过定义多个具有特定角色的智能体,让它们通过对话协作解决问题。
上手步骤
1. 基础配置
pip install pyautogen
import autogen
from autogen import AssistantAgent, UserProxyAgent
# 配置LLM
config_list = [
{
"model": "gpt-4",
"api_key": "your-key"
}
]
2. 创建两个智能体的对话
# 创建编码助手
assistant = AssistantAgent(
name="Coder",
system_message="你是一个Python专家,负责编写代码",
llm_config={"config_list": config_list}
)
# 创建用户代理(可以执行代码)
user_proxy = UserProxyAgent(
name="User",
human_input_mode="NEVER", # 不等待人工输入
code_execution_config={"work_dir": "coding"}
)
# 发起任务
user_proxy.initiate_chat(
assistant,
message="写一个Python函数,计算斐波那契数列的前n项"
)
3. 多智能体协作(代码审查场景)
# 创建三个不同角色的智能体
coder = AssistantAgent(
name="Coder",
system_message="编写高效、可读的代码",
llm_config={"config_list": config_list}
)
reviewer = AssistantAgent(
name="Reviewer",
system_message="检查代码质量、潜在bug和优化建议",
llm_config={"config_list": config_list}
)
tester = AssistantAgent(
name="Tester",
system_message="编写测试用例,确保代码正确性",
llm_config={"config_list": config_list}
)
# 用户代理协调整个过程
user_proxy = UserProxyAgent(
name="Manager",
max_consecutive_auto_reply=10,
human_input_mode="TERMINATE",
code_execution_config={"work_dir": "coding"}
)
# 定义群组聊天
from autogen import GroupChat, GroupChatManager
groupchat = GroupChat(
agents=[user_proxy, coder, reviewer, tester],
messages=[],
max_round=12
)
manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list})
# 启动协作
user_proxy.initiate_chat(
manager,
message="我们需要一个股票数据分析工具,请协作完成"
)
4. 自定义工具集成
import requests
# 定义自定义工具
def get_stock_price(symbol: str):
"""获取股票价格"""
# 模拟API调用
return f"{symbol} 当前价格: $150.25"
# 注册工具
from autogen import register_function
register_function(
get_stock_price,
caller=assistant, # 哪个智能体可以调用
executor=user_proxy, # 哪个智能体执行
name="get_stock_price",
description="获取指定股票代码的当前价格"
)
# 现在智能体可以自动使用这个工具
user_proxy.initiate_chat(
assistant,
message="请获取AAPL和GOOGL的股票价格,并计算总价值"
)
设计原理
AutoGen的核心是对话状态机和角色定义:
-
对话管理:维护完整的对话历史
-
角色专业化:每个智能体有明确的系统提示
-
自动工具调用:根据对话上下文自动选择合适的工具
-
代码执行:支持在沙箱中运行生成的代码
相关论文
-
AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation (Wu et al., 2023)
-
Communicative Agents for Software Development (Qian et al., 2023)
-
The Rise and Potential of Large Language Model Based Agents (Xi et al., 2023)
三、CrewAI:企业级任务编排框架
核心设计理念
CrewAI采用企业组织架构的隐喻,将任务分解、分配、执行和汇总过程结构化,特别强调角色明确性和任务依赖性。
上手步骤
1. 环境设置
pip install crewai crewai-tools
import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
2. 创建市场调研团队
# 定义工具
search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()
# 创建研究员智能体
researcher = Agent(
role="市场研究员",
goal="深入研究行业趋势和竞争对手",
backstory="你是资深市场分析师,擅长发现市场机会",
tools=[search_tool, scrape_tool],
verbose=True,
allow_delegation=False
)
# 创建策略师智能体
strategist = Agent(
role="商业策略师",
goal="基于研究数据制定商业策略",
backstory="你是经验丰富的商业顾问,擅长制定可行策略",
tools=[search_tool],
verbose=True,
allow_delegation=False
)
# 创建报告员智能体
writer = Agent(
role="报告撰写专家",
goal="将研究和策略转化为专业报告",
backstory="你是技术文档专家,擅长编写清晰专业的商业报告",
verbose=True,
allow_delegation=False
)
3. 定义任务和依赖关系
# 研究任务
research_task = Task(
description="""调研2024年AI智能体框架的发展趋势,
重点关注LangChain、AutoGen、CrewAI三个框架。
收集:1.市场份额数据 2.技术特点 3.用户反馈""",
expected_output="详细的调研报告,包含数据来源和关键发现",
agent=researcher,
output_file="research_findings.md"
)
# 分析任务(依赖研究任务)
analysis_task = Task(
description="""基于调研结果,分析三个框架的:
1.竞争优势 2.市场机会 3.潜在风险
为初创公司推荐最适合的框架""",
expected_output="包含SWOT分析和具体建议的策略报告",
agent=strategist,
context=[research_task] # 明确依赖关系
)
# 报告任务(依赖前两个任务)
report_task = Task(
description="""综合研究和分析结果,撰写一份给CEO的
商业决策报告,包含:执行摘要、详细分析、推荐方案""",
expected_output="专业的企业报告(约2000字)",
agent=writer,
context=[research_task, analysis_task]
)
4. 创建并执行团队
# 组建团队
ai_crew = Crew(
agents=[researcher, strategist, writer],
tasks=[research_task, analysis_task, report_task],
process=Process.sequential, # 顺序执行
verbose=True
)
# 执行任务
result = ai_crew.kickoff()
print("最终报告:\n", result)
5. 高级功能:层级式团队
# 创建子团队(专门处理技术调研)
tech_researcher = Agent(
role="技术研究员",
goal="深度分析框架的技术实现",
backstory="你是软件架构师,擅长技术细节分析",
tools=[scrape_tool],
verbose=True
)
tech_analysis_task = Task(
description="分析三个框架的架构设计、性能特点",
expected_output="技术架构对比报告",
agent=tech_researcher
)
# 主团队协调子团队
manager = Agent(
role="项目经理",
goal="协调所有研究任务,确保按时交付",
backstory="你是资深项目经理,擅长资源调配",
verbose=True
)
# 使用层级式流程
hierarchical_crew = Crew(
agents=[manager, researcher, strategist, writer, tech_researcher],
tasks=[research_task, tech_analysis_task, analysis_task, report_task],
process=Process.hierarchical,
manager_agent=manager,
verbose=True
)
设计原理
CrewAI的设计核心是组织隐喻:
-
角色定义模板:
Agent = {
"role": "明确的职能描述",
"goal": "可衡量的目标",
"backstory": "赋予上下文和动机",
"tools": "可用的能力",
"allow_delegation": "是否允许委派任务"
}
-
任务依赖图:通过
context参数显式定义任务依赖关系 -
流程控制:
-
sequential: 顺序执行 -
hierarchical: 层级管理 -
consensus: 共识决策
-
-
记忆管理:每个Agent有自己的短期记忆,Crew有共享的长期记忆
相关论文
-
CrewAI: Orchestrating Role-Playing Agents for Complex Task Solving (CrewAI Team, 2024)
-
Task-Driven Autonomous Agent (Yohei et al., 2023)
-
Hierarchical Planning and Task Decomposition in Multi-Agent Systems (Durfee, 1999)
四、对比总结与选择指南
特性对比
| 特性 | LangChain | AutoGen | CrewAI |
|---|---|---|---|
| 学习曲线 | 中等 | 较陡 | 平缓 |
| 多智能体支持 | 需要LangGraph | 原生强大 | 原生强大 |
| 企业集成 | 需自定义 | 一般 | 优秀 |
| 任务编排 | 基于图 | 基于对话 | 基于角色 |
| 社区生态 | 最丰富 | 快速增长 | 专注企业 |
| 适合场景 | 技术探索、复杂RAG | 学术研究、代码协作 | 企业流程、商业分析 |
实战建议
-
起步学习:从LangChain开始,理解基础概念
-
多智能体项目:
-
学术/研究:选AutoGen
-
商业/企业:选CrewAI
-
-
生产部署:
-
已有系统集成:LangChain
-
新建企业系统:CrewAI
-
研究原型:AutoGen
-
进阶学习路径
-
第一阶段(1-2周):
-
LangChain基础 + 简单RAG系统
-
理解Chain、Agent、Memory概念
-
-
第二阶段(2-3周):
-
AutoGen多智能体对话
-
实现代码审查流程
-
CrewAI角色定义和任务编排
-
-
第三阶段(3-4周):
-
混合使用框架
-
性能优化和监控
-
部署到生产环境
-
生产注意事项
-
成本控制:
-
设置token限制
-
使用缓存机制
-
选择合适的模型层级
-
-
错误处理:
# 通用错误处理模式
try:
result = agent.run(task)
except RateLimitError:
# 重试逻辑
pass
except TimeoutError:
# 超时处理
pass
-
监控和日志:
-
记录所有LLM调用
-
监控token使用
-
跟踪任务执行时间
-
这些框架各有侧重,选择时最重要的是匹配你的具体需求和技术栈。建议先从小型原型开始,逐步扩展到复杂系统。
更多推荐

所有评论(0)