ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

深入理解 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 AgentAI 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( nameCoder, llm_configllm_config, ) pm autogen.AssistantAgent( nameProduct_manager, system_messageCreative in software product ideas., llm_configllm_config, )可定制Agent 不仅可以被定义为 LLM还可以被定义为用户或工具。作为开发者你可以定义一个UserProxyAgent它负责在完成任务过程中与用户交互、获取反馈——这份反馈可以继续任务的执行也可以中止它user_proxy UserProxyAgent(nameuser_proxy)AutoGen 的状态与工具在 AutoGen 中为了改变和管理状态辅助 Agent 会生成 Python 代码来完成任务。下面是一次完整的过程示例带系统消息的 LLM 定义system_messageFor 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, messageI 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 FrameworkAutoGen 的官方继任者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 ProtocolMCP服务器以及代码解释器之类的托管工具。下面是带自定义工具的单一 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(descriptionThe location to get the weather for.)], ) - str: Get the weather for a given location. return fThe weather in {location} is sunny with a high of 22°C. async def main(): agent Agent( clientOpenAIChatClient(), instructionsYou are a helpful assistant that can answer weather questions., tools[get_weather], ) response await agent.run(Whats 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( modelmy-gpt-4o-deployment, azure_endpointhttps://my-resource.openai.azure.com, credentialAzureCliCredential(), )多 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 FoundryTaskweaver代码优先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 experienceYAML 长期记忆PluginsPython 类或代码解释器以嵌入形式检索代码优先擅长 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 APImake_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 给出了完整的工具定义与调用流程——通过type、name、description、parameters含properties与可选的required定义函数再以toolsfunctions与tool_choiceauto调用 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),仅供参考
返回列表