news 2026/9/10 7:57:08

深入理解 AI Agents:在 Generative AI for Beginners 中构建基于状态与工具的智能体应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解 AI Agents:在 Generative AI for Beginners 中构建基于状态与工具的智能体应用

深入理解 AI Agents:在 Generative AI for Beginners 中构建基于状态与工具的智能体应用

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

本篇技术指南以本仓库第 17 课「AI Agents」为核心(对应英文原版 17-ai-agents/README.md 及印地语翻译 translations/hi/17-ai-agents/README.md),系统讲解 AI Agent 的核心定义、五大主流框架(LangChain Agents、AutoGen、Microsoft Agent Framework、Taskweaver、JARVIS)的架构差异与实战用法,并结合仓库共享工具模块与函数调用课程源码,帮助你理解「状态 + 工具」如何把大语言模型(LLM)从被动应答的助手升级为能够主动执行任务的 Agent。

学习目标

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

  • 说明 AI Agent 是什么,以及它们如何被使用;
  • 理解主流 AI Agent 框架之间的差异及各自的设计取向;
  • 理解 AI Agent 的运作机制,进而能够基于它们构建应用程序。

什么是 AI Agent?

AI Agent 是生成式 AI 领域最令人兴奋的前沿方向之一。随着这股热潮而来的是术语与应用上的混淆。为了让定义简洁且能涵盖大多数被称为 AI Agent 的工具,本课程采用如下定义:

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

逐词拆解这三个组成部分:

  • 大语言模型(Large Language Models):即本课程通篇提及的 GPT-3.5、GPT-4、Llama-2 等模型,它们是 Agent 的「大脑」;
  • 状态(State):指 LLM 当前工作的上下文。LLM 会利用自身过往行动的上下文与当前语境来指导后续决策。AI Agent 框架让开发者能以更简单的方式维护这份上下文;
  • 工具(Tools):为了完成用户请求的任务、以及 LLM 规划出的行动,LLM 需要访问工具。工具可以是数据库、API、外部应用程序,甚至是另一个 LLM。

这套定义构成了后续理解各框架实现的共同语言。下面我们逐一探索几个不同的 AI Agent 框架。

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

LangChain Agents 是对上述定义的直接实现。

状态管理上,LangChain 使用一个内置组件AgentExecutor:它接收已定义的agent以及该 agent 可用的tools,并负责存储聊天历史,从而为对话提供上下文。

工具层面,LangChain 提供了可导入到应用中的工具目录,LLM 可以访问这些工具,它们由社区与 LangChain 团队共同构建。你可以定义这些工具并将其传给Agent Executor

此外,可见性(Visibility)是讨论 AI Agent 时不可忽视的方面。应用开发者需要知道 LLM 正在使用哪个工具、以及为什么使用它。为此,LangChain 团队开发了LangSmith用于观测与追踪。

AutoGen:以对话为中心的可对话、可定制框架

接下来讨论的框架是 AutoGen。AutoGen 的核心关注点是对话(conversations),其 Agent 兼具可对话(conversable)可定制(customizable)两大特性。

可对话:LLM 可以为了完成某项任务而与另一个 LLM 开启并持续对话。做法是创建AssistantAgents并为它们赋予特定的系统消息:

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, )

可定制:Agent 不仅可以被定义为 LLM,还可以被定义为用户或工具。作为开发者,你可以定义一个UserProxyAgent,它负责在完成任务过程中与用户交互、获取反馈——这份反馈可以继续任务的执行,也可以中止它:

user_proxy = UserProxyAgent(name="user_proxy")

AutoGen 的状态与工具

在 AutoGen 中,为了改变和管理状态,辅助 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 知道哪些函数与它的任务相关。注意,使用 AutoGen 时,你可以定义多个携带不同系统消息的AssistantAgents

由用户发起对话

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 去探索它应当执行哪些函数的过程。

函数被执行

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 课「Integrating with function calling」深入讲解了这种「LLM 规划 → 应用执行函数 → 结果回传给 LLM 生成自然语言答复」的机制。该课程明确指出:使用函数调用时,LLM 并不会真正执行函数,而是按你定义的结构返回function_call结果,应用再根据结构化响应决定执行哪个函数。这恰好是 AutoGen 等 Agent 框架实现工具调用的底层能力,可视为理解 Agent 行为的前置知识。

Microsoft Agent Framework:AutoGen 的官方继任者

Microsoft Agent Framework 是微软面向Python.NET的开源 Agent 与多 Agent 系统 SDK。它融合了此前两个微软项目的优势——Semantic Kernel的企业级特性与AutoGen的多 Agent 编排能力——形成一个统一且受支持的框架。如果你今天要启动一个新的 Agent 项目,它就是 AutoGen 的推荐继任者。

该框架的规模可以从单个聊天 Agent一直扩展到复杂的多 Agent 工作流,并直接集成 Microsoft Foundry、Azure OpenAI 与 OpenAI;同时通过 OpenTelemetry 提供内建的可观测性,让你能够精确追踪 Agent 的行为。

状态与工具

  • 状态:框架通过**线程(threads)**为你管理对话上下文。Agent 会跟踪消息历史(用户请求、工具调用及其结果),因此每一轮对话都建立在前一轮之上;线程还可以持久化,允许对话暂停后稍后恢复。
  • 工具:你可以直接传入普通 Python 函数来为 Agent 提供工具。带类型注解的参数会被自动转换为 schema,从而让模型知道如何以及何时调用它们(即函数调用)。框架还支持 Model Context Protocol(MCP)服务器以及代码解释器之类的托管工具。

下面是带自定义工具的单一 Agent 示例:

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())

若要连接 Microsoft Foundry 中的 Azure OpenAI,改为向客户端传入端点和凭据即可:

from azure.identity.aio import AzureCliCredential from agent_framework.openai import OpenAIChatClient client = OpenAIChatClient( model="my-gpt-4o-deployment", azure_endpoint="https://my-resource.openai.azure.com", credential=AzureCliCredential(), )

多 Agent 工作流

该框架的强项在于编排多个 Agent 协同工作。例如,你可以让 Agent 一个接一个顺序执行(每个 Agent 把上下文传给下一个),也可以并行扇出到多个 Agent 再聚合结果:

from agent_framework.orchestrations import SequentialBuilder, ConcurrentBuilder # Run agents in sequence, passing the conversation context along the chain sequential = SequentialBuilder(participants=[researcher, writer, editor]).build() # Fan out to agents in parallel, then aggregate their responses concurrent = ConcurrentBuilder(participants=[analyst_a, analyst_b, analyst_c]).build()

安装与上手:

pip install agent-framework-core # Optional integrations pip install agent-framework-openai # OpenAI and Azure OpenAI pip install agent-framework-foundry # Microsoft Foundry

Taskweaver:代码优先(Code-First)的 Agent

下一个框架是 Taskweaver。它被称为「代码优先」的 Agent,因为它在处理数据时不仅仅局限于strings,还能直接操作 Python 中的 DataFrame——这对数据分析与生成类任务(如绘制图表、生成随机数)极为有用。

状态与工具

为了管理对话状态,TaskWeaver 使用Planner这一概念。Planner是一个 LLM:它接收用户请求,并把完成该请求所需的任务绘制成执行计划。

为了完成任务,Planner会接触到名为Plugins的工具集合,这些插件可以是 Python 类,也可以是通用的代码解释器。插件以嵌入(embeddings)形式存储,以便 LLM 更好地检索到正确的插件。

下面是一个用于异常检测的插件示例:

class AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str):

代码在执行前会被验证。Taskweaver 中另一个上下文管理特性是experience:它允许把对话的上下文长期存储在一个 YAML 文件中,并可通过配置使 LLM 在接触到过往对话后,随着时间推移在特定任务上不断改进。

JARVIS:用其他 AI 模型充当工具的 Agent

最后要探索的框架是 JARVIS。JARVIS 的独特之处在于:它用一个 LLM 来管理对话的state,而tools则是其他 AI 模型——每一个都是执行特定任务的专家模型,例如物体检测、语音转写或图像描述。

作为通用模型,LLM 接收用户请求后,会识别出完成该任务所需的具体任务及参数/数据:

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

随后 LLM 将请求格式化为专家 AI 模型可解释的形式(如 JSON)。当 AI 模型基于任务返回预测后,LLM 接收该响应。如果完成任务需要多个模型,LLM 还会解读来自这些模型的响应,再把它们汇聚起来生成给用户的最终答复——例如用户询问一张图片中物体的描述与数量时,正是通过上述流程完成的。

四大框架横向对比

框架状态管理工具形态核心设计取向
LangChain AgentsAgentExecutor+ 聊天历史社区/团队构建的工具目录,可导入并传给执行器生态庞大、工具丰富、LangSmith 可观测
AutoGenAssistant Agent 生成 Python 代码函数调用(如get_weather),可自动执行或按用户输入执行多 Agent 对话、UserProxyAgent 人机协作
Microsoft Agent Framework线程(threads),可持久化类型注解的 Python 函数自动转 schema,支持 MCP 与托管工具单 Agent 到多 Agent 工作流、OpenTelemetry 观测、AutoGen 继任者
TaskweaverPlannerLLM +experience(YAML 长期记忆)Plugins(Python 类或代码解释器),以嵌入形式检索代码优先,擅长 DataFrame 数据分析与生成
JARVIS通用 LLM 管理对话状态其他专用 AI 模型(物体检测、转写、图像描述等)以模型即工具的方式编排专家模型

结合仓库源码理解 Agent 的工程落地

AI Agent 框架并非孤立概念——在真实应用中,Agent 的工具调用、状态维护与输入安全都需要工程化的代码支撑。本仓库的shared目录提供了可直接对照学习的工具模块:

  • API 客户端与请求封装:shared/python/api_utils.py 中的create_openai_client()create_azure_openai_client()分别负责基于OPENAI_API_KEY环境变量、以及基于AZURE_OPENAI_ENDPOINT/AZURE_OPENAI_API_KEY创建 OpenAI 客户端(Azure 客户端指向<endpoint>/openai/v1/端点以支持 Responses API);make_safe_request()则封装了带超时与重试(默认 3 次)的 HTTP 请求,可作为 Agent 调用外部工具时的稳健请求层。从源码结构看,这些工具函数的设计目标正是为 Agent 应用中「工具访问外部系统」提供统一的、可复用的基础设施。
  • 输入校验与提示注入防护:shared/python/input_validation.py 中的sanitize_prompt_input()会清除模板注入({{...}})、变量替换(${...})、<script>标签与javascript:等危险模式,另有validate_text_input()validate_url()(默认仅允许 HTTPS)等函数。当 Agent 需要把用户输入拼入系统消息或作为工具参数时,这类校验正是防止提示注入、保障工具调用安全的关键一环。
  • 函数调用基础:第 11 课 11-integrating-with-function-calling/README.md 给出了完整的工具定义与调用流程——通过typenamedescriptionparameters(含properties与可选的required)定义函数,再以tools=functionstool_choice="auto"调用 Responses API,让 LLM 自行决定调用哪个函数。这一「结构化工具定义 → 模型规划 → 应用执行 → 结果回传」的闭环,正是 AutoGen、Microsoft Agent Framework 等 Agent 框架执行工具调用的底层机制。

从源码结构可以推断,仓库的课程代码遵循「共享工具层 + 各课程专属脚本」的组织方式:shared下的公共模块被多个课程复用,而tests/目录(如 tests/test_api_utils.py、tests/test_input_validation.py)对上述工具函数进行了单元测试验证,为 Agent 应用的健壮性提供了保障。

动手实践:模拟教育初创公司商务会议

为了延续你对 AI Agent 的学习,可以使用 Microsoft Agent Framework 构建以下应用:

  • 一个模拟教育初创公司不同部门之间商务会议的应用;
  • 创建系统消息,引导 LLM 理解不同的人物角色(personas)与优先级,并让用户能够推介一个新产品的想法;
  • 随后让 LLM 从每个部门生成追问问题,以打磨和完善产品推介与产品创意。

这也是理解「多 Agent 协作 + 系统消息驱动角色行为」的最佳上手路径:每个部门 Agent 携带各自的系统消息与优先级,在顺序或并行编排下完成一轮有来有回的会议模拟。

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 7:57:00

CANN/ge权重更新模型编译接口

aclgrphBundleBuildModel 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、T…

作者头像 李华
网站建设 2026/9/10 7:50:54

宇宙演进揭示的规律:循序渐进,才是最快的路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华