AI Agent框架哪家强:Google ADK、Autogen、Langchain与CrewAI
多智能体系统最近确实很火——让好几个专业AI智能体协作,解决单一模型搞不定的复杂问题,听起来就很有想象空间。这种架构正在推动更精细的自动化、更复杂的问题求解,以及真正自主化的工作流程。
就在大家还在琢磨怎么用好这类框架的时候,Google拿出了自己的方案:Agent Development Kit(ADK)。但问题是,市场上已经有了Microsoft的Autogen、灵活的Langchain、以及主打协作的CrewAI这些成熟选手。开发者们现在就面临一个关键选择:到底哪个框架最对自己的胃口?
这篇文章就来拆解一下Google ADK,同时把它和Autogen、Langchain、CrewAI放在几个关键维度上做一个硬核对比。
1. 集成与生态系统(模型与基础设施)
选框架的时候,第一个核心问题就是:你到底更需要和特定云基础设施深度绑定(比如ADK和Google Cloud Platform的结合),还是更看重模型选择和部署位置的自由度?目前大多数框架都支持各种模型,但它们背后的基础设施集成思路,差别其实相当大。
ADK(Google基础设施优先,但通过LiteLLM支持广泛模型)
ADK最大的独到之处,是和Google Cloud Platform(GCP)基础设施的可选深度集成——像Vertex AI智能体引擎、Cloud Run这些托管服务,都是它特有的优势。不过,通过LiteLLM这类封装工具,ADK也能连接超过100家大语言模型(LLM)提供商。所以模型访问的灵活度其实相当不错。
ADK适合那些既想用上Google优化基础设施,又不希望被模型选择完全绑死的用户——到底是走GCP深度优化路线,还是追求模型多样性,取决于你更看重哪一头。

代码示例 1(原生Gemini):
from google.adk.agents import Agent
from google.adk.tools import google_search
assistant = Agent(
name="gcp_assistant",
model="gemini-2.0-flash", # 直接使用,可能会在 Vertex AI 上优化
instruction="回答问题,必要时使用搜索。",
# google_search 是预构建工具,允许智能体执行 Google 搜索
tools=[google_search]
)
print("ADK 智能体已配置为使用原生 Gemini。")
代码示例 2(通过LiteLLM使用OpenAI及其他模型):
# 需要:pip install litellm
from google.adk.agents import Agent
from google.adk.llm_config import LiteLlm # 假设的 LiteLLM 集成封装
openai_llm = LiteLlm(model="openai/gpt-4o-mini") # 通过 LiteLLM 指定提供商/模型
openai_agent = Agent(
name="openai_via_adk",
llm=openai_llm, # 传递 LiteLLM 配置
instruction="你由 OpenAI 提供支持,通过 ADK + LiteLLM 访问。"
)
print("ADK 智能体已配置为通过 LiteLLM 使用 OpenAI。")
# 需要设置 OPENAI_API_KEY 环境变量
Autogen(配置驱动,基础设施无关)
Autogen走的是配置驱动的路线——通过列表来定义大语言模型端点(比如OpenAI、Azure OpenAI,甚至本地模型像LLaMA都可以)。它同样支持LiteLLM来拓展模型访问范围。因为对基础设施几乎没什么依赖,Autogen在跨云部署或者本地落地时非常灵活,没有任何锁定问题。

代码示例(加载配置):
from autogen import AssistantAgent, config_list_from_json
config_list_openai = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
assistant_openai = AssistantAgent(
name="openai_assistant",
llm_config={"config_list": config_list_openai}
)
print("Autogen 智能体通过 OAI_CONFIG_LIST 配置完成。")
# OAI_CONFIG_LIST 是指定 API 密钥和端点的 JSON 文件或环境变量
# 例如:[{"model": "gpt-4", "api_key": "..."}]
Langchain(高度提供商无关 - 模型与基础设施)
Langchain在“提供商无关”这件事上做得相当彻底。用户可以从几乎任何来源(Google、OpenAI、Hugging Face……)显式实例化模型。它的工具集成库(检索、记忆)、向量存储(Pinecone、FAISS等)都非常丰富,而且和特定云基础设施没有任何固有绑定。适应性极强。简单说,如果你需要强大的集成能力,同时又不想被单一提供商或基础设施绑定,Langchain是首选。
代码示例(显式Google模型):
from langchain_openai import ChatOpenAI # 显式导入 OpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 实例化特定提供商的模型类
openai_llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
prompt = ChatPromptTemplate.from_template("告诉我关于 {topic} 的信息")
chain_openai = prompt | openai_llm | StrOutputParser()
print("Langchain 使用显式导入的 ChatOpenAI 模型。")
# result = chain_openai.invoke({"topic": "Langchain"})
CrewAI(独立,传递大语言模型实例)
CrewAI的重心在智能体编排和角色定义上。它要求用户提供已经配置好的大语言模型实例(通常来自Langchain或通过LiteLLM)。和基础设施无关,没有特定的云或者模型依赖,保持轻量且适应性强。如果你希望定义协作式智能体工作流程,同时对大语言模型和部署环境有完全控制权,CrewAI很合适——模型灵活性完全取决于你提供的实例。
代码示例(传递Langchain大语言模型):
from crewai import Agent
from langchain_community.llms import Ollama # 需要 langchain-community
# 概念性:通过 Ollama 配置本地模型连接
local_llm = Ollama(model="llama3") # 假设 Ollama 服务器正在运行
local_agent = Agent(
role='编码者',
goal='编写 Python 代码',
backstory='...',
llm=local_llm # 传递本地大语言模型实例
)
print("CrewAI 智能体概念性使用传入的本地 Ollama 实例。")
2. 开发方式
选AI框架时,一个关键考量是你在开发过程中到底想要哪种抽象程度。这个权衡决定了你设计和实现智能体及工作流程的具体方式。ADK、Autogen、Langchain和CrewAI这四种框架,各自走了完全不同的路:面向对象类实例化、分层API、函数式组合、以及声明式角色。
ADK(代码优先,基于类)
ADK很传统,走了面向对象编程(OOP)的路线。开发者通过构造函数参数实例化智能体类(比如Agent、SequentialAgent)并配置其行为。对熟悉OOP的人来说,这种方式相当直观,是一种代码优先的智能体和工作流程定义方式。
代码示例(工作流程智能体):
from google.adk.agents import Agent, SequentialAgent
step1 = Agent(name="step1", model="gemini-2.0-flash", instruction="...")
step2 = Agent(name="step2", model="gemini-2.0-flash", instruction="...")
# 使用特定的工作流程智能体类
pipeline = SequentialAgent(
name="my_sequential_task",
sub_agents=[step1, step2] # 通过参数配置
)
print("ADK:实例化特定工作流程智能体(SequentialAgent)。")
Autogen(分层API)
Autogen提供的是分层API,在易用性和自定义能力之间找了平衡。它包括用于常见任务(如助手-用户交互)的高层智能体(比如AssistantAgent、UserProxyAgent),也有用于需要更多行为控制的低层智能体ConversableAgent。适合那些希望先用高层智能体快速做原型、同时又保留深入自定义逻辑选项的用户。
代码示例 1(高层智能体):
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
config_list = config_list_from_json("OAI_CONFIG_LIST")
llm_config = {"config_list": config_list}
# 用于常见角色的高层智能体类型
assistant = AssistantAgent(name="assistant", llm_config=llm_config)
user_proxy = UserProxyAgent(name="user_proxy", human_input_mode="NEVER", code_execution_config=False)
print("Autogen:使用高层 AssistantAgent 和 UserProxyAgent。")
代码示例 2(概念性 - 自定义智能体):
from autogen import ConversableAgent # 提供更多控制的基类
class MyCustomAgent(ConversableAgent): # 继承以实现自定义逻辑
def __init__(self, name, custom_param, **kwargs):
super().__init__(name, **kwargs)
self.custom_param = custom_param
# 重写方法如 generate_reply 以实现自定义行为
# ...
# custom_agent = MyCustomAgent(...)
print("Autogen:概念性自定义智能体,继承自 ConversableAgent。")
Langchain(模块化组件与LCEL)
Langchain强调模块化和可组合性。开发者可以通过LangChain表达式语言(LCEL),用管道(|)操作符来组合组件(比如提示、模型、工具)。它还提供工厂函数如create_tool_calling_agent,用于预配置的智能体组装。
代码示例 2(智能体工厂函数):
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
@tool
def get_length(s: str) -> int:
"""获取字符串长度。"""
return len(s)
tools = [get_length]
model = ChatOpenAI(model="gpt-4o-mini")
# 使用工厂函数组装智能体可运行对象
# 注意:提示结构对这些智能体有特定要求
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}") # 关键占位符
])
agent_runnable = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent_runnable, tools=tools, verbose=True)
print("Langchain:使用工厂函数创建智能体。")
# result = agent_executor.invoke({"input": "‘hello’ 的长度是多少?"})
CrewAI(声明式角色/目标)
CrewAI走的是声明式、基于角色的路线。通过用自然语言描述智能体的角色、目标和背景故事来定义它。框架根据这些描述来塑造智能体行为,优先考虑易用性而非技术复杂性。
代码示例(具有特定配置的智能体):
from crewai import Agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# 具有更多特定配置选项的智能体
senior_researcher = Agent(
role='高级 AI 研究员',
goal='探索尖端 AI 技术',
backstory='拥有数十年 AI 研究经验的博士。',
llm=llm,
allow_delegation=False, # 禁止该智能体委托任务
max_iter=5, # 限制其任务的迭代次数
verbose=True
)
print("CrewAI:具有附加配置(allow_delegation、max_iter)的智能体。")
3. 多智能体架构
设计多智能体系统时,核心的权衡在于如何组织智能体之间的协作。每个框架都提供了不同的编排方式,在控制力、灵活性和易用性之间各有侧重。下面来逐一拆解这些范式,并看看各自适合什么样的场景。
ADK(层次化组合/工作流程)
ADK通过专用工作流程智能体(比如SequentialAgent、ParallelAgent)或者由LLM驱动的路由智能体,来构建多智能体协作。这种方法强调显式的层次化组合——工作流程预定义,子智能体按照结构化的顺序或并发方式来执行任务。
代码示例(概念性 - 并行工作流程):
from google.adk.agents import Agent, ParallelAgent
task_a = Agent(name="task_a", model="gemini-2.0-flash", instruction="执行任务 A。")
task_b = Agent(name="task_b", model="gemini-2.0-flash", instruction="执行任务 B。")
# 概念性:并发运行子智能体
parallel_tasks = ParallelAgent(
name="concurrent_work",
sub_agents=[task_a, task_b]
)
print("ADK:概念性 ParallelAgent 工作流程。")
# results = parallel_tasks.run("输入数据") # 返回两者的结果
Autogen(对话聚焦/群聊)
Autogen把多智能体协作建模成对话——用initiate_chat实现双智能体交互,或者通过GroupChat和GroupChatManager来实现多智能体讨论。智能体根据预定义角色或动态编排轮流执行,模仿类人对话。
代码示例(概念性 - 群聊):
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager
# 定义多个智能体...
config_list = config_list_from_json("OAI_CONFIG_LIST")
llm_config = {"config_list": config_list}
coder = AssistantAgent(name="coder", llm_config=llm_config)
pm = AssistantAgent(name="project_manager", llm_config=llm_config)
tester = AssistantAgent(name="tester", llm_config=llm_config)
user_proxy = UserProxyAgent(name="user", human_input_mode="NEVER")
groupchat = GroupChat(agents=[user_proxy, coder, pm, tester], messages=[], max_round=10)
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# user_proxy.initiate_chat(manager, message="开发并测试功能 X。")
print("Autogen:概念性群聊设置。")
Langchain(通用智能体 + LangGraph 用于复杂编排)
Langchain的基础智能体以线性方式处理简单的工具使用。但对于复杂、有状态的多智能体交互,LangGraph才是正解。它允许开发者定义状态图,包含节点(智能体)和边(转换),支持循环和条件流。
代码示例(概念性 - LangGraph 结构):
# 文件名:langchain_multi_2_conceptual.py
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
class AgentState(TypedDict): # 共享状态
input: str
result: str
sender: str
# 占位符智能体可运行对象(实现省略)
def agent_1_runnable(state): return {"result": "A1", "sender": "agent1"}
def agent_2_runnable(state): return {"result": "A2", "sender": "agent2"}
workflow = StateGraph(AgentState)
workflow.add_node("agent1", agent_1_runnable)
workflow.add_node("agent2", agent_2_runnable)
workflow.set_entry_point("agent1")
workflow.add_conditional_edges("agent1", lambda state: state['sender'], {"agent2": "agent2", "__end__": END})
workflow.add_edge('agent2', 'agent1') # 循环流
app = workflow.compile()
print("Langchain:概念性 LangGraph 结构,用于有状态的多智能体流。")
CrewAI(基于角色的团队与任务流程)
CrewAI把智能体组织成团队,每个智能体都有明确的角色,任务按照定义的流程(比如顺序或层次)执行。协作由任务依赖和委托来驱动,由角色定义来引导。
代码示例(概念性 - LangGraph 结构):
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
manager = Agent(role='管理者', goal='监督项目', backstory='...', llm=llm) # 管理者智能体
worker1 = Agent(role='工作者1', goal='...', backstory='...', llm=llm)
worker2 = Agent(role='工作者2', goal='...', backstory='...', llm=llm)
task_delegation = Task(description="为项目 X 分配子任务", agent=manager, expected_output="...")
# 工作者任务可能动态创建或定义以供拾取
# 具有管理者智能体委托任务的团队
hierarchical_crew = Crew(
agents=[manager, worker1, worker2],
tasks=[task_delegation], # 从管理者的任务开始
process=Process.hierarchical, # 启用委托流程
manager_llm=llm # 为管理者角色指定大语言模型
)
# 顺序任务执行的团队
# sequential_crew = Crew(
# agents=[researcher, writer],
# tasks=[task1, task2],
# process=Process.sequential # 任务按顺序运行
# )
print("CrewAI:定义了具有层次流程的团队(管理者委托)。")
# result = hierarchical_crew.kickoff()
4. 工具与扩展性
在把工具集成到AI框架时,核心的权衡在于:你是更看重庞大的预构建工具库(Langchain)、无缝的Google服务集成(ADK),还是强大的自定义工具定义(各框架都支持,但方式各异)。下面来逐一分析。
ADK(Google工具 + 自定义/OpenAPI)
ADK在集成Google服务(比如Google搜索、Vertex AI工具)方面非常轻松,这得益于和GCP的深度对齐。它支持通过Python函数(靠文档字符串定义功能)来实现自定义工具,也可能支持OpenAPI规范来做结构化工具定义——虽然这部分文档还比较少。
代码示例 1(带有文档字符串的函数):
from google.adk.agents import Agent
import datetime
def get_current_iso_time() -> str:
"""返回当前日期和时间的 ISO 格式。""" # 文档字符串解释工具功能
return datetime.datetime.now().isoformat()
time_agent = Agent(
name="time_agent", model="gemini-2.0-flash",
instruction="如果被问到,告知当前时间。",
tools=[get_current_iso_time] # 直接传递函数
)
print("ADK:工具定义为带有文档字符串的 Python 函数。")
代码示例 2(概念性 - @tool 装饰器):
# 概念性:ADK 可能提供类似于其他框架的装饰器
from google.adk.tools import tool # 假设导入
from google.adk.agents import Agent
@tool("weather_lookup") # 装饰器定义名称/模式
def get_weather(city: str, unit: str = "celsius") -> str:
"""获取城市天气。单位可以是 'celsius' 或 'fahrenheit'。"""
# (API 调用实现)
return f"{city} 的天气是晴天,25 {unit}。"
weather_agent = Agent(
name="weather_agent", model="gemini-2.0-flash",
instruction="提供天气预报。",
tools=[get_weather]
)
print("ADK:概念性工具定义,使用 @tool 装饰器。")
Autogen(函数注册/大语言模型函数调用)
Autogen通过register_function支持工具注册,可以把Python函数链接到智能体;或者通过在llm_config中传递工具模式(比如OpenAI格式)来实现大语言模型原生工具调用。这种双重方法平衡了显式控制和LLM驱动的调用。
代码示例(大语言模型工具调用配置):
from autogen import AssistantAgent, config_list_from_json
import json
# 以 OpenAI 格式定义工具模式
calculator_schema = {
"type": "function",
"function": {
"name": "calculator",
"description": "计算表达式的结果。",
"parameters": {
"type": "object",
"properties": {"expression": {"type": "string", "description": "数学表达式"}},
"required": ["expression"],
},
},
}
# 实际计算器函数需在其他地方可调用/注册
def calculator(expression: str) -> str: return str(eval(expression)) # 不安全的 eval
config_list = config_list_from_json("OAI_CONFIG_LIST")
llm_config_tools = {
"config_list": config_list,
"tools": [calculator_schema] # 将模式传递到大语言模型配置
}
calculator_agent = AssistantAgent(
name="calculator_agent",
llm_config=llm_config_tools
)
print("Autogen:通过 llm_config 中的 'tools' 列表配置工具,以实现大语言模型工具调用。")
# 如果配置正确,智能体将直接输出工具调用
Langchain(最大工具库 + @tool 装饰器/BaseTool)
Langchain拥有最庞大的预构建工具库(比如DuckDuckGo、Wikipedia)和工具包(比如SQL、文件管理)。自定义工具可以通过@tool装饰器快速定义,也可以用BaseTool类来实现有状态的复杂逻辑。
代码示例(导入预构建 + 自定义工具):
from langchain_community.tools import DuckDuckGoSearchRun # 导入特定工具
# from langchain.agents import load_tools # 替代批量加载
from langchain.agents import AgentExecutor # ... 其他导入
from langchain_core.tools import tool
@tool
def get_word_length(word: str) -> int: return len(word)
# 初始化预构建工具
search = DuckDuckGoSearchRun()
# 组合自定义和预构建工具
tools = [get_word_length, search]
# agent_executor = AgentExecutor(..., tools=tools, ...)
print("Langchain:使用预构建工具(DuckDuckGoSearchRun)结合自定义工具。")
CrewAI(自有工具包 + Langchain工具 + 自定义)
CrewAI提供了自有的crewai-tools包(比如用于搜索的SerperDevTool),支持直接使用Langchain的工具,并通过crewai_tools的@tool装饰器或BaseTool子类化来实现自定义工具——思路和Langchain很像。
from crewai_tools import tool # 从 crewai_tools 导入
# 需要:pip install 'crewai[tools]'
from crewai_tools import SerperDevTool # 示例预构建搜索工具
from crewai import Agent # ... 其他导入
@tool("FileReadTool")
def read_file(file_path: str) -> str:
"""读取文件内容。"""
try:
with open(file_path, 'r') as f:
return f.read()
except Exception as e:
return f"读取文件错误:{e}"
search_tool = SerperDevTool()
file_agent = Agent(
# ... 其他参数 ...
tools=[read_file, search_tool]
)
print("CrewAI:使用 crewai_tools 的 @tool 装饰器定义工具。")
5. 用户界面与部署准备
ADK、Autogen、Langchain和CrewAI本质上是基于代码的库,但它们的生态系统为添加用户界面(UI)和实现生产就绪的部署提供了强大支持。在内置UI支持和部署优化方面,各有不同的侧重点。
ADK:开发者UI和Google优化部署
用户界面
# 文件名:adk_web_ui.py
from google.adk.agents import Agent
# 定义简单智能体
agent = Agent(
name="chat_agent",
model="gemini-2.0-flash",
instruction="回答用户查询。"
)
# 保存此文件,然后在终端运行:
# 1. 安装:pip install google-adk
# 2. 运行:adk web --agent-file adk_web_ui.py
# 访问 http://localhost:8080(默认端口)
print("ADK:运行 'adk web --agent-file adk_web_ui.py' 以启动原生 Web UI。")
部署
Autogen:无代码UI和灵活部署
用户界面
# 终端命令安装并运行 Autogen Studio
pip install autogenstudio
autogenstudio ui --port 8081
# 访问 http://localhost:8081
部署
Langchain:社区UI和API部署
用户界面
部署
CrewAI:UI Studio和多功能部署
用户界面
部署
# 文件名:crewai_streamlit_ui.py
# 安装:pip install crewai streamlit langchain-openai
from crewai import Agent, Task, Crew
from langchain_openai import ChatOpenAI
import streamlit as st
# 定义简单团队
llm = ChatOpenAI(model="gpt-4o-mini")
agent = Agent(role="助手", goal="协助用户", backstory="友好的 AI", llm=llm)
task = Task(description="回答用户查询:{query}", agent=agent, expected_output="文本响应")
crew = Crew(agents=[agent], tasks=[task])
# Streamlit UI
st.title("CrewAI 助手")
query = st.text_input("提问:")
if query:
task.description = f"回答用户查询:{query}"
result = crew.kickoff()
st.write(result)
# 运行:streamlit run crewai_streamlit_ui.py
print("CrewAI:运行 'streamlit run crewai_streamlit_ui.py' 以启动 UI。")
这个UI会在http://localhost:8501运行,提供一个简单的团队交互界面。
对比:基于UI的智能体(Manus & Genspark AI)
这些平台代表了不同的理念——优先考虑可访问性:
Manus & Genspark AI
工作方式
权衡
选择哪款框架?
在快速发展的AI智能体开发领域,选对框架对项目成功至关重要。没有通用的“最佳”框架——Google ADK、Autogen、Langchain和CrewAI各有独特优势和权衡。最终选择,取决于框架和你的项目独特需求、团队专业知识和基础设施优先级是否吻合。
·
Google ADK
·
Autogen
·
Langchain
·
CrewAI
·
基于UI的智能体
AI智能体领域发展太快了,需要持续关注新工具和技术。理解每个框架的核心优势,然后根据项目目标做出选择,这样才能构建出推动创新和效率的智能系统。保持开放,持续评估,让你的具体需求来引导你找到最能实现愿景的那个框架。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名