首页
/ 从助手到执行者:生成式 AI 入门课程第 17 课的 AI Agent 框架详解——LangChain、AutoGen、TaskWeaver 与 JARVIS

从助手到执行者:生成式 AI 入门课程第 17 课的 AI Agent 框架详解——LangChain、AutoGen、TaskWeaver 与 JARVIS

2026-09-06 19:05:57作者:胡唯隽

本文基于《Generative AI for Beginners》课程第 17 课 “AI Agents” 的阿拉伯语版教学文档(translations/ar/17-ai-agents/README.md)撰写,对应课程英文版 17-ai-agents/README.md。文章系统讲解 AI Agent “状态 + 工具” 的核心模型、LangChain / AutoGen / TaskWeaver / JARVIS 四大框架的设计差异与典型代码模式。读完之后,你将能够独立解释 AI Agent 与聊天机器人的区别,理解每个框架如何管理状态(state)与工具(tools),并可以按课后作业的要求,用 AutoGen 搭建一个多角色的“创业公司商务会议”多智能体应用。

课程背景与学习目标

AI Agent 代表了生成式 AI 领域中一项激动人心的进展:它使大语言模型(LLM)从“只会回答的助手”进化为“能够执行动作的代理人(Agent)”。AI Agent 框架让开发者能够构建这样的应用——为 LLM 提供对工具(tools)的访问权限与状态(state)管理能力;同时,这些框架还增强了过程的可见性(visibility),使用户和开发者可以监控 LLM 规划并即将执行的动作,从而改善整体体验管理。

本课程的这一课覆盖三个核心领域:

  • 理解什么是 AI Agent——AI Agent 究竟是什么?
  • 探索不同的 AI Agent 框架——每个框架的独特之处在哪里?
  • 将这些 Agent 应用于不同使用场景——什么时候应该使用 AI Agent?

完成本课学习后,你将能够:

  • 解释什么是 AI Agent,以及它们如何被使用;
  • 理解一些流行 AI Agent 框架之间的差异,以及它们各自的定位;
  • 理解 AI Agent 的工作机制,从而能够基于这些框架构建应用。

AI Agent 是什么:状态与工具两大支柱

AI Agent 是生成式 AI 世界中非常激动人心的领域。随着热度上升,术语的使用经常相互混淆。为了保持简单,并尽可能涵盖所有自称“AI Agent”的工具,课程采用了如下定义:

AI Agent 通过赋予大语言模型(LLM)对「状态(state)」和「工具(tools)」的访问权限,使其能够执行任务。

AI Agent 核心模型:LLM 连接状态(State)与工具(Tools)两大要素

下面逐一明确这些术语:

  • 大语言模型(Large Language Models)——即本课程全程引用的那些模型,例如 GPT-3.5、GPT-4、Llama-2 等。
  • 状态(State)——指 LLM 所处的上下文(context)。LLM 会利用自己过去动作的上下文以及当前上下文,来引导它做出后续动作的决策。AI Agent 框架让开发者更容易维护这一上下文。
  • 工具(Tools)——为了完成用户请求的、且已被 LLM 规划好的任务,LLM 需要访问工具。工具的示例包括:数据库、API、外部应用程序,甚至可以是另一个 LLM!

这些定义为理解后续各框架的实现方式打下了基础。值得注意的是,“工具”的底层机制与本课程第 11 课讲解的 function calling(函数调用)一脉相承——function calling 让模型以一致的结构化格式调用外部函数并获取外部数据(参见 11-integrating-with-function-calling/README.md);而 Agent 框架则在此基础上进一步加入了状态管理与多步编排。

LangChain Agents:用 AgentExecutor 管理状态与工具

LangChain 的 Agent 是上述定义的一种直接实现。

状态管理。 LangChain 使用一个内置函数 AgentExecutor 来管理状态。该函数接收已定义的 agent 以及可供该 agent 使用的 tools

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

AgentExecutor 同时会存储聊天历史(chat history),以此提供对话上下文。课程配图展示了完整链条:使用 ChatOpenAI 初始化 LLM → 通过 create_openai_functions_agent(llm, tools) 创建 agent → 交给 AgentExecutor 执行并维护聊天历史。

工具目录(Tools Catalog)。 LangChain 提供了一个工具目录,其中收录的工具可以由社区和 LangChain 团队开发,并被直接导入到你的应用供 LLM 调用。例如可以先导入搜索类工具:

from langchain_community.tools.tavily_search import TavilySearchResults
search, retriever_tool = TavilySearchResults()

随后定义这些工具并传递给 AgentExecutor 即可。

可见性:LangSmith。 在讨论 AI Agent 时,可见性同样重要。对应用开发者而言,理解 LLM 正在使用哪个工具、以及为什么使用它,至关重要。为此,LangChain 团队开发了 LangSmith 工具,用于观测和调试 Agent 的推理与工具调用链路。

AutoGen:以“会话”为核心的可定制多智能体框架

接下来讨论的框架是 AutoGen。AutoGen 的核心焦点是会话(conversations):其中的 Agent 同时具备**可会话(conversable)可定制(customizable)**两大特性。

可会话(Conversable)——LLM 之间可以主动发起并持续对话,以协作完成任务。实现方式是创建 AssistantAgent 并为它们指定各自的系统消息(system message):

coder = autogen.AssistantAgent(
    name="Coder",
    llm_config=llm_config,
)
pm = autogen.AssistantAgent(
    name="Product_manager",
    system_message="Creative in software product ideas.",
    llm_config=llm_config,
)

可定制(Customizable)——Agent 不仅可以是 LLM,还可以定义为用户或工具。开发者可以定义 UserProxyAgent,它负责与真实用户交互、收集反馈,以推进任务的完成;用户的反馈既可以继续任务的执行,也可以终止它:

user_proxy = UserProxyAgent(name="user_proxy")

AutoGen 会话式多智能体架构:LLM 与用户、工具围绕系统消息交互,并生成 Python 代码完成状态管理

状态与工具:以“纽约出行穿衣建议”为例

在 AutoGen 中,为了改变和管理状态,assistant Agent 会生成 Python 代码来完成具体任务。下面用一个完整流程演示这一点。

第一步:用系统消息定义 LLM 的职责边界

system_message="For weather related tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done."

这条系统消息将特定 LLM 引导到与其任务相关的函数上,并要求任务完成后回复 TERMINATE。请记住:在 AutoGen 中你可以定义多个带有不同系统消息的 AssistantAgent,每个 Agent 各司其职。

第二步:由用户发起会话

user_proxy.initiate_chat(
    chatbot,
    message="I am planning a trip to NYC next week, can you help me pick out what to wear?",
)

这条来自 user_proxy(人类)的消息,将触发 Agent 开始探索它应当执行哪些可能的函数。

第三步:执行函数(工具调用)

会话处理完成后,Agent 会发出建议的工具调用。课程给出的实际运行输出如下:

chatbot (to user_proxy):

***** Suggested tool Call: get_weather ***** Arguments: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** --------------------------------------------------------------------------------

>>>>>>>> EXECUTING FUNCTION get_weather... user_proxy (to chatbot): ***** Response from calling function "get_weather" ***** 112.22727272727272 EUR ****************************************************************

可以看到 Agent 自动构造了 get_weather 的参数(地点、时间范围、温度单位)并执行了函数调用。根据你的配置,该函数可以被自动执行并由 Agent 直接读取结果,也可以基于用户输入来触发执行。

这一“模型提议工具 → 框架执行函数 → 结果回灌给模型”的闭环,正是第 11 课 function calling 在 Agent 场景中的工程化封装:课程英文版中还整理了 AutoGen 的官方代码样例索引,可结合 17-ai-agents/README.md 中引用的样例入口继续探索如何上手构建。

TaskWeaver:代码优先(Code-First)的数据分析 Agent

接下来介绍的框架是 TaskWeaver。它以“代码优先(code-first)”著称:与只处理 strings 的 Agent 不同,TaskWeaver 可以直接操作 Python 的 DataFrame。这一点在数据分析和数据生成任务中极其有用,例如创建图表、生成随机数等。

状态与工具:Planner 与 Plugins

状态管理——Planner 为了管理会话状态,TaskWeaver 使用 Planner 这一概念。Planner 是一个 LLM,它接收用户的请求,并规划出为满足该请求需要完成的任务清单(task map)。

工具——Plugins 为了完成任务,Planner 会暴露给一组被称为 Plugins 的工具集合。这些插件可以是 Python 类,也可以是一个通用的代码解释器(general code interpreter)。插件以**嵌入向量(embeddings)**的形式存储,这样 LLM 就能更好地检索到正确的插件。课程配图中可以看到:LLM 接到请求后经过 Planner 规划,调用 random_numbers = np.random.rand(10) 这类代码,再由代码解释器执行并返回结果。

课程给出了一个处理异常检测的插件示例:

class AnomalyDetectionPlugin(Plugin):
    def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str):
        # 在 DataFrame 上执行异常检测逻辑
        ...

执行前的代码校验。 与“直接让 LLM 写代码并运行”的朴素做法不同,TaskWeaver 会在执行之前对生成的代码进行校验(verified),这是其安全性设计的关键一环。

长期上下文——experience TaskWeaver 管理上下文的另一特性是 experience:它允许将会话上下文以 YAML 文件的形式存储为长期记忆。通过配置,LLM 在反复接触过往会话之后,可以在特定任务上随时间不断改进——相当于给 Agent 增加了“经验积累”机制。

JARVIS:LLM 做编排者,专业 AI 模型做工具

最后一个框架是 JARVIS。JARVIS 的独特之处在于:它使用一个 LLM 来管理会话的状态,而它的工具则是其他 AI 模型。每个 AI 模型都是一个专攻特定任务的专业模型,例如目标检测(object detection)、语音转写(transcription)或图片描述(image captioning)。

JARVIS 架构:通用 LLM 作为编排中心,将任务分发给目标检测、图像描述等专业 AI 模型并聚合结果

作为通用模型,LLM 接收用户的请求,识别出具体任务以及完成该任务所需的参数/数据,然后将请求格式化为专业模型可以解释的结构(如 JSON):

[{"task": "object-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg"}}]

其中 task 指明要执行的任务类型,id 标识任务节点,dep 表示任务依赖(-1 表示无前置依赖),args 是传给专业模型的输入参数。专业 AI 模型基于任务返回预测结果后,LLM 接收该响应。

如果完成一个任务需要多个模型协作,LLM 还会先解读各个模型的响应,再将它们整合起来,生成给用户的最终回复。课程以“请描述图片中的物体并统计其数量”为例说明:LLM 分别调用目标检测模型(得到物体及数量)与图像描述模型(得到文字描述),再聚合两者生成第一人称的最终答复。

这一架构给出了一个重要的设计启示:工具不必都是函数调用,专业 AI 模型本身就可以是 Agent 的工具,由通用 LLM 充当“调度中枢”。

补充:英文原版同课新增的 Microsoft Agent Framework 小节

需要说明的是,课程英文版 17-ai-agents/README.md 相较阿拉伯语版已新增第五个框架——Microsoft Agent Framework:微软面向 Python 与 .NET 的开源 Agent SDK,将 Semantic Kernel 的企业级能力与 AutoGen 的多智能体编排整合为一体,是 AutoGen 的推荐后继者。其状态通过 threads 管理(保存消息历史并可持久化、暂停与恢复);工具则是带类型注解的普通 Python 函数——参数注解会自动转成 schema 供模型进行 function calling,同时支持 MCP 服务器与托管工具。最小示例如下:

import asyncio
from typing import Annotated

from pydantic import Field
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient


def get_weather(
    location: Annotated[str, Field(description="The location to get the weather for.")],
) -> str:
    """Get the weather for a given location."""
    return f"The weather in {location} is sunny with a high of 22°C."


async def main():
    agent = Agent(
        client=OpenAIChatClient(),
        instructions="You are a helpful assistant that can answer weather questions.",
        tools=[get_weather],
    )
    response = await agent.run("What's the weather in Amsterdam?")
    print(response)


asyncio.run(main())

多智能体编排则通过 Sequential / Concurrent 构建器实现:

from agent_framework.orchestrations import SequentialBuilder, ConcurrentBuilder

# 顺序执行:每个 agent 将上下文传递给下一个
sequential = SequentialBuilder(participants=[researcher, writer, editor]).build()

# 并行扇出:多个 agent 同时执行,再聚合结果
concurrent = ConcurrentBuilder(participants=[analyst_a, analyst_b, analyst_c]).build()

安装方式为:

pip install agent-framework-core
# 可选集成
pip install agent-framework-openai       # OpenAI 与 Azure OpenAI
pip install agent-framework-foundry      # Microsoft Foundry

这与课程 docs/ENHANCED_FEATURES_ROADMAP.md 中“为第 17 课 AI Agents 增加多智能体编排(multi-agent orchestration)内容”的规划方向一致。

课后作业:用 AutoGen 模拟一场创业公司商务会议

按照课程阿拉伯语版文档的布置,你可以继续使用 AutoGen 巩固对 AI Agent 的理解,构建如下应用:

  1. 构建一个模拟教育类创业公司内部不同部门商务会议的应用;
  2. 编写引导性的系统消息(system messages),让各 LLM 理解不同部门的人格设定(personas)与优先级,并让用户能够提出(pitch)一个新产品创意;
  3. 各 LLM 应代表各自部门生成追问(follow-up questions),用以打磨和改进这次产品提案与创意。

这个作业恰好综合了本课的全部关键概念:多个 AssistantAgent 对应不同部门(可会话)、系统消息定义角色边界(可定制)、UserProxyAgent 承载用户提案输入(人机反馈闭环),以及多轮对话中状态的持续维护。

课程资源索引

完成本课后,课程建议继续浏览配套的生成式 AI 学习资源集合,持续进阶你的生成式 AI 知识体系。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
915
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388