找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

819

积分

0

好友

107

主题
发表于 7 小时前 | 查看: 0| 回复: 0

动画风格技术学习横幅

可爱的卡通仓鼠角色打招呼

随着 Agent Skills 概念爆火,AI Agent 再次成为技术圈的焦点。今天我们暂且不深入讨论 skills,先回归基础,聊聊如何构建一个常规的 AI 智能体。你可能觉得这很复杂,但其实,我们只需 大约 100 行 Python 代码,就能构建起一个可运行的多智能体对话系统。

想象这样一个场景:你只需要说出“为我规划一份基于本周天气的健身计划并整理成PDF”,AI 就能自动查询天气、搜索健身教程、整合信息并最终生成文件——这已不再是科幻。这类能够自主规划、调用工具、执行复杂任务的系统,就是 AI Agent(智能体)

大语言模型(LLM)本身如同一个“装在罐子里的大脑”,知识渊博却无法与环境互动。AI Agent 则为它赋予了“身体”和“手脚”(即工具),使其能够感知环境、进行决策规划并执行具体行动。而 AI Agent框架,正是构建这些智能系统的“脚手架”,它们将底层的复杂性封装起来,让开发者能够高效地搭建从简单助手到复杂协作系统的各类应用。

今天,我们直接通过代码实践,从零搭建一个真正能干活的多 AI 智能体(Multi-Agent)系统。你将看到:

  • 如何用 AutoGen 让多个 AI 智能体通过“对话”进行协作。
  • 如何用 LangGraph 像搭乐高一样编排复杂的工作流。
  • 以及面对众多的框架,你究竟该如何做出选择

一、AI Agent核心概念:从大脑到行动者

1.1 智能体的工作原理

一个 AI Agent 的核心工作流程是一个自主循环:

  1. 观察:接收用户输入或工具执行的结果。
  2. 思考:利用 LLM 分析当前状况,规划下一步行动。
  3. 行动:调用工具执行或直接生成回答。
  4. 重复以上步骤,直至任务完成。

其中,工具(Tools) 是 Agent 能力的延伸。任何具有明确定义的函数都可以作为工具,例如 API 调用、数据库查询、代码执行等。

1.2 为什么需要专用框架?

对于简单任务,直接编码调用 LLM 和工具或许可行。但一旦涉及 状态管理复杂决策(在多工具中选择)、长流程编排多智能体协作,代码会迅速变得难以维护。专业的框架为此提供了:

  • 清晰抽象:如状态、节点、工作流等概念模型。
  • 内置集成:对主流工具与模型提供开箱即用的支持。
  • 调试支持:可视化的执行流程与状态追踪工具。
  • 效率与可靠性:标准化的开发模式能减少错误,提升开发速度。

二、最佳 AI Agent框架横向对比

以下列表汇总了当前可用于构建 AI Agent 的主要框架,排序大致基于框架对流程控制的复杂度和精细度递增。最佳选择取决于前文所述的各项考量因素,本列表旨在帮助你根据自身需求和技能水平做出决策。

RelevanceAI
https://relevanceai.com

  • 适用场景:非技术人员的选择。无需编写代码即可通过用户界面创建代理和工具。部署快速,商业友好且用户体验佳。
  • 注意事项:不适合构建更复杂的系统,开发者社区规模有限。若你关注低延迟或最小化系统开销,此框架可能不适用。其为闭源框架,排查框架内部错误可能更为困难。

smolagents
https://smolagents.org

  • 简介:由 Hugging Face 开发的极简 AI 代理框架。提供典型的工具调用和代码代理功能,代码代理可生成并执行代码。附有非常出色的教程。
  • 适用场景:如果你是想开始构建代理的开发者,smolagents 是绝佳的起点。你可以深入了解代理的运作方式,验证其是否适合解决问题,后续再转向更高级的框架。其代理自主性很强,通常建议用于简单用例或作为学习工具。

PhiData
https://docs.phidata.com/introduction

  • 简介:使你能够构建具备记忆、工具、知识、推理或多代理编排能力的 AI 助手。其设计旨在简化将大语言模型转化为助手的过程。相比自行编码,它能更轻松地处理记忆、工具和用户界面。
  • 特点:社区正在兴起,框架为开源。

LangChain
https://www.langchain.com

  • 现状:当前采用最广泛的代理框架。
  • 功能:允许开发者链式组合提示、模型、记忆和工具。对主流 LLM 提供商提供原生支持,并拥有丰富的工具生态系统供代理使用。模块化程度高,是中等复杂度任务的良好解决方案。
  • 学习曲线:需要理解一些抽象概念,如链、代理、提示设计、记忆、检索器等,但其社区已相当成熟,有大量教程可用。集成性和可扩展性亦是其强项。

LlamaIndex
https://www.llamaindex.ai

  • 侧重点:高度专注于数据摄取、索引、检索、查询引擎和文档处理。
  • 适用场景:用它构建 RAG(检索增强生成)应用相当容易,但对于需要众多不同角色代理进行复杂编排的场景,可能不太适合。性能取决于所提供文档的质量和嵌入模型。
  • 扩展性:允许通过自定义索引、检索器等进行扩展。社区活跃,但该框架可能并非高度分支化或复杂工作流程的最佳解决方案。

CrewAI
https://www.crewai.com

  • 设计目标:专为具有角色/团队的高层级多代理协作而设计,利用 LLM 来协调代理工作。
  • 特点:虽比 LangChain 新,但同样受欢迎。可用其快速构建多代理 AI 系统。但对于非常庞大的任务,性能可能仍不理想,因为它不提供精细的流程控制,代理自行组织一切。不支持并行执行。

AutoGen
https://github.com/microsoft/autogen

  • 核心概念:由微软开发的开源框架,其核心理念是通过 多智能体之间的对话与协作 来完成任务。它允许开发者定义具有不同角色(如助手、用户代理、代码执行器等)的代理,并让它们通过自然语言对话自主协商、规划和执行复杂工作流。
  • 主要优点
    1. 强大的多代理协作:专为模拟多角色、动态交互的复杂场景设计,代理间通过对话自主协调。
    2. 灵活的对话模式:支持自定义对话流程,可实现自动聊天、有条件分支和人类介入。
    3. 研究友好:因其对话机制,非常 适合科研、复杂系统模拟和探索性项目

LangGraph
https://www.langchain.com/langgraph

  • 定位:LangChain 的扩展,也是列表中最先进、控制力最强的 AI Agent 框架之一。
  • 核心概念:允许你将代理工作流程定义为 有状态图(Stateful Graph) 。其中每个节点代表一个执行步骤,边则定义可能的转换。代理可以追踪除消息历史外的任何其他所需状态信息。
  • 强大功能:提供条件边、循环、持久状态、易于调试、自定义工具、结构化输出等众多功能。它以 LangChain 为基础,与 LangSmith(观测工具)共同构成了构建高级代理的完整环境。其高精度的控制能力,使其非常适合对可扩展性和极低延迟有苛刻要求的生产级解决方案。

选择框架时需要综合考虑以下因素:

  • 易用性:从无代码到需要图编程基础。
  • 任务复杂度:简单的链式任务无需重型框架。
  • 社区与生态:影响学习成本与问题解决效率。
  • 性能与延迟:精细化控制通常意味着更低延迟。
  • Token使用:自主性高的Agent可能因重复尝试而消耗更多Token。
  • 可扩展性:复杂系统需考虑并发、状态管理与错误处理。
  • 集成与安全:现有技术栈兼容性与数据隐私要求。

三、深度实战一:AutoGen —— 对话即协作

3.1 AutoGen核心理念

微软推出的 AutoGen 提出了一种优雅的范式:通过可编程的对话实现多智能体协作。它允许构建由多个专业 Agent(如规划者、开发者、执行者、质检员)组成的团队,它们通过自然语言交流协同解决复杂问题,且人类可随时介入。

3.2 实战:用AutoGen构建AI角色推理游戏

以下示例展示如何用不到 100 行代码创建一个多 AI 角色协作推理的趣味场景:

# 安装:pip install pyautogen
import os
from autogen import ConversableAgent, GroupChat, GroupChatManager

# 1. 配置LLM(以阿里云通义千问为例)
llm_config = {
    "config_list": [
        {
            "model": "qwen-max-1201",
            "api_key": os.getenv("QWEN_API_KEY"),
            "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1"
        }
    ]
}

# 2. 创建历史人物AI Agent
aristotle = ConversableAgent(
    name="亚里士多德",
    system_message="""你是亚里士多德(公元前384-322),古希腊哲学家。思维严谨,注重逻辑与经验观察。在推理时善于层层追问,揭露矛盾。""",
    llm_config=llm_config,
    human_input_mode="NEVER"
)

mozart = ConversableAgent(
    name="莫扎特",
    system_message="""你是沃尔夫冈·阿马德乌斯·莫扎特(1756-1791),天才作曲家。感性敏锐,注意对话中的韵律与情感线索。""",
    llm_config=llm_config,
    human_input_mode="NEVER"
)

# 3. 创建人类玩家Agent(成吉思汗)
genghiskhan = ConversableAgent(
    name="成吉思汗",
    system_message="""你是成吉思汗(1162-1227),蒙古帝国创立者。你实际上是人类玩家,需要伪装成AI。避免暴露对人类现代知识的陌生。""",
    llm_config=llm_config,
    human_input_mode="ALWAYS"  # 等待人类输入
)

# 4. 创建群聊与管理器
groupchat = GroupChat(
    agents=[aristotle, mozart, genghiskhan],  # 可添加更多角色
    messages=[],
    max_round=6,
    speaker_selection_method="round_robin"
)
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)

# 5. 列车员(主持人)启动游戏
guard = ConversableAgent(
    name="列车员",
    system_message="你是列车员,正在查票。你发现团体票上有5位历史伟人,但WiFi记录显示只有4个AI连接。",
    llm_config=llm_config,
    human_input_mode="ALWAYS"
)

guard.initiate_chat(
    manager,
    message="你们这张团体票上有五位历史上的伟人,但WiFi记录显示只有4个AI,也就是说你们中有一个是人类假扮的。请通过对话找出他。"
)

执行效果:AI 角色们将开始多轮对话,依据各自角色背景提问、推理,试图识别出人类玩家。此例清晰地展示了 AutoGen动态多角色协作对话 场景中的天然优势。

四、深度实战二:LangGraph —— 图工作流编排

4.1 LangGraph核心优势

作为 LangChain 的扩展,LangGraph 将 Agent 工作流定义为 有状态图(Stateful Graph)

  • 节点:代表执行步骤(如调用工具、处理数据)。
  • :定义步骤间流转逻辑(支持条件分支、循环)。
  • 状态:贯穿整个工作流的共享数据容器。

这种模式提供了无与伦比的 控制精度,适合需要严格流程、最小延迟与复杂错误处理的生产系统。

4.2 实战:用LangGraph构建天气新闻简报助手

# 安装:pip install langgraph langchain-openai langchain-community
import os
from dotenv import load_dotenv
from typing import TypedDict, Annotated, Sequence
import operator
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_community.tools import TavilySearchResults
from langchain_community.utilities import OpenWeatherMapAPIWrapper
from langchain_core.messages import BaseMessage, HumanMessage

# 1. 加载环境变量(需配置OPENAI_API_KEY、TAVILY_API_KEY、OPENWEATHER_API_KEY)
load_dotenv()

# 2. 初始化LLM与工具
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
search_tool = TavilySearchResults(api_key=os.getenv("TAVILY_API_KEY"), max_results=2)
weather_tool = OpenWeatherMapAPIWrapper(api_key=os.getenv("OPENWEATHER_API_KEY"))

# 3. 定义状态结构(共享白板)
class AgentState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], operator.add]
    city: str
    weather_info: str
    news_info: str
    final_report: str

# 4. 定义节点函数
def parse_input(state: AgentState):
    """解析用户输入,提取城市"""
    user_input = state["messages"][-1].content
    # 简化为固定城市,实际可用NLP解析
    return {"city": "北京"}

def get_weather(state: AgentState):
    """调用天气工具"""
    city = state["city"]
    weather_result = weather_tool.run(city)
    return {"weather_info": weather_result}

def get_news(state: AgentState):
    """调用新闻搜索工具"""
    query = f"{state['city']} AI technology news today"
    news_result = search_tool.run(query)
    news_summary = "\n".join([f"- {res['title']}: {res['content'][:100]}..." for res in news_result])
    return {"news_info": news_summary}

def generate_report(state: AgentState):
    """汇总信息生成最终报告"""
    prompt = f"""
    基于以下信息生成一份简洁的Markdown格式简报:
    城市:{state['city']}
    天气:{state.get('weather_info', '无')}
    新闻:{state.get('news_info', '无')}
    """
    response = llm.invoke(prompt)
    return {"final_report": response.content}

# 5. 构建图工作流
def create_workflow():
    workflow = StateGraph(AgentState)

    workflow.add_node("parse_input", parse_input)
    workflow.add_node("get_weather", get_weather)
    workflow.add_node("get_news", get_news)
    workflow.add_node("generate_report", generate_report)

    workflow.set_entry_point("parse_input")
    workflow.add_edge("parse_input", "get_weather")
    workflow.add_edge("parse_input", "get_news")
    # 并行执行天气与新闻查询,两者都完成后进入报告生成
    workflow.add_edge("get_weather", "generate_report")
    workflow.add_edge("get_news", "generate_report")
    workflow.add_edge("generate_report", END)

    return workflow.compile()

# 6. 运行Agent
app = create_workflow()
initial_state = {"messages": [HumanMessage(content="查询北京天气和AI新闻")], "city": "", "weather_info": "", "news_info": "", "final_report": ""}
result = app.invoke(initial_state)
print(result["final_report"])

LangGraph精妙之处

  1. 清晰的状态管理:所有数据在 AgentState 中定义与传递,避免了全局变量的混乱。
  2. 可视化流程:图结构使工作流一目了然,易于调试与扩展。
  3. 内置并行与同步get_weatherget_news 节点可以并行执行,并自动同步后进入下一步 generate_report
  4. 极强扩展性:新增步骤仅需定义新的节点函数并将其插入图中,整体架构能保持整洁。

五、框架选择终极指南与最佳实践

5.1 决策清单:你的场景匹配哪个框架?

你的身份与目标 推荐框架 关键理由
非技术背景,快速验证想法 RelevanceAI 无代码可视化,最快上线
初学者,希望理解Agent核心概念 smolagents 极简API,学习曲线平缓,官方教程优秀
构建中等复杂度应用,重视生态 LangChain 丰富集成、工具与社区,文档案例海量
核心是文档问答/RAG系统 LlamaIndex 专精数据处理与检索,性能优化到位
设计多角色协作虚拟团队 CrewAI 角色、任务、流程抽象直观,适合内容生产等场景
需要动态对话协作与人类介入 AutoGen 对话即协作,适合研究、创意类动态任务
构建复杂、稳定、可控的生产流程 LangGraph 图模型提供最高控制精度,适合金融、运维等严肃场景

5.2 避坑与实践建议

  1. 避免过度设计:简单任务无需复杂框架。例如,仅调用1-2个API的任务,使用 LangChain 的 AgentExecutor 或 smolagents 即可。
  2. 优化Token消耗:Agent 的“思考-行动”循环会多次调用 LLM。利用框架的上下文管理功能(如 LangGraph 的状态选择)避免不必要的历史消息传入,是 Python 开发者优化成本的关键。
  3. 编写清晰的工具描述:工具的 description 字段是 LLM 决定是否及如何调用工具的关键。模糊的描述会导致错误的调用。
  4. 实现错误处理:工具调用可能失败。设计容错机制,例如在 LangGraph 中通过 条件边 检查结果并路由到重试或降级处理节点。
  5. 从小规模开始:先用简单框架或快速原型验证核心需求,观察哪些任务模式重复出现,再使用更高级的框架(如 LangGraph)将其固化为优化的工作流。
  6. 重视可观测性:利用框架提供的调试工具(如 LangSmith for LangChain)追踪执行流程、检查中间状态,这对复杂系统的开发和维护至关重要。

写在最后

AI Agent 技术正从“炫技”走向“实用”,成为开发者延伸能力的重要杠杆。无论是 AutoGen 通过对话实现的动态协作,还是 LangGraph 通过图编排提供的精密控制,都在推动 AI 从“被动问答”走向“主动执行”。

技术的本质是延伸人的能力。Agent 延伸的,正是我们规划、协调与执行的综合能力。选择适合的框架,从小处着手,你可以构建出能自动处理邮件、监控日志、生成报告甚至管理项目的数字员工。

你现在最希望哪个重复性任务被 AI Agent 自动化?是客服邮件处理、系统日志监控,还是个性化的信息筛选?欢迎在 云栈社区 分享你的场景和想法,让我们共同探索技术实现的更多可能。

参考资料
[1] LangGraph官方教程: https://langchain-ai.github.io/langgraph/
[2] AutoGen官方示例: https://microsoft.github.io/autogen/
[3] Hugging Face smolagents课程: https://huggingface.co/learn/agents-course/
[4] LangChain Agent概念指南: https://python.langchain.com/docs/concepts/#agents

从星星箱子中探出头的卡通小丑




上一篇:美国AI算力市场格局:英伟达GPU与谷歌TPU的竞争与博弈
下一篇:提高C语言代码质量:15个必备宏定义示例与技巧
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-25 19:24 , Processed in 0.367696 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表